nixos-config/scripts/wpass

72 lines
1.5 KiB
Bash
Executable file

#!/bin/sh
_gpg-unlock
set -xe
find_file() {
fd --strip-cwd-prefix '\.gpg$' |
sd ".gpg$" "" |
wdmenu -p "Password" $@
}
print_actions_for_entry() {
echo "Autotype"
if test -n "$username"; then
echo "Username -> $username"
fi
echo "Password"
if test -n "$otp"; then
echo "OTP"
fi
echo "$entry_content" | \
rg '^(\w+): .*$' --replace '$1' | \
sed \
-e '/login/d' \
-e '/user/d' \
-e '/email/d'
}
main() {
test -n "$PASSWORD_STORE_DIR" &&
cd "$PASSWORD_STORE_DIR" ||
cd "$HOME/.password-store"
entry=`find_file "$@"`
test -n "$entry" || exit 0
entry_content="$(pass show "$entry" 2>/dev/null)" || true
username=`echo "$entry_content" | rg -m1 '(login|user|email): (.*)' -r '$2'` || true
password=`echo "$entry_content" | head -n 1` || true
otp=`pass otp "$entry" 2>/dev/null` || true
action="$(print_actions_for_entry | wdmenu -p Action)"
case $action in
Autotype)
autotype
;;
Username*)
printf '%s' "$username" | wl-copy;;
Password)
printf '%s' "$password" | wl-copy;;
OTP)
pass otp "$entry" | wl-copy;;
*)
key="$action"
printf '%s\n' "$entry_content" | rg -m1 "^$key: (.*)" -r '$1' | wl-copy -n
;;
esac
}
autotype(){
if test -n "$username"; then
env wtype -s 100 "$username"
env wtype -s 100 -k tab
fi
env wtype -s 100 "$password"
}
main