如何在 configuration.nix 中以声明方式添加 NixOS 不稳定通道

Posted

技术标签:

【中文标题】如何在 configuration.nix 中以声明方式添加 NixOS 不稳定通道【英文标题】:how to add NixOS unstable channel declaratively in configuration.nix 【发布时间】:2018-07-27 15:15:07 【问题描述】:

NixOS 备忘单描述了如何在configuration.nix 中从unstable 安装软件包。

首先说添加不稳定的频道,如下所示:

$ sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ sudo nix-channel --update

那么,在configuration.nix 中使用这个频道很容易(因为它现在应该在NIX_PATH 上):

nixpkgs.config = 
  allowUnfree = true;
  packageOverrides = pkgs: 
    unstable = import <nixos-unstable> 
      config = config.nixpkgs.config;
    ;
  ;
;

environment = 
  systemPackages = with pkgs; [
    unstable.google-chrome
  ];
;

我不想手动执行nix-channel --addnix-channel --update 步骤。

我希望能够从configuration.nix 安装我的系统,而无需先运行nix-channel --addnix-channel --update 步骤。

有没有办法从configuration.nix 自动执行此操作?

【问题讨论】:

看看这里fetchTarball是如何使用的:***.com/questions/48733553/…你应该可以用同样的方式导入nixos-unstable。 你能添加一个解释这个的答案吗?尝试做类似的事情时,我不断收到infinite recursion encountered 错误。这个问题的答案似乎不太奏效。 @EmmanuelRosa 实际上,在多玩了一会儿之后,我就可以让它工作了。我会添加一个解释它的答案。 【参考方案1】:

在@EmmanuelRosa 的建议下,我得以完成这项工作。

以下是我/etc/nixos/configuration.nix的相关部分:

 config, pkgs, ... :

let
  unstableTarball =
    fetchTarball
      https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz;
in

  imports =
    [ # Include the results of the hardware scan.
      /etc/nixos/hardware-configuration.nix
    ];

  nixpkgs.config = 
    packageOverrides = pkgs: 
      unstable = import unstableTarball 
        config = config.nixpkgs.config;
      ;
    ;
  ;

  ...
;

这添加了一个可用于environment.systemPackagesunstable 衍生物。

这是一个使用它从 nixos-unstable 安装 htop 包的示例:

  environment.systemPackages = with pkgs; [
    ...
    unstable.htop
  ];

【讨论】:

在另一个问题中,Robert Hensing 解释了如何用来自不稳定的模块替换整个 nixos 模块:***.com/a/48842655/3040129 此解决方案有效,我只想指出,为了拥有可重现的系统,您必须将稳定通道和不稳定通道都固定在配置中,例如通过使用带有“rev”参数的 fetchFromGithub @DavidCosta 如果你发布了这个问题的答案,展示了如何做到这一点,我会投票赞成。 (而且我敢肯定,除了我之外的其他人都会欣赏它。) 我想知道我们是否可以在 pkgs 参数本身中做到这一点。但我不确定所有其他论点将如何发挥作用。 @srghma 我想这是因为github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz 和nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz 是不同版本的unstable。但这并不意味着您应该使用来自 nixos.org 的那个而不是来自 GitHub 的那个。事实上,似乎大多数人使用 fetchFromGitHub 之类的东西来固定不稳定的版本,而不是使用 fetchTarball

以上是关于如何在 configuration.nix 中以声明方式添加 NixOS 不稳定通道的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf configuration.nix

apache_conf configuration.nix

apache_conf configuration.nix

apache_conf configuration.nix

apache_conf configuration.nix

apache_conf configuration.nix