xxwhirlpool
·
2026-04-06
passmenu
1#!/usr/bin/env bash
2
3shopt -s nullglob globstar extglob
4
5typeit=0
6if [[ "$1" == "--type" ]]; then
7 typeit=1
8 shift
9fi
10
11prefix=${PASSWORD_STORE_DIR-~/.password-store}
12password_files=( "$prefix"/**/*.gpg )
13password_files=( "${password_files[@]#"$prefix"/}" )
14password_files=( "${password_files[@]%.gpg}" )
15
16password=$(printf '%s\n' "${password_files[@]}" | dmenu -i -c -l 10 "$@")
17
18[[ -n "$password" ]] || exit
19
20if [[ "$typeit" -eq 0 ]]; then
21 # if you pick something in the "2fa" folder, generate a code
22 # else it's a normal password, copy it to clipboard
23 if [[ "${password_files[*]}" =~ 2fa && "$password" =~ 2fa ]]; then
24 pass otp "$password" | perl -pe "chomp if eof" | xclip -sel clipboard
25 notify-send "passmenu" "2fa code copied to clipboard"
26 else
27 pass show -c "$password" 2>/dev/null
28 notify-send "passmenu" "password copied to clipboard"
29 fi
30else
31 pass show "$password" | { IFS= read -r pass; printf %s "$pass"; }
32fi