65 lines
1.5 KiB
Plaintext
65 lines
1.5 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
|
||
|
shopt -s nullglob globstar
|
||
|
|
||
|
typeit=0
|
||
|
if [[ $1 == "--type" ]]; then
|
||
|
typeit=1
|
||
|
shift
|
||
|
fi
|
||
|
|
||
|
|
||
|
STARTDIR=${PASSWORD_STORE_DIR-~/.password-store}
|
||
|
BASEDIR=$STARTDIR
|
||
|
DONE=0
|
||
|
LEVEL=0
|
||
|
PREVSELECTION=""
|
||
|
SELECTION=""
|
||
|
|
||
|
while [ "$DONE" -eq 0 ] ; do
|
||
|
password_files=( "$STARTDIR"/* )
|
||
|
password_files=( "${password_files[@]#"$STARTDIR"/}" )
|
||
|
password_files=( "${password_files[@]%.gpg}" )
|
||
|
|
||
|
if [ "$LEVEL" -ne 0 ] ; then
|
||
|
password_files=(".." "${password_files[@]}")
|
||
|
fi
|
||
|
entry=$(printf '%s\n' "${password_files[@]}" | grep -v 'mutt'| dmenu -i -p "Select a password:" "$@" -l 15)
|
||
|
|
||
|
echo "entry: $entry"
|
||
|
if [ -z "$entry" ] ; then
|
||
|
DONE=1
|
||
|
exit
|
||
|
fi
|
||
|
|
||
|
if [ "$entry" != ".." ] ; then
|
||
|
PREVSELECTION=$SELECTION
|
||
|
SELECTION="$SELECTION/$entry"
|
||
|
|
||
|
# check if another dir
|
||
|
if [ -d "$STARTDIR/$entry" ] ; then
|
||
|
STARTDIR="$STARTDIR/$entry"
|
||
|
LEVEL=$((LEVEL+1))
|
||
|
else
|
||
|
# not a directory so it must be a real password entry
|
||
|
|
||
|
if [[ $typeit -eq 0 ]]; then
|
||
|
pass show -c "$SELECTION" > $HOME/.cache/passstring
|
||
|
sed -e "s/^/\"/" -e "s/$/\"/" $HOME/.cache/passstring | xargs -r notify-send "Password" -t 4000
|
||
|
sleep 45
|
||
|
[ -f $HOME/.cache/passstring ] && notify-send "Password" "password cleared from clipboard" -t 4000
|
||
|
rm $HOME/.cache/passstring
|
||
|
|
||
|
else
|
||
|
xdotool - <<<"type --clearmodifiers -- $(pass show "$SELECTION" | head -n 1)"
|
||
|
fi
|
||
|
DONE=1
|
||
|
fi
|
||
|
|
||
|
else
|
||
|
LEVEL=$((LEVEL-1))
|
||
|
SELECTION=$PREVSELECTION
|
||
|
STARTDIR="$BASEDIR/$SELECTION"
|
||
|
fi
|
||
|
done
|