dots


dots / config / .local / bin
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