* .local/bin/passmenu: Import from password-store.
authorAmin Bandali <bandali@gnu.org>
Sun, 20 Nov 2022 00:26:33 +0000 (19:26 -0500)
committerAmin Bandali <bandali@gnu.org>
Sun, 20 Nov 2022 00:26:33 +0000 (19:26 -0500)
This is a copy of contrib/dmenu/passmenu from password-store's git
repository as of dddca73694d1ecc2381cde6c02a9d1466cf0ab41.  Addition
of copyright and license header by me (upstream is under GNU GPLv2+).

.local/bin/passmenu [new file with mode: 0755]

diff --git a/.local/bin/passmenu b/.local/bin/passmenu
new file mode 100755 (executable)
index 0000000..d3e7c75
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2014-2021 password-store contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+shopt -s nullglob globstar
+
+typeit=0
+if [[ $1 == "--type" ]]; then
+       typeit=1
+       shift
+fi
+
+if [[ -n $WAYLAND_DISPLAY ]]; then
+       dmenu=dmenu-wl
+       xdotool="ydotool type --file -"
+elif [[ -n $DISPLAY ]]; then
+       dmenu=dmenu
+       xdotool="xdotool type --clearmodifiers --file -"
+else
+       echo "Error: No Wayland or X11 display detected" >&2
+       exit 1
+fi
+
+prefix=${PASSWORD_STORE_DIR-~/.password-store}
+password_files=( "$prefix"/**/*.gpg )
+password_files=( "${password_files[@]#"$prefix"/}" )
+password_files=( "${password_files[@]%.gpg}" )
+
+password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" "$@")
+
+[[ -n $password ]] || exit
+
+if [[ $typeit -eq 0 ]]; then
+       pass show -c "$password" 2>/dev/null
+else
+       pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } | $xdotool
+fi