73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | |
| 	      	if echo "$SELECTION" | grep -q '^/OTP'; then
 | |
| 			pass otp show -c "$SELECTION" > $HOME/.cache/passstring
 | |
| 		else
 | |
|         		pass show -c "$SELECTION" > $HOME/.cache/passstring
 | |
| 			pass show "$SELECTION" | awk 'NR == 2 {print $NF}' | xclip -r -i -selection primary
 | |
| 		fi
 | |
| 		sed -e "s/^/\"/" -e "s/$/\"/" $HOME/.cache/passstring | xargs -r notify-send "Password" -t 4000
 | |
| 		sleep 45
 | |
| 		if [ -f $HOME/.cache/passstring ]; then
 | |
| 			[ "$(wc -l "$HOME/.cache/passstring" | cut -d' ' -f1 )" -gt 0 ] &&
 | |
| 				notify-send "Password" "password cleared from clipboard" -t 4000
 | |
| 			rm $HOME/.cache/passstring
 | |
| 		fi
 | |
| 
 | |
|       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
 |