Configuration
僅在 NixOS 配置選項有效時才設置它,以實現向後兼容性
有時,NixOS 會以不完全向後兼容的方式更改配置選項。例如,nixos 19.09 沒有
programs.gnupg.agent.pinentryFlavor
選項,但在 nixos 不穩定(很快 20.03)中,我需要將其設置為非預設值才能獲得正確的 pinentry 變體。我跨機器共享我的配置,其中一些執行 nixos-19.09 和一些 nixos-unstable,所以我希望我的配置與兩者兼容。(即使沒有多台機器,能切換nixos頻道也不會壞掉就好了)
根據需要設置
programs.gnupg.agent.pinentryFlavor = "gtk2";
nixos-unstable 導致nixos-rebuild
在 nixos-19.09 上失敗:error: The option `programs.gnupg.agent.pinentryFlavor' defined in `[...]/desktop.nix' does not exist. (use '--show-trace' to show detailed location information)
有沒有辦法檢查一個選項是否有效?
本質上,我在
???(pinentryFlavor)
這裡尋找代替 ) 的內容,以免設置不存在的選項:programs.gnupg.agent = { enable = true;} // ( if ???(pinentryFlavor) then { pinentryFlavor = "gtk2"; } else {});
配置函式確實接收到一個
options
屬性,因此可以builtins.hasAttr
在配置中設置之前檢查給定選項是否已定義。大多數 NixOS 配置不提取
options
,因此您可能需要先添加它。例如:{ config, pkgs, options, ... }: { programs.gnupg.agent = { enable = true; } // # False on NixOS 19.09 (if builtins.hasAttr "pinentryFlavor" options.programs.gnupg.agent then { pinentryFlavor = "gtk2"; } else {}); }
同樣,可以使用相同的方法來設置 使用的選項
nixos-rebuild build-vm
,這些選項通常不可用。執行虛擬機時不需要通過環境變數設置選項
QEMU_OPTS='-m 4096 -smp 4 -soundhw ac97' ./result/bin/run-*-vm
可以在 configuration.nix 中設置等效選項:
# The default 384MB RAM is not enough to run Firefox in a VM virtualisation = lib.optionalAttrs (builtins.hasAttr "qemu" options.virtualisation) { memorySize = 4096; cores = 4; qemu.options = [ "-soundhw ac97" ]; };