我只想为我在 nix 的叠加层中定义的构建应用配置点。
也就是我要设置
permittedInsecurePackages = [
"webkitgtk-2.4.11"
];
在叠加层中。我想在那里做,因为覆盖是为了设置我的爪子邮件配置;如果我不安装 claws-mail,我不想允许 webkitgtk(如果我将它放入 ~/.config/nixpkgs/config.nix
中,这可能会发生)。
有没有办法在叠加层中设置它?我尝试将其设置为 self.config。或 super.config.,但均无效。
最佳答案
您不能在本地覆盖配置,但您可以阻止该配置妨碍您尝试实现的目标。
此处最简单的事情是清除传递给 claws-mail
构建的 webkitgtk
副本中的 meta.knownVulnerabilities
。
展示这是如何做到的——
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;
};
}
关于overlay - 尼克斯): Set "permittedInsecurePackages" only for one package build (in an overlay?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53566342/