dotfiles

custom linux config files managed with gnu stow

dotfiles

zsh/.config/zsh/completion/_pass


#compdef pass
#autoload

# Copyright (C) 2012 - 2014:
#    Johan Venant <jvenant@invicem.pro>
#    Brian Mattern <rephorm@rephorm.com>
#    Jason A. Donenfeld <Jason@zx2c4.com>.
# All Rights Reserved.
# This file is licensed under the GPLv2+. Please see COPYING for more information.


_pass () {
  local cmd
  if (( CURRENT > 2)); then
    cmd=${words[2]}
    # Set the context for the subcommand.
    curcontext="${curcontext%:*:*}:pass-$cmd"
    # Narrow the range of words we are looking at to exclude `pass'
    (( CURRENT-- ))
    shift words
    # Run the completion for the subcommand
    case "${cmd}" in
      init)
        _arguments : \
          "-p[gpg-id will only be applied to this subfolder]" \
          "--path[gpg-id will only be applied to this subfolder]"
        _pass_complete_keys
        ;;
      ls|list|edit)
        _pass_complete_entries_with_subdirs
        ;;
      insert)
        _arguments : \
          "-e[echo password to console]" \
          "--echo[echo password to console]" \
          "-m[multiline]" \
          "--multiline[multiline]"
        _pass_complete_entries_with_subdirs
        ;;
      generate)
        _arguments : \
          "-n[don't include symbols in password]" \
          "--no-symbols[don't include symbols in password]" \
          "-c[copy password to the clipboard]" \
          "--clip[copy password to the clipboard]" \
          "-f[force overwrite]" \
          "--force[force overwrite]" \
          "-i[replace first line]" \
          "--in-place[replace first line]"
        _pass_complete_entries_with_subdirs
        ;;
      cp|copy|mv|rename)
        _arguments : \
          "-f[force rename]" \
          "--force[force rename]"
          _pass_complete_entries_with_subdirs
        ;;
      rm)
        _arguments : \
          "-f[force deletion]" \
          "--force[force deletion]" \
          "-r[recursively delete]" \
          "--recursive[recursively delete]"
          _pass_complete_entries_with_subdirs
        ;;
      git)
        local -a subcommands
        subcommands=(
          "init:Initialize git repository"
          "push:Push to remote repository"
          "pull:Pull from remote repository"
          "config:Show git config"
          "log:Show git log"
          "reflog:Show git reflog"
        )
        _describe -t commands 'pass git' subcommands
        ;;
      show|*)
        _pass_cmd_show
        ;;
    esac
  else
    local -a subcommands
    subcommands=(
      "init:Initialize new password storage"
      "ls:List passwords"
      "find:Find password files or directories based on pattern"
      "grep:Search inside decrypted password files for matching pattern"
      "show:Decrypt and print a password"
      "insert:Insert a new password"
      "generate:Generate a new password using pwgen"
      "edit:Edit a password with $EDITOR"
      "mv:Rename the password"
      "cp:Copy the password"
      "rm:Remove the password"
      "git:Call git on the password store"
      "version:Output version information"
      "help:Output help message"
    )
    _describe -t commands 'pass' subcommands
    _arguments : \
      "--version[Output version information]" \
      "--help[Output help message]"
    _pass_cmd_show
  fi
}

_pass_cmd_show () {
  _arguments : \
    "-c[put it on the clipboard]" \
    "--clip[put it on the clipboard]"
  _pass_complete_entries
}
_pass_complete_entries_helper () {
  local IFS=$'\n'
  local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
  _values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' | sort):-""}
}

_pass_complete_entries_with_subdirs () {
  _pass_complete_entries_helper
}

_pass_complete_entries () {
  _pass_complete_entries_helper -type f
}

_pass_complete_keys () {
  local IFS=$'\n'
  # Extract names and email addresses from gpg --list-keys
  _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')
}

_pass

Download

raw zip tar