{ config, lib, ... }: let cfg = config.my.home.gpg; in { options.my.home.gpg = with lib; { enable = my.mkDisableOption "gpg configuration"; pinentry = mkOption { type = types.str; default = "tty"; example = "gtk2"; description = "Which pinentry interface to use"; }; }; config = lib.mkIf cfg.enable { programs.gpg = { enable = true; }; services.gpg-agent = { enable = true; enableSshSupport = true; # One agent to rule them all pinentryFlavor = cfg.pinentry; extraConfig = '' allow-loopback-pinentry ''; }; }; }