diff options
| author | Aditya <bluenerd@protonmail.com> | 2023-02-27 20:04:56 +0530 | 
|---|---|---|
| committer | Aditya <bluenerd@protonmail.com> | 2023-02-27 20:04:56 +0530 | 
| commit | edc449275b6c04445f58b108ca0937a87c1e8430 (patch) | |
| tree | 9fd484d58145b616f29a78857cc0b1c8b1c18f05 /oh-my-zsh/plugins/pass | |
| parent | 6f5424ca96c4221ef433f545642669e9c104d0ed (diff) | |
add zsh
Diffstat (limited to 'oh-my-zsh/plugins/pass')
| -rw-r--r-- | oh-my-zsh/plugins/pass/README.md | 22 | ||||
| -rw-r--r-- | oh-my-zsh/plugins/pass/_pass | 144 | 
2 files changed, 166 insertions, 0 deletions
| diff --git a/oh-my-zsh/plugins/pass/README.md b/oh-my-zsh/plugins/pass/README.md new file mode 100644 index 0000000..2b07049 --- /dev/null +++ b/oh-my-zsh/plugins/pass/README.md @@ -0,0 +1,22 @@ +# pass + +This plugin provides completion for the [pass](https://www.passwordstore.org/) password manager. + +To use it, add `pass` to the plugins array in your zshrc file. + +``` +plugins=(... pass) +``` + +## Configuration + +### Multiple repositories + +If you use multiple repositories, you can configure completion like this: +```zsh +compdef _pass workpass +zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass" +workpass() { +  PASSWORD_STORE_DIR=$HOME/work/pass pass $@ +} +``` diff --git a/oh-my-zsh/plugins/pass/_pass b/oh-my-zsh/plugins/pass/_pass new file mode 100644 index 0000000..d911e12 --- /dev/null +++ b/oh-my-zsh/plugins/pass/_pass @@ -0,0 +1,144 @@ +#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. + + +# If you use multiple repositories, you can configure completion like this: +# +# compdef _pass workpass +# zstyle ':completion::complete:workpass::' prefix "$HOME/work/pass" +# workpass() { +#   PASSWORD_STORE_DIR=$HOME/work/pass pass $@ +# } + + +_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 +	zstyle -s ":completion:${curcontext}:" prefix prefix || 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##' -e 's#\\#\\\\#g' -e 's#:#\\:#g' | 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 | 
