60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.1 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[@]}" | dmenu "$@" -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" 2>/dev/null
 | |
| 			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
 | |
| 
 |