summaryrefslogtreecommitdiff
path: root/zsh
diff options
context:
space:
mode:
Diffstat (limited to 'zsh')
-rw-r--r--zsh/functions/_op-ssh-add3
-rw-r--r--zsh/functions/op-ssh-add28
-rw-r--r--zsh/rc2
3 files changed, 32 insertions, 1 deletions
diff --git a/zsh/functions/_op-ssh-add b/zsh/functions/_op-ssh-add
new file mode 100644
index 0000000..2c2183e
--- /dev/null
+++ b/zsh/functions/_op-ssh-add
@@ -0,0 +1,3 @@
+#compdef op-ssh-add=ssh-add
+
+_ssh $@
diff --git a/zsh/functions/op-ssh-add b/zsh/functions/op-ssh-add
new file mode 100644
index 0000000..d64efd9
--- /dev/null
+++ b/zsh/functions/op-ssh-add
@@ -0,0 +1,28 @@
+# -*- mode: sh -*-
+
+if [[ ${@[1]} =~ '-[DdKLlTXx]' ]]; then
+ $(which -p ssh-add) $@
+ return $?
+fi
+
+local prv pub
+for prv (${@[-1]} ~/.ssh/id_{ecdsa,ed25519}{,_sk}); do
+ if [[ -f ${prv}.pub ]]; then
+ pub=${prv}.pub
+ break
+ fi
+done
+
+if [[ -z ${pub} ]]; then
+ $(which -p ssh-add) $@
+ return $?
+fi
+
+zmodload zsh/zpty
+zpty ssh $(which -p ssh-add) $@
+zpty -w ssh $(op get item \
+ $(cut -d' ' -f3 ${pub}) \
+ --fields password \
+ --session $(op signin --raw))
+zpty -r ssh
+zpty -d ssh
diff --git a/zsh/rc b/zsh/rc
index 93d9996..a464425 100644
--- a/zsh/rc
+++ b/zsh/rc
@@ -10,7 +10,7 @@
done
}
-autoload -Uz compinit zmv
+autoload -Uz compinit op-ssh-add zmv
[[ ! -d ${XDG_CACHE_HOME}/zsh ]] && mkdir -p ${XDG_CACHE_HOME}/zsh
zstyle ':completion:*' cache-path ${XDG_CACHE_HOME}/zsh/cache