때때로 NixOS는 이전 버전과 완전히 호환되지 않는 방식으로 구성 옵션을 변경합니다. 예를 들어, nixos 19.09에는 option 이 없지만 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 {});
답변1
구성 기능은 속성을 수신하므로 구성에서 옵션을 설정하기 전에 해당 옵션이 정의되어 있는지 확인할 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" ];
};