aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/zsh/dot_zprofile
diff options
context:
space:
mode:
Diffstat (limited to 'dot_config/zsh/dot_zprofile')
-rw-r--r--dot_config/zsh/dot_zprofile20
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