mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-10-20 04:12:06 +08:00
The plugin runs `gpgconf --list-options gpg-agent` on every shell start to learn whether `enable-ssh-support` is set. On macOS with GnuPG 2.5.24 that one command takes about 600 ms. The `ssh-support` style lets the user state the answer instead. With `no` the plugin sets `GPG_TTY` and stops. That also skips the preexec hook, which runs `gpg-connect-agent updatestartuptty` before every command and is only needed for ssh support. With `yes` the plugin sets `SSH_AUTH_SOCK` without asking. Left unset, the plugin detects as before, so existing setups do not change. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
1.1 KiB
Bash
33 lines
1.1 KiB
Bash
export GPG_TTY=$TTY
|
|
|
|
# The ssh-support style says whether gpg-agent is used as the ssh agent.
|
|
# Setting it saves asking gpgconf, which can be slow.
|
|
zstyle -t ':omz:plugins:gpg-agent' ssh-support
|
|
_gpg_agent_ssh_support=$? # 0 if yes, 1 if no, 2 if not set
|
|
|
|
# Everything below is only needed for ssh support
|
|
if (( _gpg_agent_ssh_support == 1 )); then
|
|
unset _gpg_agent_ssh_support
|
|
return
|
|
fi
|
|
|
|
# Fix for passphrase prompt on the correct tty
|
|
# See https://www.gnupg.org/documentation/manuals/gnupg/Agent-Options.html#option-_002d_002denable_002dssh_002dsupport
|
|
function _gpg-agent_update-tty_preexec {
|
|
gpg-connect-agent updatestartuptty /bye &>/dev/null
|
|
}
|
|
autoload -U add-zsh-hook
|
|
add-zsh-hook preexec _gpg-agent_update-tty_preexec
|
|
|
|
# If enable-ssh-support is set, fix ssh agent integration
|
|
if (( _gpg_agent_ssh_support == 0 )) \
|
|
|| [[ $(gpgconf --list-options gpg-agent 2>/dev/null \
|
|
| awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then
|
|
unset SSH_AGENT_PID
|
|
if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]; then
|
|
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
|
|
fi
|
|
fi
|
|
|
|
unset _gpg_agent_ssh_support
|