65 lines
1.4 KiB
Bash
Executable File
65 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# passmenu, for wayland
|
|
# depends: wtype, pass
|
|
|
|
shopt -s nullglob globstar
|
|
|
|
INSERTKEY="{{@@ key.insertMode @@}}"
|
|
#{%@@ if False @@%}#
|
|
INSERTKEY="i"
|
|
#{%@@ endif @@%}#
|
|
|
|
for m in "dmenu" "bmenu" "wofi" "wdmenu"; do
|
|
command -v "$m" > /dev/null && dmenu="$m"
|
|
done
|
|
|
|
test -z "$dmenu" && exit 1
|
|
test "$dmenu" = "wofi" &&
|
|
dmenu="wofi -d"
|
|
|
|
main() {
|
|
|
|
prefix=${PASSWORD_STORE_DIR-~/.password-store}
|
|
password_files=( "$prefix"/**/*.gpg )
|
|
password_files=( "${password_files[@]#"$prefix"/}" )
|
|
password_files=( "${password_files[@]%.gpg}" )
|
|
|
|
entry=`printf '%s\n' "${password_files[@]}" | "$dmenu" -p "Password" $@`
|
|
|
|
[ -n "$entry" ] || exit
|
|
|
|
username=`pass show "$entry" 2>/dev/null | perl -ne 'print $2 if /^(login|user|email): (.*)/'`
|
|
password=`pass show "$entry" 2>/dev/null | head -n 1`
|
|
|
|
action=`printf "Autotype\nUsername -> $username\nPassword" | "$dmenu" -p Action`
|
|
|
|
case $action in
|
|
Autotype)
|
|
autotype
|
|
;;
|
|
Username*)
|
|
printf '%s' "$username" | wl-copy;;
|
|
Password)
|
|
printf '%s' "$password" | wl-copy;;
|
|
esac
|
|
|
|
}
|
|
|
|
autotype(){
|
|
|
|
curWindow=`swaymsg -t get_tree | jq -r '.. | select(.focused? == true).app_id'`
|
|
if test "$curWindow" = "org.qutebrowser.qutebrowser"
|
|
then
|
|
wtype -s 100 -k escape
|
|
wtype -s 100 "$INSERTKEY"
|
|
fi
|
|
|
|
wtype -s 100 "$username"
|
|
wtype -s 100 -k tab
|
|
wtype -s 100 "$password"
|
|
|
|
}
|
|
|
|
main
|