web-dev-qa-db-ja.com

configuration.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 --addおよびnix-channel --updateの手順を実行する必要はありません。

最初にconfiguration.nixおよびnix-channel --addステップを実行せずに、nix-channel --updateからシステムをインストールできるようにしたいと思います。

configuration.nixからこれを自動化する方法はありますか?

12
illabout

@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;
      };
    };
  };

  ...
};

これにより、environment.systemPackagesで使用できるunstable派生物が追加されます。

これを使用して、nixos-unstableからhtopパッケージをインストールする例を次に示します。

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