다음을 포함하는 것을 고려해보세요 /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이면 패키지 설치가 허용됩니다.
이 작업을 수행하는 더 쉬운 방법이 있기를 바랍니다.