|
|
#!/usr/bin/env sh |
|
|
|
|
|
# include common definitions |
|
|
# shellcheck source=scripts/core/sxmo_common.sh |
|
|
. "$(dirname "$0")/sxmo_common.sh" |
|
|
|
|
|
percenticon() { |
|
|
if [ "$1" -lt 20 ]; then |
|
|
printf "" |
|
|
elif [ "$1" -lt 40 ]; then |
|
|
printf "" |
|
|
elif [ "$1" -lt 60 ]; then |
|
|
printf "" |
|
|
elif [ "$1" -lt 80 ]; then |
|
|
printf "" |
|
|
else |
|
|
printf "" |
|
|
fi |
|
|
} |
|
|
|
|
|
bar() { |
|
|
MMCLI="$(mmcli -m any -J)" |
|
|
|
|
|
# In-call.. show length of call |
|
|
if pgrep sxmo_modemcall.sh > /dev/null; then |
|
|
NOWS="$(date +"%s")" |
|
|
CALLSTARTS="$(date +"%s" -d "$( |
|
|
grep -aE 'call_start|call_pickup' "$XDG_DATA_HOME"/sxmo/modem/modemlog.tsv | |
|
|
tail -n1 | |
|
|
cut -f1 |
|
|
)")" |
|
|
CALLSECONDS="$(printf "%s - %s" "$NOWS" "$CALLSTARTS" | bc)" |
|
|
printf "%ss " "$CALLSECONDS" |
|
|
fi |
|
|
|
|
|
MODEMSTATUS="" |
|
|
if [ -z "$MMCLI" ]; then |
|
|
printf "" |
|
|
else |
|
|
MODEMSTATUS="$(printf %s "$MMCLI" | jq -r .modem.generic.state)" |
|
|
case "$MODEMSTATUS" in |
|
|
locked) |
|
|
printf "" |
|
|
;; |
|
|
registered|connected) |
|
|
MODEMSIGNAL="$(printf %s "$MMCLI" | jq -r '.modem.generic."signal-quality".value')" |
|
|
percenticon "$MODEMSIGNAL" |
|
|
;; |
|
|
disconnected) |
|
|
printf "ﲁ" |
|
|
;; |
|
|
esac |
|
|
fi |
|
|
|
|
|
if [ "$MODEMSTATUS" = "connected" ]; then |
|
|
printf " " |
|
|
USEDTECHS="$(printf %s "$MMCLI" | jq -r '.modem.generic."access-technologies"[]')" |
|
|
case "$USEDTECHS" in |
|
|
*5gnr*) |
|
|
printf 5g # no icon yet |
|
|
;; |
|
|
*lte*) |
|
|
printf ﰒ |
|
|
;; |
|
|
*umts*|*hsdpa*|*hsupa*|*hspa*|*1xrtt*|*evdo0*|*evdoa*|*evdob*) |
|
|
printf ﰑ |
|
|
;; |
|
|
*edge*) |
|
|
printf E |
|
|
;; |
|
|
*pots*|*gsm*|*gprs*) |
|
|
printf ﰐ |
|
|
;; |
|
|
esac |
|
|
fi |
|
|
|
|
|
if pgrep -f sxmo_modemmonitor.sh > /dev/null; then |
|
|
printf " " |
|
|
fi |
|
|
|
|
|
WLANSTATE="$(tr -d "\n" < /sys/class/net/wlan0/operstate)" |
|
|
if [ "$WLANSTATE" = "up" ]; then |
|
|
printf " " |
|
|
fi |
|
|
|
|
|
# symbol if wireguard/vpn is connected |
|
|
VPNDEVICE="$(nmcli con show | grep vpn | awk '{ print $4 }')" |
|
|
WGDEVICE="$(nmcli con show | grep wireguard | awk '{ print $4 }')" |
|
|
if [ -n "$VPNDEVICE" ] && [ "$VPNDEVICE" != "--" ]; then |
|
|
printf " " |
|
|
elif [ -n "$WGDEVICE" ] && [ "$WGDEVICE" != "--" ]; then |
|
|
printf " " |
|
|
fi |
|
|
|
|
|
# Find battery and get percentage + status |
|
|
for power_supply in /sys/class/power_supply/*; do |
|
|
if [ "$(cat "$power_supply"/type)" = "Battery" ]; then |
|
|
PCT="$(cat "$power_supply"/capacity)" |
|
|
BATSTATUS="$(cut -c1 "$power_supply"/status)" |
|
|
fi |
|
|
done |
|
|
|
|
|
printf " " |
|
|
if [ "$BATSTATUS" = "C" ]; then |
|
|
if [ "$PCT" -lt 20 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 30 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 40 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 60 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 80 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 90 ]; then |
|
|
printf "" |
|
|
else |
|
|
printf "" |
|
|
fi |
|
|
else |
|
|
if [ "$PCT" -lt 10 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 20 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 30 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 40 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 50 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 60 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 70 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 80 ]; then |
|
|
printf "" |
|
|
elif [ "$PCT" -lt 90 ]; then |
|
|
printf "" |
|
|
else |
|
|
printf "" |
|
|
fi |
|
|
fi |
|
|
|
|
|
[ -z "$SXMO_BAR_HIDE_BAT_PER" ] && printf " %s%%" "$PCT" |
|
|
|
|
|
printf " " |
|
|
|
|
|
# Volume |
|
|
AUDIODEV="$(sxmo_audiocurrentdevice.sh)" |
|
|
AUDIOSYMBOL="$(printf %s "$AUDIODEV" | cut -c1)" |
|
|
if [ "$AUDIOSYMBOL" = "L" ] || [ "$AUDIOSYMBOL" = "N" ]; then |
|
|
printf "" #speakers or none, use no special symbol |
|
|
elif [ "$AUDIOSYMBOL" = "H" ]; then |
|
|
printf " " |
|
|
elif [ "$AUDIOSYMBOL" = "E" ]; then |
|
|
printf " " #earpiece |
|
|
fi |
|
|
VOL=0 |
|
|
[ "$AUDIODEV" = "None" ] || VOL="$( |
|
|
amixer sget "$AUDIODEV" | |
|
|
grep -oE '([0-9]+)%' | |
|
|
tr -d ' %' | |
|
|
awk '{ s += $1; c++ } END { print s/c }' | |
|
|
xargs printf %.0f |
|
|
)" |
|
|
if [ "$AUDIODEV" != "None" ]; then |
|
|
if [ "$VOL" -gt 66 ]; then |
|
|
printf "" |
|
|
elif [ "$VOL" -gt 33 ]; then |
|
|
printf "" |
|
|
elif [ "$VOL" -gt 0 ]; then |
|
|
printf "" |
|
|
elif [ "$VOL" -eq 0 ]; then |
|
|
printf "ﱝ" |
|
|
fi |
|
|
fi |
|
|
|
|
|
printf " %s\0" "$(date +%R)" |
|
|
} |
|
|
|
|
|
WM="$(sxmo_wm.sh)" |
|
|
|
|
|
forceupdate() { |
|
|
kill "$SLEEPID" |
|
|
} |
|
|
trap "forceupdate" USR1 |
|
|
|
|
|
update() { |
|
|
BAR="$(bar)" |
|
|
[ -z "$SLEEPID" ] && return # to prevent mid rendering interuption |
|
|
printf %s "$BAR" | case "$WM" in |
|
|
sway|ssh) xargs -0 printf "%s\n";; |
|
|
dwm) xargs -0 xsetroot -name;; |
|
|
esac |
|
|
} |
|
|
|
|
|
while : |
|
|
do |
|
|
sleep 10 & |
|
|
SLEEPID=$! |
|
|
|
|
|
update & |
|
|
UPDATEID=$! |
|
|
|
|
|
wait "$SLEEPID" |
|
|
unset SLEEPID |
|
|
wait "$UPDATEID" |
|
|
done
|
|
|
|