
수동제안패키지를 이름으로 지정할 수 있습니다.
{
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.nix
as.Finally checkMeta
(물론 이것은 꽤 긴 여정이며 일반적으로 더 빠릅니다 ^^') 이 함수는 다음과 같이 호출됩니다 .여기함수에 대한 입력 args
인 매개변수를 취합니다 (mkDerivation
여기). 완벽한;-)