![이전 버전과의 호환성을 위해 NixOS 구성 옵션이 유효한 경우에만 이를 설정하십시오.](https://linux55.com/image/168417/%EC%9D%B4%EC%A0%84%20%EB%B2%84%EC%A0%84%EA%B3%BC%EC%9D%98%20%ED%98%B8%ED%99%98%EC%84%B1%EC%9D%84%20%EC%9C%84%ED%95%B4%20NixOS%20%EA%B5%AC%EC%84%B1%20%EC%98%B5%EC%85%98%EC%9D%B4%20%EC%9C%A0%ED%9A%A8%ED%95%9C%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%9D%B4%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
때때로 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" ];
};