【问题标题】:NixOS: Setting the default channel in configuration.nixNixOS:在 configuration.nix 中设置默认频道
【发布时间】:2016-07-26 21:51:39
【问题描述】:

如何在 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 nixos


    【解决方案1】:

    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 将在评估configuration.nix 时使用该URL 中包含的表达式。

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

    【讨论】:

    • 感谢您的提示。看起来可以替换nixos-rebuild 命令,但是如何在configuration.nix 中添加不稳定通道本身?
    • 警告:这不能开箱即用(至少现在):路径错误,它会删除所需的条目,如 nixos-config...
    • @olejorgenb,nixPath 值可能需要包含在 lib.mkDefault 中以避免替换 nixos-config 值。不过,我目前没有 NixOS 设置来检查这一点。但是 NixOS 手册仍然有 nixPath 选项,所以我认为它仍然是合适的选择。我认为该路径应该仍然有效,尽管我似乎不小心遗漏了最初的 /,我会修改它。
    【解决方案2】:

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

    【讨论】:

    • 我试过了,但如果我理解正确的话,它似乎与使用 nix-channel 的效果不同。首先,在运行nixos-rebuild switch 时,它通过下载tar.xz 文件来升级nixpkgs。其次,几乎(?)每次需要 nixpkgs 时,都会下载它。我怎样才能拥有使用nix-channel 设置时的功能?也就是说,只有在明确要求时才升级 nixpkgs。不过,通道可以在 configuration.nix 中设置。这有意义吗?
    • @JaakkoLuttinen 你可以使用nixpkgs="${fetchTarball http://nixos.org/channels/nixos-unstable/nixexprs.tar.xz}",这样,获取只会在 nixos-rebuild 时发生,并且在运行时系统会看到一个已经拼接的 nix 存储路径
    【解决方案3】:

    system.autoUpgrade.channel 是您可能正在寻找的内容

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

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

    文档说:

    默认情况下,这是使用 nix-channel 设置的频道(运行 nix-channel --list查看当前值)

    可以在https://nixos.org/channels/上找到最新的频道列表

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

    【讨论】:

    • 谢谢,这看起来很有希望。不幸的是,我对 NixOS 的实验已经结束,所以我无法验证这一点。如果有人可以验证,那么我会选择这个作为答案。
    • 假设您最初的系统是 19.03,然后您将此自动升级通道设置为 19.09。它通过自动升级,一切都很好......但是然后你运行nixos-rebuild switch --upgrade并且......你回滚到以前的版本,对吗?感觉不太好……
    • 不幸的是,文档没有指定这一点,但看起来如果您有多个频道,它会按字母顺序使用第一个频道作为默认频道。有人可以确认吗?
    猜你喜欢
    • 2019-09-26
    • 2018-07-28
    • 2016-06-30
    • 2018-07-27
    • 1970-01-01
    • 2018-10-07
    • 2015-12-16
    • 2022-06-29
    • 2019-07-14
    相关资源
    最近更新 更多