123 lines
2.8 KiB
Plaintext
Executable File
123 lines
2.8 KiB
Plaintext
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p sxmo-utils -p sxmo-utils.runtimeDeps
|
|
#
|
|
# usage:
|
|
# waybar-sxmo-status widget1 [ widget2 [...]]
|
|
#
|
|
# where each widget is one of:
|
|
# - modem-state
|
|
# - modem-tech
|
|
# - modem-signal
|
|
# - wifi-status
|
|
# - volume
|
|
|
|
# sxmo_hook_statusbar.sh assumes:
|
|
# - mmcli, jq on PATH
|
|
# - sxmo_hook_icons.sh and sxmo_common.sh are sourcable
|
|
# - from sxmo_common, it only uses sxmobar (and aliases jq=gojq)
|
|
|
|
# setup environment so that the hooks will be on PATH:
|
|
# - sxmo_hook_statusbar.sh
|
|
# - sxmo_hook_icons.sh
|
|
export HOME="${HOME:-/home/colin}"
|
|
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
export PATH="$XDG_CONFIG_HOME/sxmo/hooks:$PATH"
|
|
|
|
# ensure that sxmo_audio.sh tells us the volume instead of early-returning
|
|
export SXMO_NO_AUDIO=
|
|
|
|
# clunky interaction between us and sxmo_hook_statusbar.sh:
|
|
# - we export `sxmobar` to it, but within that function cannot modify the environment
|
|
# of *this* script, because it gets run in a different process.
|
|
# - so, `sxmobar` prints info to stdout, and then this script re-interprets that info.
|
|
# - practically, `sxmobar` prints shell commands, and then this script `eval`s them, to achieve that IPC.
|
|
sxmobar() {
|
|
action="$1"
|
|
shift
|
|
if [ "$action" = "-a" ]; then
|
|
while [ -n "$*" ]; do
|
|
arg="$1"
|
|
case "$arg" in
|
|
"-f"|"-b"|"-t"|"-e")
|
|
# foreground/background/text/emphasis: ignore it
|
|
shift
|
|
shift
|
|
;;
|
|
*)
|
|
# begin arguments
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "setitem $@"
|
|
fi
|
|
}
|
|
export -f sxmobar
|
|
|
|
setitem() {
|
|
id="$1"
|
|
priority="$2"
|
|
value="$3"
|
|
case "$id" in
|
|
modem-state)
|
|
modem_state="$value"
|
|
;;
|
|
modem-tech)
|
|
modem_tech="$value"
|
|
;;
|
|
modem-signal)
|
|
modem_signal="$value"
|
|
;;
|
|
wifi-status)
|
|
wifi_status="$value"
|
|
;;
|
|
volume)
|
|
volume="$value"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
while [ -n "$*" ]; do
|
|
variable="$1"
|
|
shift
|
|
case "$variable" in
|
|
"--verbose")
|
|
set -x
|
|
;;
|
|
"modem-state")
|
|
if [ -z "$modem_state" ]; then
|
|
eval "$(sxmo_hook_statusbar.sh modem)"
|
|
fi
|
|
echo -n "$modem_state"
|
|
;;
|
|
"modem-tech")
|
|
if [ -z "$modem_tech" ]; then
|
|
eval "$(sxmo_hook_statusbar.sh modem)"
|
|
fi
|
|
echo -n "$modem_tech"
|
|
;;
|
|
"modem-signal")
|
|
if [ -z "$modem_signal" ]; then
|
|
eval "$(sxmo_hook_statusbar.sh modem)"
|
|
fi
|
|
echo -n "$modem_signal"
|
|
;;
|
|
"wifi-status")
|
|
if [ -z "$wifi_status" ]; then
|
|
eval "$(sxmo_hook_statusbar.sh network wifi wlan0)"
|
|
fi
|
|
echo -n "$wifi_status"
|
|
;;
|
|
"volume")
|
|
if [ -z "$volume" ]; then
|
|
eval "$(sxmo_hook_statusbar.sh volume)"
|
|
fi
|
|
echo -n "$volume"
|
|
;;
|
|
*)
|
|
echo -n "UNK: $variable"
|
|
;;
|
|
esac
|
|
done
|