如何在 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 --add
和nix-channel --update
步骤。
我希望能够从configuration.nix
安装我的系统,而无需先运行nix-channel --add
和nix-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.systemPackages
的unstable
衍生物。
这是一个使用它从 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 不稳定通道的主要内容,如果未能解决你的问题,请参考以下文章