NixOS:在 configuration.nix 中设置默认频道

NixOS: Setting the default channel in configuration.nix

如何在 NixOS 的 /etc/configuration.nix 中设置默认频道?

有一个命令可以设置它并用

重建
sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable
sudo nixos-rebuild switch -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs

但我想在 configuration.nix 中设置它,这样我就不必每次都记住如何设置。谢谢!

nix.nixPath (ref) 选项看起来可以满足您的需求。

此外,nixos-unstable 频道可能更适合您,而不是 nixpkgs-unstable。我相信 nixpkgs 频道中的 pkgs 是为非 nixOS 系统测试和构建的,尽管我现在不记得有关于它的参考。

nix-channel --add https://nixos.org/channels/nixos-unstable/ 
nix-channel --update nixos-unstable
# /etc/nixos/configuration.nix
# Put nixos-unstable at the front of nixPath
{ lib, ... }:
{
  nix.nixPath = lib.mkDefault (lib.mkBefore [ "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos-unstable" ]);
}

如果您还想在 configuration.nix 中使用命令式 nix-channel 命令,您可以编写一个小型 systemd 服务来执行此操作,如图 here. 编辑:为了确保 configuration.nix 是从最新的 unstable 频道构建的,只需设置 nixpkgs 的值,就像@iElectric 的答案一样,Nix 将使用 [=32= 中包含的表达式] 每当它评估 configuration.nix 时。

PS 我意识到您也可以通过 nix-channel --add https://nixos.org/channels/nixos-unstable/ nixos 将 nixos 路径指向 nixos-unstable 通道,但我认为第一个解决方案更清晰。

设置nixPath = [ "nixpkgs=http://nixos.org/channels/nixos-unstable/nixexprs.tar.xz" ];,见https://github.com/snabblab/snabblab-nixos/blob/d8b9761b107293891b19021f2f0f77a0e3ba3746/modules/common.nix#L39

system.autoUpgrade.channel 可能是您正在寻找的东西

将其设置为任何频道,例如

system.autoUpgrade.channel = "https://nixos.org/channels/nixos-16.03-small/";

文档说:

by default, this is the channel set using nix-channel (run nix-channel --list to see the current value)

可以在 https://nixos.org/channels/

上找到最新的频道列表

参考:https://nixos.org/nixos/manual/options.html#opt-system.autoUpgrade.channel https://nixos.org/nixos/manual/index.html#idm140737317454064