#compdef gopass # The slightly more awesome standard unix password manager # for teams # https://www.justwatch.com/gopass # https://github.com/justwatchcom/gopass _gopass () { local cmd if (( CURRENT > 2)); then cmd=${words[2]} curcontext="${curcontext%:*:*}:gopass-$cmd" (( CURRENT-- )) shift words case "${cmd}" in agent) local -a subcommands subcommands=( "client:Start a simple agent test client" ) _describe -t commands "gopass agent" subcommands ;; audit) local -a subcommands subcommands=( "hibp:Detect leaked passwords" ) _arguments : "--jobs[The number of jobs to run concurrently when auditing]" _describe -t commands "gopass audit" subcommands ;; binary|bin) local -a subcommands subcommands=( "cat:Print content of a secret to stdout or insert from stdin" "sum:Compute the SHA256 checksum" "copy:Copy files from or to the password store" "move:Move files from or to the password store" ) _describe -t commands "gopass binary" subcommands ;; clone) _arguments : "--path[Path to clone the repo to]" "--crypto[Select crypto backend (gpg, gpgcli, plain, xc)]" "--sync[Select sync backend (git, gitcli, gogit, noop)]" _describe -t commands "gopass clone" subcommands ;; completion) local -a subcommands subcommands=( "bash:Source for auto completion in bash" "zsh:Source for auto completion in zsh" "fish:Source for auto completion in fish" "openbsdksh:Source for auto completion in OpenBSD's ksh" ) _describe -t commands "gopass completion" subcommands ;; config) _arguments : "--store[Set value to substore config]" _describe -t commands "gopass config" subcommands ;; copy|cp) _arguments : "--force[Force to copy the secret and overwrite existing one]" _describe -t commands "gopass copy" subcommands _gopass_complete_passwords;; create|new) _describe -t commands "gopass create" subcommands ;; delete|remove|rm) _arguments : "--recursive[f]" "--force[Force to delete the secret]" _describe -t commands "gopass delete" subcommands _gopass_complete_passwords;; edit|set) _arguments : "--editor[Use this editor binary]" _describe -t commands "gopass edit" subcommands _gopass_complete_passwords;; find|search) _arguments : "--clip[Copy the password into the clipboard]" _describe -t commands "gopass find" subcommands ;; fsck) _describe -t commands "gopass fsck" subcommands ;; generate) _arguments : "--clip[Copy the generated password to the clipboard]" "--print[Print the generated password to the terminal]" "--force[Force to overwrite existing password]" "--edit[Open secret for editing after generating a password]" "--symbols[Use symbols in the password]" "--xkcd[Use multiple random english words combined to a password. If no separator is specified, the words are combined without spaces/separator and the first character of words is capitalised]" "--xkcdsep[Word separator for generated xkcd style password. Implies -xkcd]" "--xkcdlang[Language to generate password from, currently de (german) and en (english, default) are supported]" _describe -t commands "gopass generate" subcommands ;; jsonapi) local -a subcommands subcommands=( "listen:Listen and respond to messages via stdin/stdout" "configure:Setup gopass native messaging manifest for selected browser" ) _describe -t commands "gopass jsonapi" subcommands ;; otp|totp|hotp) _arguments : "--clip[Copy the time based token into the clipboard]" "--qr[Write QR code to `FILE`]" _describe -t commands "gopass otp" subcommands ;; git) local -a subcommands subcommands=( "init:Init git repo" "remote:Mangage git remotes" "push:Push to remote" "pull:Pull from remote" ) _describe -t commands "gopass git" subcommands ;; grep) _describe -t commands "gopass grep" subcommands ;; history|hist) _arguments : "--password[Include passwords in output]" _describe -t commands "gopass history" subcommands ;; init) _arguments : "--path[Set the sub store path to operate on]" "--store[Set the name of the sub store]" "--crypto[Select crypto backend (gpg, gpgcli, plain, xc)]" "--rcs[Select sync backend (git, gitcli, gogit, noop)]" _describe -t commands "gopass init" subcommands ;; insert) _arguments : "--echo[Display secret while typing]" "--multiline[Insert using $EDITOR]" "--force[Overwrite any existing secret and do not prompt to confirm recipients]" _describe -t commands "gopass insert" subcommands ;; list|ls) _arguments : "--limit[Max tree depth]" "--flat[Print flat list]" "--strip-prefix[Strip prefix from filtered entries]" _describe -t commands "gopass list" subcommands ;; move|mv) _arguments : "--force[Force to move the secret and overwrite existing one]" _describe -t commands "gopass move" subcommands _gopass_complete_passwords;; mounts) local -a subcommands subcommands=( "add:Mount a password store" "remove:Umount an mounted password store" ) _describe -t commands "gopass mounts" subcommands ;; recipients) local -a subcommands subcommands=( "add:Add any number of Recipients to any store" "remove:Remove any number of Recipients from any store" ) _describe -t commands "gopass recipients" subcommands ;; setup) _arguments : "--remote[URL to a git remote, will attempt to join this team]" "--alias[Local mount point for the given remote]" "--create[Create a new team (default: false, i.e. join an existing team)]" "--name[Firstname and Lastname for unattended GPG key generation]" "--email[EMail for unattended GPG key generation]" "--crypto[Select crypto backend (gpg, gpgcli, plain, xc)]" "--rcs[Select sync backend (git, gitcli, gogit, noop)]" _describe -t commands "gopass setup" subcommands ;; show) _arguments : "--clip[Copy the first line of the secret into the clipboard]" "--qr[Print the first line of the secret as QR Code]" "--force[Display the password even if safecontent is enabled]" "--password[Display only the password]" "--sync[Sync before attempting to display the secret]" "--revision[Show a past revision]" _describe -t commands "gopass show" subcommands _gopass_complete_passwords;; sync) _arguments : "--store[Select the store to sync]" _describe -t commands "gopass sync" subcommands ;; templates) local -a subcommands subcommands=( "show:Show a secret template." "edit:Edit secret templates." "remove:Remove secret templates." ) _describe -t commands "gopass templates" subcommands ;; unclip) _arguments : "--timeout[Time to wait]" "--force[Clear clipboard even if checksum mismatches]" _describe -t commands "gopass unclip" subcommands ;; update) _arguments : "--pre[Update to prereleases]" _describe -t commands "gopass update" subcommands ;; version) _describe -t commands "gopass version" subcommands ;; xc) local -a subcommands subcommands=( "list-private-keys:" "list-public-keys:" "generate:" "export:" "import:" "export-private-key:" "import-private-key:" "remove:" "encrypt:" "decrypt:" ) _describe -t commands "gopass xc" subcommands ;; help|h) _describe -t commands "gopass help" subcommands ;; *) _gopass_complete_passwords ;; esac else local -a subcommands subcommands=( "agent:Start gopass-agent" "audit:Scan for weak passwords" "binary:Assist with Binary/Base64 content" "clone:Clone a store from git" "completion:Bash and ZSH completion" "config:Edit configuration" "copy:Copy secrets from one location to another" "create:Easy creation of new secrets" "delete:Remove secrets" "edit:Edit new or existing secret" "find:Search for secrets" "fsck:Check store integrity" "generate:Generate a new password" "jsonapi:Run gopass as jsonapi e.g. for browser plugins" "otp:Generate time or hmac based tokens" "git:Run any git command inside a password store" "grep:Search for secrets files containing search-string when decrypted." "history:Show password history" "init:Initialize new password store." "insert:Insert a new secret" "list:List existing secrets" "move:Move secrets from one location to another" "mounts:Edit mounted stores" "recipients:Edit recipient permissions" "setup:Initialize a new password store" "show:Display a secret" "sync:Sync all local stores with their remotes" "templates:Edit templates" "unclip:Internal command to clear clipboard" "update:Check for updates" "version:Display version" "xc:Experimental Crypto" "help:Shows a list of commands or help for one command" ) _describe -t command 'gopass' subcommands _arguments : "--yes[Assume yes on all yes/no questions or use the default on all others]" "--clip[Copy the first line of the secret into the clipboard]" "--help[show help]" "--version[print the version]" _gopass_complete_passwords fi } _gopass_complete_keys () { local IFS=$'\n' _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons 2> /dev/null | cut -d : -f 10 | sort -u | sed '/^$/d') } _gopass_complete_passwords () { _arguments : \ "--clip[Copy the first line of the secret into the clipboard]" _values 'passwords' $(gopass ls --flat) } _gopass