diff options
| author | Kirill Elagin <kirelagin@gmail.com> | 2018-05-18 23:14:43 +0300 |
|---|---|---|
| committer | Kirill Elagin <kirelagin@gmail.com> | 2018-05-18 23:19:06 +0300 |
| commit | 8e1f40ad486637fe12492cea9cf70a5956743c7f (patch) | |
| tree | 5335a5eeace226859a6d355208f56f214184bdae /modules/programs | |
| parent | 192e2b40e059efdffcfa4b7122b0547874f3278b (diff) | |
gnupg: add gpg-agent service
Fixes #77.
Diffstat (limited to 'modules/programs')
| -rw-r--r-- | modules/programs/gnupg.nix | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/modules/programs/gnupg.nix b/modules/programs/gnupg.nix new file mode 100644 index 0000000..9a67ec8 --- /dev/null +++ b/modules/programs/gnupg.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.programs.gnupg; + +in + +{ + options.programs.gnupg = { + agent.enable = mkOption { + type = types.bool; + default = false; + description = '' + Enables GnuPG agent for every user session. + ''; + }; + + agent.enableSSHSupport = mkOption { + type = types.bool; + default = false; + description = '' + Enable SSH agent support in GnuPG agent. Also sets SSH_AUTH_SOCK + environment variable correctly. + ''; + }; + }; + + config = mkIf cfg.agent.enable { + launchd.user.agents.gnupg-agent.serviceConfig = { + ProgramArguments = [ + "${pkgs.gnupg}/bin/gpg-connect-agent" "/bye" + ]; + RunAtLoad = cfg.agent.enableSSHSupport; + KeepAlive = true; + }; + + environment.extraInit = '' + # Bind gpg-agent to this TTY if gpg commands are used. + export GPG_TTY=$(tty) + '' + (optionalString cfg.agent.enableSSHSupport '' + # SSH agent protocol doesn't support changing TTYs, so bind the agent + # to every new TTY. + ${pkgs.gnupg}/bin/gpg-connect-agent --quiet updatestartuptty /bye > /dev/null + + export SSH_AUTH_SOCK=$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket) + ''); + }; +} |
