From f37049e85f1a7152746f1869bddf5e66a9f2fdf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E9=9B=81=20Cryolitia?= Date: Thu, 9 May 2024 05:26:01 +0800 Subject: [PATCH 1/4] gpg: delete default settings fix https://github.com/nix-community/home-manager/issues/5383 --- modules/programs/gpg.nix | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/modules/programs/gpg.nix b/modules/programs/gpg.nix index 145389212..8e48a614d 100644 --- a/modules/programs/gpg.nix +++ b/modules/programs/gpg.nix @@ -240,28 +240,10 @@ in { }; config = mkIf cfg.enable { + # To prevent error: The option `programs.gpg.settings' is used but not defined. programs.gpg.settings = { - personal-cipher-preferences = mkDefault "AES256 AES192 AES"; - personal-digest-preferences = mkDefault "SHA512 SHA384 SHA256"; - personal-compress-preferences = mkDefault "ZLIB BZIP2 ZIP Uncompressed"; - default-preference-list = mkDefault - "SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed"; - cert-digest-algo = mkDefault "SHA512"; - s2k-digest-algo = mkDefault "SHA512"; - s2k-cipher-algo = mkDefault "AES256"; - charset = mkDefault "utf-8"; - fixed-list-mode = mkDefault true; - no-comments = mkDefault true; - no-emit-version = mkDefault true; - keyid-format = mkDefault "0xlong"; - list-options = mkDefault "show-uid-validity"; - verify-options = mkDefault "show-uid-validity"; - with-fingerprint = mkDefault true; - require-cross-certification = mkDefault true; - no-symkey-cache = mkDefault true; - use-agent = mkDefault true; + # no defaults for gpg }; - programs.gpg.scdaemonSettings = { # no defaults for scdaemon }; From 2905e7bd16f22a941e67fe5bd72254efe340b83c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E9=9B=81=20Cryolitia?= Date: Thu, 9 May 2024 05:27:22 +0800 Subject: [PATCH 2/4] gpg: add dirmngrSettings --- modules/programs/gpg.nix | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/modules/programs/gpg.nix b/modules/programs/gpg.nix index 8e48a614d..18ba557b5 100644 --- a/modules/programs/gpg.nix +++ b/modules/programs/gpg.nix @@ -18,6 +18,11 @@ let listsAsDuplicateKeys = true; } cfg.scdaemonSettings; + dirmngrCfgText = generators.toKeyValue { + inherit mkKeyValue; + listsAsDuplicateKeys = true; + } cfg.dirmngrSettings; + primitiveType = types.oneOf [ types.str types.bool ]; publicKeyOpts = { config, ... }: { @@ -187,6 +192,24 @@ in { ''; }; + dirmngrSettings = mkOption { + type = + types.attrsOf (types.either primitiveType (types.listOf types.str)); + example = literalExpression '' + { + keyserver = "keyserver.ubuntu.com"; + disable-ipv6 = true; + } + ''; + description = '' + Dirmngr configuration options. Available options are described + in + [ + {manpage}`dirmngr(8)` + ](https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html). + ''; + }; + homedir = mkOption { type = types.path; example = literalExpression ''"''${config.xdg.dataHome}/gnupg"''; @@ -247,6 +270,9 @@ in { programs.gpg.scdaemonSettings = { # no defaults for scdaemon }; + programs.gpg.dirmngrSettings = { + # no defaults for dirmngr + }; home.packages = [ cfg.package ]; home.sessionVariables = { GNUPGHOME = cfg.homedir; }; @@ -255,6 +281,8 @@ in { home.file."${cfg.homedir}/scdaemon.conf".text = scdaemonCfgText; + home.file."${cfg.homedir}/dirmngr.conf".text = dirmngrCfgText; + # Link keyring if keys are not mutable home.file."${cfg.homedir}/pubring.kbx" = mkIf (!cfg.mutableKeys && cfg.publicKeys != [ ]) { From 5790fc228518699290a6e2d4daa60ff60bd487ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E9=9B=81=20Cryolitia?= Date: Thu, 9 May 2024 05:29:33 +0800 Subject: [PATCH 3/4] gpg: add maintainer --- modules/programs/gpg.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/programs/gpg.nix b/modules/programs/gpg.nix index 18ba557b5..5b56c418c 100644 --- a/modules/programs/gpg.nix +++ b/modules/programs/gpg.nix @@ -143,6 +143,8 @@ let ''; in { + meta.maintainers = [ maintainers.Cryolitia ]; + options.programs.gpg = { enable = mkEnableOption "GnuPG"; From b07ca355310edc24466282c96cffe773b4a2a6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E9=9B=81=20Cryolitia?= Date: Thu, 9 May 2024 22:08:34 +0800 Subject: [PATCH 4/4] gpg: cleanup --- modules/programs/gpg.nix | 49 +++++++++++++--------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/modules/programs/gpg.nix b/modules/programs/gpg.nix index 5b56c418c..914a05a09 100644 --- a/modules/programs/gpg.nix +++ b/modules/programs/gpg.nix @@ -8,20 +8,10 @@ let mkKeyValue = key: value: if isString value then "${key} ${value}" else optionalString value key; - cfgText = generators.toKeyValue { + generateCfgText = generators.toKeyValue { inherit mkKeyValue; listsAsDuplicateKeys = true; - } cfg.settings; - - scdaemonCfgText = generators.toKeyValue { - inherit mkKeyValue; - listsAsDuplicateKeys = true; - } cfg.scdaemonSettings; - - dirmngrCfgText = generators.toKeyValue { - inherit mkKeyValue; - listsAsDuplicateKeys = true; - } cfg.dirmngrSettings; + }; primitiveType = types.oneOf [ types.str types.bool ]; @@ -160,6 +150,7 @@ in { settings = mkOption { type = types.attrsOf (types.either primitiveType (types.listOf types.str)); + default = { }; example = literalExpression '' { no-comments = false; @@ -180,6 +171,7 @@ in { scdaemonSettings = mkOption { type = types.attrsOf (types.either primitiveType (types.listOf types.str)); + default = { }; example = literalExpression '' { disable-ccid = true; @@ -197,6 +189,7 @@ in { dirmngrSettings = mkOption { type = types.attrsOf (types.either primitiveType (types.listOf types.str)); + default = { }; example = literalExpression '' { keyserver = "keyserver.ubuntu.com"; @@ -265,31 +258,21 @@ in { }; config = mkIf cfg.enable { - # To prevent error: The option `programs.gpg.settings' is used but not defined. - programs.gpg.settings = { - # no defaults for gpg - }; - programs.gpg.scdaemonSettings = { - # no defaults for scdaemon - }; - programs.gpg.dirmngrSettings = { - # no defaults for dirmngr - }; - home.packages = [ cfg.package ]; home.sessionVariables = { GNUPGHOME = cfg.homedir; }; - home.file."${cfg.homedir}/gpg.conf".text = cfgText; + home.file = { + "${cfg.homedir}/gpg.conf".text = generateCfgText cfg.settings; + "${cfg.homedir}/scdaemon.conf".text = + generateCfgText cfg.scdaemonSettings; + "${cfg.homedir}/dirmngr.conf".text = generateCfgText cfg.dirmngrSettings; - home.file."${cfg.homedir}/scdaemon.conf".text = scdaemonCfgText; - - home.file."${cfg.homedir}/dirmngr.conf".text = dirmngrCfgText; - - # Link keyring if keys are not mutable - home.file."${cfg.homedir}/pubring.kbx" = - mkIf (!cfg.mutableKeys && cfg.publicKeys != [ ]) { - source = "${keyringFiles}/pubring.kbx"; - }; + # Link keyring if keys are not mutable + "${cfg.homedir}/pubring.kbx" = + mkIf (!cfg.mutableKeys && cfg.publicKeys != [ ]) { + source = "${keyringFiles}/pubring.kbx"; + }; + }; home.activation = { createGpgHomedir =