#!/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