如何在 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

-A用于在 nix 表达式求值后查询属性。

相关内容