Nix 구성에서 값을 찾는 방법

Nix 구성에서 값을 찾는 방법

최근 NixOS 버전을 사용하기 시작했습니다 23.05.885.bb8b5735d6f. 구성에 일부 (미리 정의된) 표현식이 표시되지만 이러한 표현식에 바인딩된 실제 값이 무엇인지 알 수 없습니다.

예를 들어, hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;으로 설정했는데 /etc/nixos/hardware-configuration.nix실제 값이 무엇인지 알고 싶습니다 config.hardware.enableRedistributableFirmware. 로 설정하고 싶기 때문입니다 true.

config.hardware.enableRedistributableFirmware() 콘솔에서 현재 평가된 콘텐츠(또는 다른 콘텐츠)를 검색하거나 다른 방법을 사용하는 방법이 있습니까 Bash?

(이 특정 사례의 경우) 이를 확인할 수 있는 다른 방법이 있습니다.

[x80486@uplink:~]$ journalctl --dmesg --grep microcode
Jun 26 08:19:28 uplink kernel: microcode: microcode updated early to revision 0xf2, date = 2023-01-12
Jun 26 08:19:28 uplink kernel: SRBDS: Mitigation: Microcode
Jun 26 08:19:28 uplink kernel: microcode: sig=0x906ea, pf=0x2, revision=0xf2
Jun 26 08:19:28 uplink kernel: microcode: Microcode Update Driver: v2.2.

...하지만 다시 한번 최종 구성 값이 무엇인지 알아낼 수 있었으면 좋겠습니다.

답변1

Nix REPL에서 확인할 수 있습니다.

$ nix repl --file '<nixpkgs/nixos>'
Welcome to Nix 2.13.3. Type :? for help.

Loading installable ''...
Added 6 variables.
nix-repl> config.hardware.enableRedistributableFirmware
true

답변2

또한 nix-instantiate를 사용하여 평가된 구성의 값을 얻을 수도 있습니다.

nix-instantiate --eval --expr 'with import <nixpkgs> {}; with lib; import <nixpkgs/nixos/lib/eval-config.nix> {
  inherit system; modules = [
    { options.a = lib.mkOption { type = types.int; }; config.a = lib.mkDefault 1; }
    { config.a = 5; }
    ];
}' -I nixpkgs=channel:nixos-23.05 -A config.a

5

좀 더 구체적인 예를 들어,configuration.nix, home.nix 등이 있는 경우

nix-instantiate --eval --expr 'import <nixpkgs/nixos/lib/eval-config.nix> { system = builtins.currentSystem; modules = [ ./configuration.nix ]; }' -I nixpkgs=channel:nixos-23.05 -A config.system.build.toplevel.outPath

-Anix 표현식이 평가된 후 속성을 쿼리하는 데 사용됩니다.

관련 정보