偶尔,NixOS会以一种不完全向后兼容的方式更改配置选项。例如,nixos 19.09没有programs.gnupg.agent.pinentryFlavor选项,但是在nixos不稳定(很快20.03)中,我需要将它设置为一个非默认值,以便获得正确的pinentry变量。
我在机器上共享我的配置,其中一些机器运行nixos-19.09和一些nixos-不稳定,所以我希望我的配置与两者兼容。(即使没有多台机器,也可以在不损坏的情况下切换nixos通道。)
将programs.gnupg.agent.pinentryFlavor = "gtk2";设置为nixos-不稳定导致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 {});发布于 2020-03-08 19:32:41
配置函数确实接收到options attr,因此在配置中设置该选项之前,可以检查给定选项是否使用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使用的选项,这些选项通常是不可用的。
而不是在运行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" ];
};https://unix.stackexchange.com/questions/570466
复制相似问题