From 643c6570756e26568fb5cd7ad586e216e9c01592 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sat, 25 Mar 2017 22:56:54 +0100 Subject: [PATCH] gnupg: Setup (reuse/initialize) GnuPG agent --- plugins/gnupg/README.md | 5 ++++- plugins/gnupg/gnupg.zshrc | 29 ++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/plugins/gnupg/README.md b/plugins/gnupg/README.md index 8ed3ae6..1488335 100644 --- a/plugins/gnupg/README.md +++ b/plugins/gnupg/README.md @@ -1,9 +1,12 @@ ## gnupg -Setup *GnuPG* using *gpg*(1) or *gpg2*(1) command: +Setup *GnuPG* using *gpg*(1) or *gpg2*(1) command and try to setup a *GnuPG +agent* as well, either by reusing an already running agent process or by +starting a new one. - `gpg2`: use the same completions than for `gpg`. - When `gpg` isn't installed but `gpg2` is, alias it to `gpg`, too. +- Store "agent information" in `$HOME/.gnupg/agent.info-$HOST:$DISPLAY`. ### Command Aliases diff --git a/plugins/gnupg/gnupg.zshrc b/plugins/gnupg/gnupg.zshrc index 39f605d..25798fe 100644 --- a/plugins/gnupg/gnupg.zshrc +++ b/plugins/gnupg/gnupg.zshrc @@ -11,8 +11,31 @@ if (( $+commands[gpg2] )); then fi fi -if [[ -z "$GPG_AGENT_INFO" && -r ~/.gpg-agent-info ]]; then - # Read environment file - source ~/.gpg-agent-info 2>/dev/null +# Make sure that "gpg(1)" is available. +(( $+commands[gpg] )) || return + +export GPG_TTY=$(tty) + +agent_info_file="$HOME/.gnupg/agent.info-${HOST}" + +# Validate agent info ... +if [[ -n "$GPG_AGENT_INFO" ]]; then + echo " *** Testing agent environment ..." + gpg-agent >/dev/null 2>&1 || unset GPG_AGENT_INFO +fi + +# Read environment file, when available and agent info not already set. +if [[ -z "$GPG_AGENT_INFO" && -r "$agent_info_file" ]]; then + source "$agent_info_file" 2>/dev/null [[ -n "$GPG_AGENT_INFO" ]] && export GPG_AGENT_INFO fi + +# Setup GnuPG agent when installed. +if (( $+commands[gpg-agent] )); then + # Start up a new GnuPP agent, when none is running/accessible: + if ! gpg-agent >/dev/null 2>&1; then + eval $(gpg-agent --daemon --write-env-file "$agent_info_file") + fi +fi + +unset agent_info_file -- 2.39.2