passmenu (1149B)
1 #!/usr/bin/env bash 2 3 shopt -s nullglob globstar 4 5 typeit=0 6 otp=0 7 while test $# -gt 0; do 8 case "$1" in 9 --type) 10 typeit=1 11 shift 12 ;; 13 --otp) 14 otp=1 15 shift 16 ;; 17 *) 18 break 19 ;; 20 esac 21 done 22 23 prefix=${PASSWORD_STORE_DIR-~/.password-store} 24 password_files=( "$prefix"/**/*.gpg ) 25 password_files=( "${password_files[@]#"$prefix"/}" ) 26 password_files=( "${password_files[@]%.gpg}" ) 27 28 password=$(printf '%s\n' "${password_files[@]}" | dmenu "$@") 29 30 [[ -n $password ]] || exit 31 32 login=$(pass "$password" | awk -F: '/^login/{print $2}' | tr -d ' ') 33 if [[ -n $login ]]; then 34 if [[ $otp -eq 0 ]]; then 35 notify-send "$password" "$login" 36 else 37 notify-send "$password - OTP copied" 38 fi 39 fi 40 41 if [[ $typeit -eq 0 ]]; then 42 if [[ $otp -eq 0 ]]; then 43 pass show -c "$password" 2>/dev/null 44 else 45 pass otp -c "$password" 2>/dev/null 46 fi 47 else 48 if [[ $otp -eq 0 ]]; then 49 pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | xdotool type --clearmodifiers --file - 50 else 51 pass otp "$password" | { IFS= read -r pass; printf %s "$pass"; } | xdotool type --clearmodifiers --file - 52 fi 53 fi 54