#!/bin/sh # configversion: 1 # we disable shellcheck SC2154 (unreferenced variable used) # shellcheck disable=SC2154 # include common definitions # shellcheck source=scripts/core/sxmo_icons.sh . "$(which sxmo_icons.sh)" # shellcheck source=scripts/core/sxmo_common.sh . "$(which sxmo_common.sh)" set_time() { date +%H:%M | head -c -1 | sxmo_status.sh add 99-time } set_locked() { if sxmo_screenlock.sh getCurState | grep -q unlock; then sxmo_status.sh del 0-locked else sxmo_status.sh add 0-locked "$icon_lck" # You can also use "$icon_nto" fi } set_call_duration() { if ! pgrep sxmo_modemcall.sh > /dev/null; then sxmo_status.sh del 0-call-duration return fi 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" | sxmo_status.sh add 5-call-duration } _modem() { MMCLI="$(mmcli -m any -J 2>/dev/null)" MODEMSTATUS="" if [ -z "$MMCLI" ]; then printf "%s" "$icon_cls" else MODEMSTATUS="$(printf %s "$MMCLI" | jq -r .modem.generic.state)" case "$MODEMSTATUS" in locked) printf "%s" "$icon_plk" ;; initializing) printf "I" ;; disabled) # low power state printf "%s" "$icon_mdd" ;; disabling) printf ">%s" "$icon_mdd" ;; enabling) # modem enabled but neither registered (cell) nor connected (data) printf ">%s" "$icon_ena" ;; enabled) printf "%s" "$icon_ena" ;; searching) # i.e. registering printf "%s" "$icon_dot" ;; registered|connected|connecting|disconnecting) MODEMSIGNAL="$(printf %s "$MMCLI" | jq -r '.modem.generic."signal-quality".value')" if [ "$MODEMSIGNAL" -lt 20 ]; then printf "" elif [ "$MODEMSIGNAL" -lt 40 ]; then printf "" elif [ "$MODEMSIGNAL" -lt 60 ]; then printf "" elif [ "$MODEMSIGNAL" -lt 80 ]; then printf "" else printf "" fi ;; *) # FAILED, UNKNOWN # see https://www.freedesktop.org/software/ModemManager/doc/latest/ModemManager/ModemManager-Flags-and-Enumerations.html#MMModemState sxmo_log "WARNING: MODEMSTATUS: $MODEMSTATUS" printf "<%s>" "$MODEMSTATUS" ;; esac fi case "$MODEMSTATUS" in "connected") printf " " USEDTECHS="$(printf %s "$MMCLI" | jq -r '.modem.generic."access-technologies"[]')" case "$USEDTECHS" in *5gnr*) printf 5g # no icon yet ;; *lte*) printf 4g # ﰒ is in the bad range ;; *umts*|*hsdpa*|*hsupa*|*hspa*|*1xrtt*|*evdo0*|*evdoa*|*evdob*) printf 3g # ﰑ is in the bad range ;; *edge*) printf E ;; *pots*|*gsm*|*gprs*) printf 2g # ﰐ is in the bad range ;; *) sxmo_log "WARNING: USEDTECHS: $USEDTECHS" printf "<%s>" "$USEDTECHS" ;; esac ;; "connecting") printf " >>" ;; "disconnecting") printf " <<" ;; esac } set_modem() { _modem | sxmo_status.sh add 10-modem-status } set_modem_monitor() { if sxmo_daemons.sh running modem_monitor -q; then sxmo_status.sh add 20-modem-monitor-status "$icon_mod" else sxmo_status.sh del 20-modem-monitor-status fi } set_wifi() { WLANSTATE="$(tr -d "\n" < /sys/class/net/wlan0/operstate)" if [ "$WLANSTATE" = "up" ]; then sxmo_status.sh add 30-wifi-status "$icon_wif" else sxmo_status.sh del 30-wifi-status fi } set_vpn() { VPNDEVICE="$(nmcli con show | grep vpn | awk '{ print $4 }')" WGDEVICE="$(nmcli con show | grep wireguard | awk '{ print $4 }')" if [ -n "$VPNDEVICE" ] && [ "$VPNDEVICE" != "--" ]; then sxmo_status.sh add 30-vpn-status "$icon_key" elif [ -n "$WGDEVICE" ] && [ "$WGDEVICE" != "--" ]; then sxmo_status.sh add 30-vpn-status "$icon_key" else sxmo_status.sh del 30-vpn-status fi } _battery() { 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)" 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" fi done } set_battery() { _battery | sxmo_status.sh add 40-battery-status } _volume() { case "$(sxmo_audio.sh device get 2>/dev/null)" in Speaker|"") # nothing for default or pulse devices ;; Headphones) printf "%s " "$icon_hdp" ;; Earpiece) printf "%s " "$icon_ear" ;; esac VOL="$(sxmo_audio.sh vol get)" if [ -z "$VOL" ] || [ "$VOL" -eq 0 ]; then printf "%s " "$icon_mut" elif [ "$VOL" -gt 66 ]; then printf "%s " "$icon_spk" elif [ "$VOL" -gt 33 ]; then printf "%s " "$icon_spm" elif [ "$VOL" -gt 0 ]; then printf "%s " "$icon_spl" fi } set_volume() { _volume | sxmo_status.sh add 50-volume } _cputemp() { sensors cpu0_thermal-virtual-0 | cut -d' ' -f9 | sed '3!d' | tr -d + } set_cputemp() { _cputemp | sxmo_status.sh add 08-cputemp } _ram() { printf '%s %s' "$icon_ram" "$(free -h | awk '{print $3}' | sed '2!d')" } set_ram() { _ram | sxmo_status.sh add 09-ram } _cpuusage() { printf "%s %s%%" "$icon_cpu" "$(printf "scale=2;%s/%s\n" "$(ps aux | awk 'BEGIN {sum=0} {sum+=$3}; END {print sum}')" "$(nproc --all)" | bc)" } set_cpuusage() { _cpuusage | sxmo_status.sh add 07-cpuusage } _linux() { printf '%s %s' "$icon_tux" "$(uname -r)" } set_linux() { _linux | sxmo_status.sh add 01-linux } case "$1" in network_wlan0) set_wifi ;; time|call_duration|modem|modem_monitor|vpn|battery|volume|ram|cputemp|cpuusage|linux|locked) set_"$1" ;; periodics|state_change) # 55 s loop and screenlock triggers set_time set_modem set_battery set_ram set_cputemp set_cpuusage ;; all) sxmo_status.sh reset set_time set_call_duration set_modem set_modem_monitor set_wifi set_vpn set_battery set_volume set_ram set_cputemp set_cpuusage set_linux set_locked ;; *) exit # swallow it ! ;; esac