aboutsummaryrefslogtreecommitdiff
path: root/dpass
diff options
context:
space:
mode:
authorsinanmohd <pcmsinan@gmail.com>2023-03-11 17:47:55 +0530
committersinanmohd <pcmsinan@gmail.com>2023-03-11 21:06:54 +0530
commit60632a0ed4d83676756396ba0d04cac6a486ca89 (patch)
treed1d434e95d873bff24b38007be290ba41875594a /dpass
parentb1ddc870457d998d08938af6b6dcced357d56278 (diff)
dpass: initial commit: dmenu wrapper for the standard unix password manager
Diffstat (limited to 'dpass')
-rwxr-xr-xdpass111
1 files changed, 111 insertions, 0 deletions
diff --git a/dpass b/dpass
new file mode 100755
index 0000000..e1592b2
--- /dev/null
+++ b/dpass
@@ -0,0 +1,111 @@
+#!/bin/sh
+
+pass_store_dir="${PASSWORD_STORE_DIR:-$HOME/.pass}"
+menu="wmenu"
+
+die()
+{
+ : "${1:?}"
+
+ command -v notify-send > /dev/null &&
+ notify-send " dpass" "$1"
+
+ printf "\033[31;1merr: %b\033[0m\n" "$1"
+ exit "${2:-1}"
+}
+
+dep_check()
+{
+ : "${1:?}"
+
+ for dep; do
+ command -v "$dep" 1>/dev/null ||
+ die "$dep not found, please install it" 127
+ done
+
+ unset dep
+}
+
+note()
+{
+ : "${1:?}"
+
+ command -v notify-send > /dev/null &&
+ notify-send "󰟵 dpass" "$1"
+}
+
+search()
+{
+ # usage: search directory
+ pass_path="${1:?}"
+
+ while [ -d "$pass_path" ]
+ do
+ pass_path="${pass_path}/$(printf '%s\n' "$pass_path"/* |
+ sed 's/.*\///g' |
+ "$menu" -l 25 -p "󰟵 ${pass_path##*/} ")"
+
+ [ "$?" != 0 ] &&
+ die "noting selected"
+ done
+
+ pass_path="${pass_path#"${pass_store_dir}"/}"
+ pass_path="${pass_path%.gpg}"
+}
+
+main()
+{
+ pass_path=
+
+ [ -z "$WAYLAND_DISPLAY" ] &&
+ menu="dmenu"
+
+ dep_check "$menu" "pass"
+
+ case "$1" in
+ -o)
+ search "$pass_store_dir"
+ pass "$pass_path"
+ ;;
+ -c)
+ if [ -z "$WAYLAND_DISPLAY" ]
+ then
+ dep_check "xclip"
+ else
+ dep_check "wl-copy"
+ fi
+
+ search "$pass_store_dir"
+ pass --clip "$pass_path"
+ note "password copied to clipboard, will clear in 45 seconds."
+ ;;
+ -h|--help)
+ cat <<- EOF
+ Usage: dpass command
+ dmenu wrapper for the standard unix password manager
+ Commands:
+ -h show this help cruft
+ -o print the password to stdout
+ -c coppy the password to clipboard
+ -t type the password (default behaviour)
+ EOF
+ ;;
+ ""|-t)
+ if [ -z "$WAYLAND_DISPLAY" ]
+ then
+ dep_check "xdotool"
+ search "$pass_store_dir"
+ xdotool type --delay 20 "$(pass "$pass_path")"
+ else
+ dep_check "wtype"
+ search "$pass_store_dir"
+ wtype -d 20 "$(pass "$pass_path")"
+ fi
+ ;;
+ *)
+ die "${0##*/} $1, invalid usage"
+ ;;
+ esac
+}
+
+main "$@"