summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/bemenu_run_history50
-rwxr-xr-x.local/bin/dmenupass42
2 files changed, 92 insertions, 0 deletions
diff --git a/.local/bin/bemenu_run_history b/.local/bin/bemenu_run_history
new file mode 100755
index 0000000..242d277
--- /dev/null
+++ b/.local/bin/bemenu_run_history
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+
+cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
+if [ -d "$cachedir" ]; then
+ cache=$cachedir/bemenu_run
+ historyfile=$cachedir/bemenu_history
+else # if no xdg dir, fall back to dotfiles in ~
+ cache=$HOME/.bemenu_cache
+ historyfile=$HOME/.bemenu_history
+fi
+
+IFS=:
+if stest -dqr -n "$cache" $PATH; then
+ stest -flx $PATH | sort -u > "$cache"
+fi
+unset IFS
+
+awk -v histfile=$historyfile '
+ BEGIN {
+ while( (getline < histfile) > 0 ) {
+ sub("^[0-9]+\t","")
+ print
+ x[$0]=1
+ }
+ } !x[$0]++ ' "$cache" \
+ | bemenu "$@" \
+ | awk -v histfile=$historyfile '
+ BEGIN {
+ FS=OFS="\t"
+ while ( (getline < histfile) > 0 ) {
+ count=$1
+ sub("^[0-9]+\t","")
+ fname=$0
+ history[fname]=count
+ }
+ close(histfile)
+ }
+
+ {
+ history[$0]++
+ print
+ }
+
+ END {
+ if(!NR) exit
+ for (f in history)
+ print history[f],f | "sort -t '\t' -k1rn >" histfile
+ }
+ ' \
+ | while read cmd; do ${SHELL:-"/bin/sh"} -c "$cmd" & done
diff --git a/.local/bin/dmenupass b/.local/bin/dmenupass
new file mode 100755
index 0000000..11b1822
--- /dev/null
+++ b/.local/bin/dmenupass
@@ -0,0 +1,42 @@
+#!/usr/bin/sh
+
+getpswds() {
+ RET=$(pass ls | sed -E '/^[A-Z]/d;s/[└├](─)* //g;s/(\[0+m)//g' | fzf)
+ [ -z "${RET}" ] && exit 0
+ echo -en "${RET}"
+}
+
+show() {
+ PSWD=$1
+ [ -z "$PSWD" ] && PSWD=$(getpswds)
+ # Necessary in order to allow pasting and not immediately closing the thing
+ pass show -c "$PSWD"
+ notify-send -t 5000 "Pass" "Copied $PSWD to clipboard"
+ sleep 30
+}
+
+add() {
+ clear
+ echo -n "Name for new password: "
+ read PSWDNAME
+ [ -z "${PSWDNAME}" ] && exit 0
+ pass insert "${PSWDNAME}"
+}
+
+options() {
+ RET=$(echo -e "ls\nshow\ninsert\nadd" | sort | fzf)
+ [ -z "${RET}" ] && exit 0
+ echo -en "${RET}"
+}
+
+CMD="${1}"
+
+[ -z "${CMD}" ] && CMD=$(options)
+
+
+case "${CMD}" in
+ ls) getpswds >/dev/null;;
+ show) show;;
+ insert) add;;
+ add) add;;
+esac