From d0629dca0432ad7d3d90a253f61acf993669fddd Mon Sep 17 00:00:00 2001 From: Yaroslav Date: Fri, 10 Jul 2020 23:29:41 +0300 Subject: menupass overhaul: copy login as well as password --- dotfiles/.local/bin/menupass | 85 ++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 22 deletions(-) (limited to 'dotfiles/.local/bin/menupass') diff --git a/dotfiles/.local/bin/menupass b/dotfiles/.local/bin/menupass index dad8023..1a1ecd2 100755 --- a/dotfiles/.local/bin/menupass +++ b/dotfiles/.local/bin/menupass @@ -1,40 +1,81 @@ #!/usr/bin/sh -# Taken from https://git.zx2c4.com/password-store/tree/contrib/dmenu/passmenu -# and modified +# Inspiration taken from +# https://git.zx2c4.com/password-store/tree/contrib/dmenu/passmenu # Source settings from .bemenurc . ~/.config/bemenurc shopt -s nullglob globstar -title="Copy password to clipboard" -typeit=0 -if [[ $1 == "--type" ]]; then -title="Show and copy password to clipboard" - typeit=1 - shift -fi +notititle="🔑 Password store" +cleartime=30 +lastpass_cache="$HOME/.cache/lastpass" prefix=${PASSWORD_STORE_DIR-~/.password-store} password_files=( "$prefix"/**/*.gpg ) password_files=( "${password_files[@]#"$prefix"/}" ) password_files=( "${password_files[@]%.gpg}" ) -password=$(printf '%s\n' "${password_files[@]}" | bemenu -p "$title:" --tf="$BEMENU_TF" --tb="$BEMENU_NB" --fb="$BEMENU_NB" --fn="$BEMENU_FN" --nb="$BEMENU_NB" --nf="$BEMENU_NF" --hf="$BEMENU_HF" --hb="$BEMENU_HB") -[[ -n $password ]] || exit +notify_pass() { + notify-send \ + "$notititle" \ + "The password for $1 has been copied to the clipboard and will be cleared in 30 seconds" +} -oldclip=$(wl-paste) -thepassword=$(pass show "$password") -wl-copy "$thepassword" +notify_spass() { + notify-send "$notititle" "Password for $1: $2" +} -if [[ $typeit -eq 0 ]]; then - notify-send "🔑 Password store" "The password for $password has been copied to the clipboard and will be cleared in 30 seconds" -else - notify-send "🔑 Password store" "Password for $password: $thepassword" -fi +notify_nocache() { + notify-send "$notititle" "No cache about previously selected login" +} + +show_menu() { + password=$(printf '%s\n' "${password_files[@]}" | bemenu -p "$1:" --tf="$BEMENU_TF" --tb="$BEMENU_NB" --fb="$BEMENU_NB" --fn="$BEMENU_FN" --nb="$BEMENU_NB" --nf="$BEMENU_NF" --hf="$BEMENU_HF" --hb="$BEMENU_HB") + [ -n "$password" ] || exit +} + +copy_password() { + thepassword=$(pass show "$1"| sed -n 1p) + wl-copy "$thepassword" +} + +copy_login() { + thelogin=$(pass show "$1"| sed -n 2p) + wl-copy "$thelogin" + notify-send "$notititle" "The login $thelogin has been copied to the clipboard" + printf "%s" "$1" > $lastpass_cache +} + +wait_and_clear() { + sleep $cleartime + wl-copy "" + notify-send "🔑 Password store" "Clipboard has been cleared" +} + + +case $1 in + -l) + show_menu "Show and copy login to clipboard" + copy_login $password;; + -s) + show_menu "Show and copy password to clipboard" + copy_password $password + notify_spass "$password" "$thepassword" + wait_and_clear;; + -f) + ## Copy the password of the last copied login + [ -f $lastpass_cache ] || (notify_nocache && exit) + password=$(cat $lastpass_cache) + copy_password $password + notify_pass "$password" "$thepassword" + wait_and_clear;; + *) + show_menu "Copy password to clipboard" + copy_password $password + notify_pass "$password" "$thepassword" + wait_and_clear;; +esac -sleep 30 -wl-copy $oldclip -notify-send "🔑 Password store" "Password cleared from clipboard" -- cgit v1.2.3