68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.6 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
 | 
						|
        	pass show -c "$SELECTION" > $HOME/.cache/passstring
 | 
						|
		pass show "$SELECTION" | awk 'NR == 2 {print $NF}' | xclip -i -selection primary
 | 
						|
		sed -e "s/^/\"/" -e "s/$/\"/" $HOME/.cache/passstring | xargs -r notify-send "Password" -t 4000
 | 
						|
		sleep 45
 | 
						|
		if [ -f $HOME/.cache/passstring ]; then
 | 
						|
			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
 |