From 61d3c542d13180b5cfbf7e645299a0009fcedfa2 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Tue, 3 Apr 2018 12:26:07 -0700 Subject: [PATCH] Add the ability to tail logs --- dotfiles/lib/bin/rofi_systemd.sh | 122 +++++++++++++++++++++---------- 1 file changed, 85 insertions(+), 37 deletions(-) diff --git a/dotfiles/lib/bin/rofi_systemd.sh b/dotfiles/lib/bin/rofi_systemd.sh index 5bacd231..5e1e0776 100755 --- a/dotfiles/lib/bin/rofi_systemd.sh +++ b/dotfiles/lib/bin/rofi_systemd.sh @@ -1,59 +1,107 @@ -#!/usr/bin/env zsh +#!/usr/bin/env sh export SYSTEMD_COLORS=0 +term=${ROFI_SYSTEMD_TERM-termite -e} +default_action=${ROFI_SYSTEMD_DEFAULT_ACTION-"list_actions"} function user_units { - SYSTEMD_COLORS=0 systemctl --user list-unit-files | tail -n +2 | head -n -2 | - awk '{print $0 " user"}' + SYSTEMD_COLORS=0 systemctl --user list-unit-files | tail -n +2 | head -n -2 | + awk '{print $0 " user"}' } function system_units { - systemctl list-unit-files | tail -n +2 | head -n -2 | - awk '{print $0 " system"}' + systemctl list-unit-files | tail -n +2 | head -n -2 | + awk '{print $0 " system"}' } enable="Alt+e" disable="Alt+d" stop="Alt+k" restart="Alt+r" +tail="Alt+t" +list_actions="Alt+l" + +all_actions="enable +disable +stop +restart +tail +list_actions" function select_service_and_act { - result=$(rofi -dmenu -i -p "systemd unit: " \ - -kb-custom-1 "${enable}" \ - -kb-custom-2 "${disable}" \ - -kb-custom-3 "${stop}" \ - -kb-custom-4 "${restart}") + result=$(rofi -dmenu -i -p "systemd unit: " \ + -kb-custom-1 "${enable}" \ + -kb-custom-2 "${disable}" \ + -kb-custom-3 "${stop}" \ + -kb-custom-4 "${restart}" \ + -kb-custom-5 "${tail}" \ + -kb-custom-6 "${list_actions}") - rofi_exit="$?" - selection="$(echo $result | sed -n 's/ \+/ /gp')" + rofi_exit="$?" - action="restart" - case "$rofi_exit" in - 1) - exit - ;; - 10) - action="enable" - ;; - 11) - action="disable" - ;; - 12) - action="stop" - ;; - esac + case "$rofi_exit" in + 1) + action="exit" + exit 1 + ;; + 10) + action="enable" + ;; + 11) + action="disable" + ;; + 12) + action="stop" + ;; + 13) + action="restart" + ;; + 14) + action="tail" + ;; + 15) + action="list_actions" + ;; + *) + action="$default_action" + ;; + esac - service_name="$(printf $selection | awk '{ print $1 }' | tr -d ' ')" - is_user="$(printf $selection | awk '{ print $3 }' )" + selection="$(echo $result | sed -n 's/ \+/ /gp')" + service_name="$(echo $selection | awk '{ print $1 }' | tr -d ' ')" + is_user="$(echo $selection | awk '{ print $3 }' )" - case "$is_user" in - user*) - systemctl "$action" --user "$service_name" - ;; - system*) - sudo systemctl "$action" "$service_name" - ;; - esac + case "$is_user" in + user*) + user_arg="--user" + command="systemctl $user_arg" + ;; + system*) + user_arg="" + command="sudo systemctl" + ;; + *) + command="systemctl" + esac + + to_run="$(get_command_with_args)" + echo "Running $to_run" + eval "$to_run" +} + +function get_command_with_args { + case "$action" in + "tail") + echo "$term 'journalctl $user_arg -u $service_name -f'" + ;; + "list_actions") + action=$(echo "$all_actions" | rofi -dmenu -i -p "Select action: ") + get_command_with_args + ;; + *) + echo "$command $action $service_name" + ;; + esac } { user_units; system_units; } | column -tc 1 | select_service_and_act