dotfiles/scripts/wofipass

63 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Very basic interface for pass using wofi
# Get all password files and create an array
root=~/.password-store
CACHE=~/.local/tmp/pass_wofi
seat=seat0
list_passwords() {
shopt -s nullglob globstar
cd "${root}" || exit
pw_list=(**/*.gpg)
printf '%s\n' "${pw_list[@]%.gpg}" | sort -n
}
prompt='search for passwords...'
SECRET=$(list_passwords | wofi -i --prompt="${prompt}" --dmenu --cache-file ${CACHE})
# Ask whether pass, user or both are required
options=("Password" \
"User" \
"User and password" \
"QR-Code" \
"OTP")
option=$(printf '%s\n' "${options[@]%}" | wofi -i --dmenu --width 400 --lines 4 --prompt="..." --cache-file /dev/null)
echo $option
case ${option} in
Password )
echo "Test"
wtype $(pass ${SECRET} | head -n 1)
;;
User )
wtype $(pass ${SECRET} | rg user: | awk '{$1 = ""; print $0}')
;;
"User and password" )
wtype $(pass ${SECRET} | rg user: | awk '{$1 = ""; print $0}')
wtype -k TAB
wtype $(pass ${SECRET} | head -n 1)
;;
"QR-Code" )
if [[ $SECRET =~ wifi$ ]]; then
# Produce a valid wifi QR-code
WIFISSID=$(pass get_user ${SECRET})
WIFIPASS=$(pass get_pass ${SECRET})
WIFIQR="WIFI:T:WPA;S:${WIFISSID};P:${WIFIPASS};;"
qrencode -s 8 -o - $WIFIQR | feh --title "pass: QR-WIFI" -
else
# Only password
pass show -q1 ${SECRET}
fi
;;
"OTP" )
wtype $(pass otp ${SECRET})
;;
esac
# wl-copy -o -s ${seat} ${PASSWD_PASS}