TLDR
TLDR
这次处理的目标很小,核心是把 nh 从当前工作流里下线,并把 Darwin 侧的 GC 责任边界说清楚。
问题核心还是出自于 darwin 上(用nh配置)的GC一直没生效
之所以用nh,就是之前希望可以把 darwin和nixos的相关操作,都收束到 nh,但是现在看来没什么必要。NixOS上最好用的方案,肯定是 nixos-cli 了。而 darwin上,我使用的 Determinate-Nix 本身也提供了全套的更适用于 darwin 的方案。所以最终决定移除掉 nh,都选择各自的原生方案。
结论
- 已移除
nh的 Home Manager 配置。 - 已移除 Darwin 上依赖
nh clean all的launchdtask。 - NixOS 侧恢复使用原生
nix.gc。 - Darwin 侧显式声明由
Determinate Nixd负责 automatic GC,而不是继续依赖nh或手搓launchd。
原因
- 对当前仓库来说,
nh已经没有不可替代职责。 - 之前的 Darwin
nh-clean-all实际上已经失效,导致“看起来配了 GC,实际上没正常跑”。 - 当前 Darwin 本来就由
Determinate Nix接管 Nix daemon,因此 GC 也应由同一个 owner 负责,避免多套机制并存。
备注
- 这次不追求扩展能力,只做职责收敛和行为显式化。
- 后续如果排查 Darwin 垃圾回收,优先看
Determinate Nixd的配置与日志,不再看nh。
给 Determinate Nixd 补充 Auto prune generations能力 [2026-04-07]
- why this config:
determinateNixd.garbageCollector.strategy = "automatic"只明确了 Darwin 侧的 GC owner 是 Determinate Nixd,但没有覆盖按时间裁剪旧 system generations 的保留策略。因此额外补一条 host 级launchd,定时执行nix-collect-garbage --delete-older-than 7d。 - why put it in darwin hosts:
这属于
macos-ws的主机级运维策略,不是所有 Darwin 机器都必须共享的基础能力。先放在 host 层更符合当前仓库“按 host 决定是否启用”的约定,后续如果多台 Darwin 机器都需要,再抽成通用模块。