summaryrefslogtreecommitdiffstats
path: root/pkgs/simple/fzmenu/bin/passmenu
blob: 76153f53e98ee52f5a05726192199610b916fc49 (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
#! /bin/sh
set -efu

#PATH=

case ${FZMENU_PHASE-0} in
  0)
    export FZMENU_PHASE=1
    exec setsid -f terminal dash "$0"
    ;;
  1)
    if result=$(
      PASSWORD_STORE_DIR=${PASSWORD_STORE_DIR-$HOME/.password-store}
      FZF_DEFAULT_OPTS=${FZMENU_FZF_DEFAULT_OPTS-}
      if test -n "$FZF_DEFAULT_OPTS"; then
        export FZF_DEFAULT_OPTS
      fi
      find -L "$PASSWORD_STORE_DIR" -type f -name '*.gpg' |
      awk -F / -v PASSWORD_STORE_DIR="$PASSWORD_STORE_DIR" '
        { n = length(PASSWORD_STORE_DIR "/") }
        $NF == "otp.gpg" { next }
        /.*\.gpg$/ {
          print substr($0, 1 + n, length($0)-length(".gpg")-n)
        }
      ' |
      exec fzf \
          --history=/dev/null \
          --no-sort \
          --prompt='pass: ' \
    )
    then
      export FZMENU_PHASE=2
      export FZMENU_RESULT="$result"
      setsid -f "$0"
    fi
    ;;
  2)
    pass=$(pass show "$FZMENU_RESULT")
    printf %s "$pass" |
    xdotool type -f -
    ;;
  *)
    echo "$0: error: bad phase: $FZMENU_PHASE" >&2
    exit -1
esac