如何在configuration.nix中以声明方式添加NixOS unstable channel

时间:2018-02-16 16:50:04

标签: nix nixos

NixOS备忘单介绍了如何在unstable中安装来自configuration.nix的软件包。

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

$ 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自动执行此操作?

1 个答案:

答案 0 :(得分:4)

我能够通过@EmmanuelRosa提出建议。

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

{ config, pkgs, ... }:

let
  unstableTarball =
    fetchTarball
      https://github.com/NixOS/nixpkgs-channels/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;
      };
    };
  };

  ...
};

这会添加unstable衍生物,可以在environment.systemPackages中使用。

以下是使用它从nixos-unstable安装htop包的示例:

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