diff options
Diffstat (limited to 'bin/rcmenu')
| -rwxr-xr-x | bin/rcmenu | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/bin/rcmenu b/bin/rcmenu index 223d597..c2a359d 100755 --- a/bin/rcmenu +++ b/bin/rcmenu @@ -28,28 +28,42 @@ __list() { ) | column -t } +__start() { + local sv=$1 + export msg=$(doas -n s6-rc -v2 -u change "$sv") + export action=start +} +__stop() { + local sv=$1 + export msg=$(doas -n s6-rc -v2 -d change "$sv") + export action=stopp +} +__restart() { + local sv="$1" + local msg + local action + + # bemenu-ism + # if [ $menu_exitcode -eq 18 ]; then + if jq -ncr '{p:"rcmenu",o:[{l:"restart",x:"false"},{l:"stop",x:"true"}]}' | mkmenu; then + __stop "$sv" + else + __stop "$sv" && sleep 0.5 && __start "$sv" + action=restart + fi + + export msg + export action +} + __handle() { while read -r line; do sv=$(printf "%s" "${line}" | awk '{print $1}') state=$(printf "%s" "${line}" | awk '{print $2}') case "$state" in - up | \[bundle\]) - msg=$(doas -n s6-rc -v2 -d change "$sv") - if [ $menu_exitcode -eq 18 ]; then - action=stopp - else - action=restart - sleep 0.5 - msg=$(doas -n s6-rc -v2 -u change "$sv") - fi - ;; - - down) - action=start - msg=$(doas -n s6-rc -v2 -u change "$sv") - ;; - + up | \[bundle\]) __restart "$sv" ;; + down) __start "$sv" ;; *) action=noop msg=$(printf "unknown service state: %s\n" "$state") @@ -66,6 +80,14 @@ __handle() { done } -svs=$(__list | menu --list=10) -menu_exitcode=$? -__handle <<<"$svs" +case "${1:-}" in +-h | --help | help) printf "usage: %s [start|stop|restart] SERVICE\n" "$(basename "$0")" ;; +start) __start "$2" ;; +stop) __stop "$2" ;; +restart) __restart "$2" ;; +*) + svs=$(__list | menu -l10) + menu_exitcode=$? + __handle <<<"$svs" + ;; +esac |