diff options
| -rw-r--r-- | zsh/functions/_op-ssh-add | 3 | ||||
| -rw-r--r-- | zsh/functions/op-ssh-add | 28 | ||||
| -rw-r--r-- | zsh/rc | 2 |
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 @@ -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 |
