이전 버전과의 호환성을 위해 NixOS 구성 옵션이 유효한 경우에만 이를 설정하십시오.

이전 버전과의 호환성을 위해 NixOS 구성 옵션이 유효한 경우에만 이를 설정하십시오.

때때로 NixOS는 이전 버전과 완전히 호환되지 않는 방식으로 구성 옵션을 변경합니다. 예를 들어, nixos 19.09에는 option 이 없지만 programs.gnupg.agent.pinentryFlavornixos 불안정(20.03으로 예정)에서는 올바른 pinentry 변형을 얻으려면 기본값이 아닌 것으로 설정해야 합니다.

일부는 nixos-19.09를 실행하고 일부는 nixos-unstable을 실행하는 컴퓨터 간에 내 구성을 공유하고 있으므로 내 구성이 둘 다와 호환되기를 원합니다. (여러 대의 머신이 없어도 중단 없이 nixos 채널을 전환할 수 있으면 좋을 것 같습니다)

programs.gnupg.agent.pinentryFlavor = "gtk2";nixos-unstable 요구 사항에 따라 설정하면 nixos-rebuildnixos-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" ];
    };

관련 정보