NixOS를 사용하기 시작했습니다. 내가 이해한 바로는 Nix는 부작용을 피하기 위해 특별히 제작된 함수형 언어입니다. 모든 패키지는 거대한 속성 세트의 일부이지만 모든 것이 느리게 평가되므로 문제가 없습니다. 멤버에 액세스하면 기본적으로 "어떤 일이 발생"하지만 "파생"은 값일 뿐이므로 명시적으로 "구축"해야 합니다.
Environment.systemPackages가 정확히 어떻게 구현되고 해당 소스를 어디서 찾을 수 있는지 알고 싶습니다. (nixpkgs를 통해 검색을 시도했지만 오탐지가 너무 많았습니다.)
나는 전체 프로세스를 이해하고 어쩌면 로컬 사용자가 (자동)실행 명령 방식을 사용하는 대신 선언적으로(모든 systemPackages와 유사하게) 설치된 패키지 목록을 관리할 수 있도록 구성 파일을 해킹하고 싶습니다 nix-env -i
. 예제를 보고 ~/.config/nixpkgs/config.nix
packageOverrides 함수를 구현할 수 있었습니다. 그러나 다른 메타패키지를 "포함"하는 일종의 새로운 메타패키지를 생성할 수 있습니까(여전히 아무것도 자동으로 설치되지 않음) 아니면 제가 틀렸습니까? 오버레이라는 것이 있다고 들었습니다. 이 개념이 사진에 어떻게 들어맞나요?
답변1
users.users.<이름? >.패키지내가 찾던 바로 그 것.
내 질문의 두 번째 부분을 바꿔 보겠습니다. (이로 인해 매우 혼란스러워집니다. 죄송합니다.)
다음과 같은 것이 있다고 가정해 보겠습니다.
blah = [ pkgs.hello ];
내가 할 수 있는 함수 f가 있나요?
f blah
그러면 hello 패키지가 시스템에 나타납니다.
이제 나는 그것이 다소 역설적이라는 것을 깨달았습니다. 왜냐하면 Knicks에는 부작용이 없지 않기 때문입니다. 따라서 Chris Stryczynski가 옳다고 생각합니다.환경.시스템패키지한 가지이지만무의미한 말아니요. 하지만 아마도 f를 다음과 같이 구현할 수 있을 것입니다.
environment.systemPackages ++ blah
또는 다른 것(코드 예제를 구문상 올바른 Nix가 아니라 의사 코드로 생각하십시오).
답변2
이것이 구현되는 방법과 관련하여 environment.systemPackages
여기에서 찾을 수 있는 다양한 스크립트(예: nixos-install, nixos-rebuild 등)에서 값이 검색될 것이라고 가정합니다.
https://github.com/NixOS/nixpkgs/tree/master/nixos/modules/installer/tools
하지만 그것은 단지 목록(Nix 언어)인 것 같습니다.
직접 확인한 후 Nix의 작동 방식을 먼저 이해하고 Nixos의 기능을 이해하는 것이 도움이 될 수 있습니다.