summaryrefslogtreecommitdiff
path: root/dwm-6.3/scripts/passmenu2
blob: 38472199b85b6e4c862ab0ee186a79d13321ad38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/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