如何在configuration.nix

时间:2016-05-15 19:17:32

标签: linux nix nixos

我目前在我的nixpkgs.config

中有这个
packageOverrides = pkgs: rec {
  netbeans81 = pkgs.stdenv.lib.overrideDerivation pkgs.netbeans ( oldAttrs: {
    name = "netbeans-8.1";
    src = pkgs.fetchurl {
      url = http://download.netbeans.org/netbeans/8.1/final/zip/netbeans-8.1-201510222201.zip;
      md5 = "361ce18421761a057bad5cb6cf7b58f4";
    };
  });
};

我想添加一个内核配置。我添加了这个

packageOverrides = pkgs: {
    stdenv = pkgs.stdenv // {
        platform = pkgs.stdenv.platform // {
            kernelExtraConfig = "SND_HDA_PREALLOC_SIZE 4096";
        };
    };
};

但这不起作用。问题是packageOverrides已经定义。

如何添加内核配置和我的netbeans覆盖?

1 个答案:

答案 0 :(得分:1)

在nix语言中,大括号({})表示属性集(不像C ++等中的范围)。您可以在单个属性集中拥有多个项目(attr。集合类似于python中的dicts)。此外,nix是一种函数式语言,这意味着没有状态。反过来,这意味着您无法在同一范围内重新定义变量。用Eminem的话来说,“你只有一枪”。

试试这个:

packageOverrides = pkgs: rec {

  netbeans81 = pkgs.stdenv.lib.overrideDerivation pkgs.netbeans (oldAttrs: {
    name = "netbeans-8.1";
    src = pkgs.fetchurl {
      url = http://download.netbeans.org/netbeans/8.1/final/zip/netbeans-8.1-201510222201.zip;
      md5 = "361ce18421761a057bad5cb6cf7b58f4";
    };
  });

  stdenv = pkgs.stdenv // {
    platform = pkgs.stdenv.platform // {
      kernelExtraConfig = "SND_HDA_PREALLOC_SIZE 4096";
    };
  };

};