我只想为我在nix中的叠加层中定义的构建应用配置点。
也就是说,我要设置
permittedInsecurePackages = [
"webkitgtk-2.4.11"
];
在叠加层中。我想在那做,因为覆盖层是用来设置我的爪子邮件配置的;而且如果我没有安装爪子邮件,我也不想允许使用webkitgtk(如果将其放入~/.config/nixpkgs/config.nix
中,则可能会发生)。
是否可以在叠加层中进行设置?我尝试将其设置为self.config。或super.config。,但均不起作用。
答案 0 :(得分:1)
您不能在本地覆盖配置,但是可以阻止该配置妨碍您要实现的目标。
在这里要做的一件简单的事情是清除传递给meta.knownVulnerabilities
构建的webkitgtk
副本中的claws-mail
。
展示如何完成-
let
ignoringVulns = x: x // { meta = (x.meta // { knownVulnerabilities = []; }); };
webkitGtkIgnoringVulns = pkgs.webkitgtk24x-gtk2.overrideAttrs ignoringVulns;
in
pkgs.clawsMail.override { webkitgtk24x-gtk2 = webkitGtkIgnoringVulns; }
以上内容已在nix repl
中进行了测试。在叠加层中,您可以使用pkgs.
替换super.
,以指代现有软件包的原始/未修改版本。如果您不希望将webkitGtkIgnoringVulns
保留在let
中(否则,请不将其引入叠加层评估的attrset中)仍然很重要在任何其他范围内。
也就是说,在叠加层中执行此操作可能类似于:
self: super: let
ignoringVulns = x: x // { meta = (x.meta // { knownVulnerabilities = []; }); };
in {
clawsMail = super.clawsMail.override {
webkitgtk24x-gtk2 = self.webkitgtk24x-gtk2.overrideAttrs ignoringVulns;
};
}
答案 1 :(得分:0)
首先,让我简单说明几件事,希望它们可以帮助您了解一些NixOS和Nixpkgs概念。
NixOS模块主要与系统配置有关,而覆盖图主要只是用于更改软件包集的一种机制。这些是一起分布的两个独立组件(NixOS和Nixpkgs)的独立功能。
发生的事情是NixOS在评估时加载了Nixpkgs。可以用一些NixOS options来控制。其中大多数都简单地传递给Nixpkgs 函数(通常表示为import <nixpkgs>
)。
这意味着NixOS配置由Nixpkgs的config
参数控制。但是,overlays
只是Nixpkgs函数的另一个参数,不会影响Nixpkgs config
。
还要注意,self
和super
只是通常给定义覆盖的函数的参数提供的名称。它们是位置参数,因此您可以根据需要为它们指定不同的名称。覆盖功能的结果是一个属性集,其中包含要添加或更新的属性。 self
和super
作为Nixpkgs中的属性没有特殊含义。 (尽管您确实隐藏了super
package)
因此,不能,叠加层无法设置Nixpkgs配置项。您可能想改为编写NixOS模块。 NixOS模块和NixOS配置是同一回事。
还要注意,NixOS(nixos-rebuild
等)将不会读取~/.config/nixpkgs/config.nix
。它有自己的default。