`allowUnfreePredicate`에서 패키지를 직접 사용하는 방법은 무엇입니까?

`allowUnfreePredicate`에서 패키지를 직접 사용하는 방법은 무엇입니까?

수동제안패키지를 이름으로 지정할 수 있습니다.

{
  allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
    "roon-server"
    "vscode"
  ];
}

패키지를 사용하여 직접 수행할 수 있습니까? 나는 다음을 시도했다:

{
  allowUnfreePredicate = pkg:
    builtins.elem pkg [
      pkgs.hplip
    ];
}

이것은 작동하지 않는 것 같습니다:

오류: /nix/store/lh7i6yw570nkw49byrgjbrna9az3ryy7-nixos-22.05/nixos/pkgs/misc/drivers/hplip/default.nix:268의 'hplip-3.22.6' 패키지에 비자유 라이센스('unfree')가 있으며 평가를 거부합니다. .

객체 pkg가 의 항목과 다른 가요 pkgs, builtins.elem복합 객체가 동일하게 취급되지 않습니까, 아니면 다른 일이 진행되고 있습니까?

답변1

코드가 실패하는 이유는 다음과 같습니다.아니요왜냐하면 builtins.elem(이것은 엄격하게 동등한 패키지를 좋은 비교로 만들기 때문입니다) allowInfreePredicate하지만속성물론 포장( 내부 )입니다 .stdenv.mkDerivation {…}stdenv.mkDerivation {…} != …

자신을 확인/찾는 방법:

참고로, 이 간단한 방법을 사용하여 훌륭한 콘텐츠를 탐색하면 실제로 직접 확인할 수 있습니다(질문을 하기 전까지는 이 사실조차 깨닫지 못했습니다).nixpkgs 저장소(이것은 교육 목적이므로 nix 코드를 효과적으로 탐색하는 방법을 찾는 데 시간이 좀 걸렸습니다... 단 몇 개의 명령만으로 전체 운영 체제의 코드를 쉽게 읽을 수 있다는 것은 정말 멋진 일입니다! 내가 사랑하는 nix!):

이렇게 하려면 먼저nixpkgs에 대한 코드. 제안: 다운로드

git clone https://github.com/NixOS/nixpkgs

이것을 홈 폴더에 옆에 두는 것은 매우 유용합니다!

그런 다음 rg allowUnfreePredicate -C 5( rg더 나은 grep을 사용하세요. 실제로 설치해야 합니다. -C 5위/아래에 5줄이 표시되어 주변 텍스트를 보는 데 매우 유용합니다.) ( config.allowUnfreePredicate에서 직접 확인하실 수 있습니다 .nixpkgs/pkgs/stdenv/generic/check-meta.nix여기allowUnfreePredicate)는 그 자체로 호출되는 새로운 함수를 정의합니다.여기에서는 hasDeniedUnfreeLicense그 자체가 checkValidity(같은 파일) 자체는 assertValidity(같은 파일)…(네, 간단한 게임입니다. rg현재 함수의 이름을 입력하면 다음 함수를 찾을 수 있습니다 ^^). 이 기능이 드디어 구현되었습니다산출파일에서 check-meta.nix. 다시 친구를 사용하면 rg check-meta.nix이 파일을 보는 것이 어렵지 않습니다.수입산이에요pkgs/stdenv/generic/make-derivation.nixas.Finally checkMeta(물론 이것은 꽤 긴 여정이며 일반적으로 더 빠릅니다 ^^') 이 함수는 다음과 같이 호출됩니다 .여기함수에 대한 입력 args인 매개변수를 취합니다 (mkDerivation여기). 완벽한;-)

답변2

이것인정된 간접 솔루션트랏에서일하다:

{
  allowUnfreePredicate = pkg:
    builtins.elem (
      lib.getName pkg
    ) (
      map lib.getName [
        pkgs.corefonts
        pkgs.discord
        pkgs.jetbrains.idea-ultimate
        pkgs.spotify-unwrapped
        pkgs.unrar
      ]
    );
}

관련 정보