gpt4 book ai didi

nix - 如何在Nixos配置中覆盖2个(两个)软件包

转载 作者:行者123 更新时间:2023-12-04 13:39:16 29 4
gpt4 key购买 nike

我的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 {...我做错什么了?首先,我通过如下分离pkg来编写它:
packageOverrides = {
pkgs: with pkgs: {......}; #this is for mumble
pkgs: rec {...}; #this is for kernel
};
仍然出现相同的错误。

最佳答案

正确的解决方案是:

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集,而 self引用应用覆盖之后的Nixpkgs集。重要的是要明确区分这两个,以避免无限递归等。

另外,请注意,您的替代

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



linuxPackages属性集替换为除(overrided) e1000e派生类外不含任何属性。那可能不是您想要的。

关于nix - 如何在Nixos配置中覆盖2个(两个)软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000514/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com