최근 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
-A
nix 표현식이 평가된 후 속성을 쿼리하는 데 사용됩니다.