使用 npins 固定 NixOS,或者如何永远禁用通道而不使用 flakes

主要观点:

  • 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 evalNIX_PATH设置来构建配置。
  • 可通过nix.settingsnix.registry等设置修复NIX_PATH
  • 新工作流程中npins update./rebuild.sh可用于更新 NixOS。
阅读 12
0 条评论