diff options
Diffstat (limited to 'dot_config/zsh/dot_zprofile')
| -rw-r--r-- | dot_config/zsh/dot_zprofile | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/dot_config/zsh/dot_zprofile b/dot_config/zsh/dot_zprofile index 9783e8e..66e97cd 100644 --- a/dot_config/zsh/dot_zprofile +++ b/dot_config/zsh/dot_zprofile @@ -45,9 +45,23 @@ export LESS="-F --RAW-CONTROL-CHARS" # ── GPG / SSH ───────────────────────────────────────────────────────────────── unset SSH_AGENT_PID -# If we're inside an SSH session with a forwarded agent socket, keep it. -# Otherwise route SSH auth through the local gpg-agent. -if [[ -z "$SSH_CONNECTION" || -z "$SSH_AUTH_SOCK" ]]; then +# Forwarded ssh-agent sockets live at /tmp/ssh-XXX/agent.NNN — a path +# that disappears the moment the originating ssh connection drops, +# leaving any long-running zellij pane (and its children: claude, +# nvim, etc.) pointing at a dead socket. Keep a stable +# ~/.ssh/agent.sock symlink that we re-aim on every login, and export +# the stable path so processes inherit a value that survives +# reconnects. Reattaching a zellij session after `ssh` → signing / +# git-fetch keep working without any per-pane re-export. +if [[ -n "$SSH_CONNECTION" && -S "$SSH_AUTH_SOCK" ]]; then + stable_sock="$HOME/.ssh/agent.sock" + if [[ "$SSH_AUTH_SOCK" != "$stable_sock" ]]; then + ln -sfn "$SSH_AUTH_SOCK" "$stable_sock" + fi + export SSH_AUTH_SOCK="$stable_sock" + unset stable_sock +else + # Local login: route ssh auth through gpg-agent. SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" export SSH_AUTH_SOCK fi |
