#!/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