#!/bin/sh # https://tools.suckless.org/dmenu/scripts/ [ "$1" = "privilege" ] && export cmd_prefix='rofi-askpass ' && export dmenu_args='-nhf #ff7070 -sf #ff7070 -p ⠀:::⠀privilege⠀:::' && shift 1 [ "$1" = "terminal" ] && export cmd_prefix='urxvt -hold -e ' && export dmenu_args='-nhf #9e9e9e -sf #9e9e9e -p ⠀:::⠀terminal⠀:::' && shift 1 cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"} cache=$cachedir/dmenu_run historyfile=$XDG_DATA_HOME/dmenu_history mkdir --parents "$cachedir" update() { IFS=: stest -flx $PATH | sort -u >"$cache" unset IFS } [ ! -f "$cache" ] && update awk -v histfile="$historyfile" ' BEGIN { while( (getline < histfile) > 0 ) { sub("^[0-9]+\t","") print x[$0]=1 } } !x[$0]++ ' "$cache" \ | dmenu -i -b ${dmenu_args:--p ⠀:::⠀execute⠀:::} "$@" \ | 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 -r cmd; do ${SHELL:-"/bin/sh"} -c "$cmd_prefix $cmd" & done update