diff options
| author | Marc Cornellà <hello@mcornella.com> | 2022-03-26 15:10:56 +0100 | 
|---|---|---|
| committer | Marc Cornellà <hello@mcornella.com> | 2022-03-26 15:10:56 +0100 | 
| commit | a64d9403775f45036daf3b66693c35df7bab3c53 (patch) | |
| tree | 5f4ee1d442ad36966594969fe82043d113d2685f /plugins | |
| parent | 4dce175e0e4a678b7f93be80c64247c8f5fbab3e (diff) | |
| download | zsh-a64d9403775f45036daf3b66693c35df7bab3c53.tar.gz zsh-a64d9403775f45036daf3b66693c35df7bab3c53.tar.bz2 zsh-a64d9403775f45036daf3b66693c35df7bab3c53.zip | |
refactor(1password): extract `opswd` function
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/1password/1password.plugin.zsh | 51 | ||||
| -rw-r--r-- | plugins/1password/_opswd | 9 | ||||
| -rw-r--r-- | plugins/1password/opswd | 37 | 
3 files changed, 53 insertions, 44 deletions
| diff --git a/plugins/1password/1password.plugin.zsh b/plugins/1password/1password.plugin.zsh index 9398b02b4..941523ca8 100644 --- a/plugins/1password/1password.plugin.zsh +++ b/plugins/1password/1password.plugin.zsh @@ -1,46 +1,9 @@ -if (( ${+commands[op]} )); then -  eval "$(op completion zsh)" -  compdef _op op -fi +# Do nothing if op is not installed +(( ${+commands[op]} )) || return -# opswd puts the password of the named service into the clipboard. If there's a -# one time password, it will be copied into the clipboard after 10 seconds. The -# clipboard is cleared after another 20 seconds. -function opswd() { -  if [[ $# -lt 1 ]]; then -    echo "Usage: opswd <service>" -    return 1 -  fi +# Load op completion +eval "$(op completion zsh)" +compdef _op op -  local service=$1 - -  # If not logged in, print error and return -  op list users > /dev/null || return - -  local password -  # Copy the password to the clipboard -  if ! password=$(op get item "$service" --fields password 2>/dev/null); then -    echo "error: could not obtain password for $service" -    return 1 -  fi - -  echo -n "$password" | clipcopy -  echo "✔ password for $service copied to clipboard" - -  # If there's a one time password, copy it to the clipboard after 5 seconds -  local totp -  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then -    sleep 10 && echo -n "$totp" | clipcopy -    echo "✔ TOTP for $service copied to clipboard" -  fi - -  (sleep 20 && clipcopy </dev/null 2>/dev/null) &! -} - -function _opswd() { -  local -a services -  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}") -  [[ -z "$services" ]] || compadd -a -- services -} - -compdef _opswd opswd +# Load opswd function +autoload -Uz opswd diff --git a/plugins/1password/_opswd b/plugins/1password/_opswd new file mode 100644 index 000000000..b92bf8fc8 --- /dev/null +++ b/plugins/1password/_opswd @@ -0,0 +1,9 @@ +#compdef opswd + +function _opswd() { +  local -a services +  services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}") +  [[ -z "$services" ]] || compadd -a -- services +} + +_opswd "$@" diff --git a/plugins/1password/opswd b/plugins/1password/opswd new file mode 100644 index 000000000..6849d42b3 --- /dev/null +++ b/plugins/1password/opswd @@ -0,0 +1,37 @@ +#autoload + +# opswd puts the password of the named service into the clipboard. If there's a +# one time password, it will be copied into the clipboard after 10 seconds. The +# clipboard is cleared after another 20 seconds. +function opswd() { +  if [[ $# -lt 1 ]]; then +    echo "Usage: opswd <service>" +    return 1 +  fi + +  local service=$1 + +  # If not logged in, print error and return +  op list users > /dev/null || return + +  local password +  # Copy the password to the clipboard +  if ! password=$(op get item "$service" --fields password 2>/dev/null); then +    echo "error: could not obtain password for $service" +    return 1 +  fi + +  echo -n "$password" | clipcopy +  echo "✔ password for $service copied to clipboard" + +  # If there's a one time password, copy it to the clipboard after 5 seconds +  local totp +  if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then +    sleep 10 && echo -n "$totp" | clipcopy +    echo "✔ TOTP for $service copied to clipboard" +  fi + +  (sleep 20 && clipcopy </dev/null 2>/dev/null) &! +} + +opswd "$@" | 
