主要观点:
- Nix 通道易致混淆,
nixos-rebuild
是糟糕的 shell 脚本,flakes 因在其基础上体验更好而更受青睐。 - 介绍 npins 及其工作原理,可替代 nix 通道进行包锁定。
- 给出消除 nix 通道、实现 NixOS 配置 pinned 且无需通道的方法,包括设置 npins、编写简单 shell 脚本、修复
NIX_PATH
等。 - 新的工作流程为使用
npins update
和./rebuild.sh
更新 NixOS,构建更快且机器不会不同步。 - 需改进
nixos-rebuild
等工具,如默认不应重建 Nix,nixos-option
也需重写。
关键信息:
nix-channel
易造成 NixOS 配置依赖不可控外部变量。nixos-rebuild
源代码可查看,其 UX 在 flakes 上更好。- npins 可找到最新 commit 并下载代码,用于 Nix 包锁定。
- 可通过设置 npins、修改
NIX_PATH
等消除 nix 通道。 - 新工作流程为
npins update
和./rebuild.sh
。
重要细节:
- Nix 构建过程中,非 flakes 时
nixos/default.nix
被评估,flakes 时用yourflake#nixosConfigurations.NAME
替代。 - 默认
NIX_PATH
包含$HOME/.nix-defexpr/channels
等。 npins
核心是获取指定版本 nixpkgs 并存储相关信息。- 简单 shell 脚本通过
nix eval
和NIX_PATH
设置来构建配置。 - 可通过
nix.settings
和nix.registry
等设置修复NIX_PATH
。 - 新工作流程中
npins update
和./rebuild.sh
可用于更新 NixOS。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。