about summary refs log tree commit diff
path: root/home/shell/fish/functions/find-ssh-agent.fish
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--home/shell/fish/functions/find-ssh-agent.fish20
1 files changed, 20 insertions, 0 deletions
diff --git a/home/shell/fish/functions/find-ssh-agent.fish b/home/shell/fish/functions/find-ssh-agent.fish
new file mode 100644
index 0000000..9e2de8d
--- /dev/null
+++ b/home/shell/fish/functions/find-ssh-agent.fish
@@ -0,0 +1,20 @@
+function find-ssh-agent --description "find or run ssh-agent"
+    # let's avoid storing the agent's socket under /tmp
+    set -l ssh_auth_sock $XDG_RUNTIME_DIR/ssh-agent.sock
+
+    if set -q SSH_AGENT_PID; and set -q SSH_AUTH_SOCK
+        # if variables already defined, then try to connect to agent
+        ssh-add -l &>/dev/null
+        test $status -ne 2; and return
+    end
+
+    set -l user_id (id -u)
+    set -l ssh_agent_pid (pgrep --exact --newest --uid $user_id ssh-agent)
+
+    if test -S $ssh_auth_sock
+        set --global --export SSH_AUTH_SOCK $ssh_auth_sock
+        set --global --export SSH_AGENT_PID $ssh_agent_pid
+    else
+        eval (ssh-agent -c -a $ssh_auth_sock)
+    end
+end