我最近开始使用 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 表达式求值后查询属性。