6

私のconfiguration.nixでオーバーライドするパッケージがあります。だから私は次のようにコードを書きます:

nixpkgs.config = {
  allowUnfree = true;
  packageOverrides = {
    pkgs: rec {
      #mumble + pulse audio
      mumble = pkgs.mumble.override {
        pulseSupport = true;
      };

      #kernel for intel ethernet and Testing e1000e package override
      linuxPackages.e1000e = pkgs.linuxPackages.e1000e.overrideDerivation (attrs: {
        name = "e1000e-3.3.3-${config.boot.kernelPackages.kernel.version}";
        src = fetchurl {
          url = "https://www.dropbox.com/s/pxx883hx9763ygn/e1000e-3.3.3.tar.gz?dl=0";
          sha256 = "1s2w54927fsxg0f037h31g3qkajgn5jd0x3yi1chxsyckrcr0x80";
        };
      });
    };
  };
};

しかし、私が行うnixos-rebuild switchと、次のエラーが発生しました:

syntax error, unexpected ':', expecting '.' or '=', at 37,11

にあるpkgs: rec {...

私は何を間違えましたか?最初は、次のように pkgs を区切って書きます。

packageOverrides = {
  pkgs: with pkgs: {......}; #this is for mumble
  pkgs: rec {...}; #this is for kernel
};

それでも同じエラーが発生しました。

4

1 に答える 1

15

適切な解決策は次のとおりです。

nixpkgs.config = {

  allowUnfree = true;

  packageOverrides = super: let self = super.pkgs; in {

    mumble = super.mumble.override { pulseSupport = true; };

    linuxPackages = super.linuxPackages // {
      e1000e = super.linuxPackages.e1000e.overrideDerivation (old: {
        name = "e1000e-3.3.3-${config.boot.kernelPackages.kernel.version}";
        src = fetchurl {
          url = "https://www.dropbox.com/s/pxx883hx9763ygn/e1000e-3.3.3.tar.gz?dl=0";
          sha256 = "1s2w54927fsxg0f037h31g3qkajgn5jd0x3yi1chxsyckrcr0x80";
        };
      });
    };
  };
}

この変数は、オーバーライドが適用されるsuperに設定された Nixpkgs を参照し、オーバーライドが適用されたにそれを参照します。無限再帰などを避けるために、これら 2 つを明示的に区別することが重要です。self

また、オーバーライドに注意してください

linuxPackages.e1000e = pkgs.linuxPackages.e1000e.overrideDerivation ...

linuxPackages属性セットを (オーバーライドされた)e1000e派生のみを含むものに置き換えます。それはおそらくあなたが望むものではありません。

于 2016-03-15T12:35:38.243 に答える