以下を含めることを検討してください/etc/nixos/root.nix
。
{
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"foo"
];
}
/etc/nixos/configuration.nix
この構成は、独自に以下を提供するようにインポートされますallowUnfreePredicate
。
{
imports = [
/etc/nixos/root.nix
];
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"bar"
];
}
この場合、pkgs.bar
最後の述語が最初の述語をオーバーライドするためにのみインストールできます。それらを組み合わせる方法はありますか?特に、/etc/nixos/configuration.nix
輸入品がこの述語を指定するかどうかを「知っている」べきではないことを考慮するとどうでしょうか。
修正する:アップストリームレポートそこで解決してほしい。
答え1
これはうまくいきますが、非常に複雑です。
{
config,
lib,
modulesPath,
pkgs,
specialArgs,
options,
}: let
imports = [
/etc/nixos/cachix.nix
/etc/nixos/root.nix
];
in {
inherit imports;
nixpkgs.config.allowUnfreePredicate = pkg:
(builtins.elem (lib.getName pkg) [
"bar"
])
|| builtins.any (
path: let
package = import path {
inherit config lib modulesPath pkgs specialArgs options;
};
in
if builtins.hasAttr "nixpkgs" package
then package.nixpkgs.config.allowUnfreePredicate pkg
else false
)
imports;
}
オリジナル:
- 筆記体セットを
imports
作らずに参考にできるように抜いてみてください。rec
- 各インポートにその内容があることを確認し
nixpkgs
(ないため、cachix設定を含めましたnixpkgs
)、その場合はallowUnfreePredicate
パッケージに合っていることを確認してください。 - インポートが
allowUnfreePredicate
trueの場合、パッケージのインストールは許可されます。
これを行うより簡単な方法があることを願っています。