(xmobar): update most monitors

This commit is contained in:
frosty 2024-07-20 01:33:59 -04:00
parent 3ca5787208
commit 0bf62a3e9e

View file

@ -16,6 +16,8 @@ DISK_ICON_COLOR="#48a3e8"
NOW_PLAYING_COLOR="#e647a1" NOW_PLAYING_COLOR="#e647a1"
NOW_PLAYING_STATE_COLOR="#ccca4e" NOW_PLAYING_STATE_COLOR="#ccca4e"
SSID_HIDE_FILE="/tmp/monitors_no-ssid"
readable_kib() { readable_kib() {
data="${1:-}" data="${1:-}"
decimals="${2:-}" decimals="${2:-}"
@ -35,27 +37,6 @@ readable_kib() {
printf "%.*f%s\n" "$decimals" "$amt" "$letter" printf "%.*f%s\n" "$decimals" "$amt" "$letter"
} }
replace_substring() {
original="${1:-}"
pattern="${2:-}"
replacement="${3:-}"
[ -z "$original" ] || [ -z "$pattern" ] && exit
new="$original"
while :; do
case "$original" in
*"$pattern"*)
before_pattern="${original%%"$pattern"*}"
after_pattern="${original#*"$pattern"}"
new="$before_pattern$replacement$after_pattern"
;;
*) break ;;
esac
done
printf '%s\n' "$new"
}
monitor_battery() { monitor_battery() {
read -r capacity </sys/class/power_supply/$BATTERY_NAME/capacity read -r capacity </sys/class/power_supply/$BATTERY_NAME/capacity
read -r status </sys/class/power_supply/$BATTERY_NAME/status read -r status </sys/class/power_supply/$BATTERY_NAME/status
@ -88,34 +69,31 @@ monitor_battery() {
} }
monitor_cpu() { monitor_cpu() {
sleep_time="${2:-1}"
while read -r _ user _ system idle _; do while read -r _ user _ system idle _; do
initial_user_sys="$((user + system))" initial_user_sys="$((user + system))"
initial_total="$((user + system + idle))" initial_total="$((user + system + idle))"
break break
done </proc/stat done </proc/stat
# TODO(frosty): Allow the user to specify how long to wait via an argument. sleep "$sleep_time"
sleep 1
while read -r _ user _ system idle _; do while read -r _ user _ system idle _; do
current_user_sys="$((user + system))" current_user_sys="$((user + system))"
current_total="$((user + system + idle))" current_total="$((user + system + idle))"
break break
done </proc/stat done </proc/stat
while read -r line; do if command -v sensors >/dev/null 2>&1; then
case "$line" in while read -r line; do
*"Package id 0:"*) temp="$line" ;; case "$line" in
esac *"Package id 0:"*) temp="$line" ;;
done <<EOF esac
done <<EOF
$(sensors) $(sensors)
EOF EOF
if [ -n "$temp" ]; then
temp="${temp#Package id 0:*+}"
temp="${temp%%°*}"
temp="${temp%.*}"
fi fi
usage_percent="$(printf '%i\n' $(((current_user_sys - initial_user_sys) * 100 / (current_total - initial_total))))" usage_percent="$(((current_user_sys - initial_user_sys) * 100 / (current_total - initial_total)))"
case "$usage_percent" in case "$usage_percent" in
[0-9] | [0-3][0-9]) color="$DEFAULT_COLOR" ;; [0-9] | [0-3][0-9]) color="$DEFAULT_COLOR" ;;
[4-5][0-9]) color="$STATUS_OK_COLOR" ;; [4-5][0-9]) color="$STATUS_OK_COLOR" ;;
@ -123,6 +101,10 @@ EOF
esac esac
if [ -n "$temp" ]; then if [ -n "$temp" ]; then
temp="${temp#Package id 0:*+}"
temp="${temp%%°*}"
temp="${temp%.*}"
printf '%s°C (<fc=%s>%i%%</fc>)\n' "$temp" "$color" "$usage_percent" printf '%s°C (<fc=%s>%i%%</fc>)\n' "$temp" "$color" "$usage_percent"
else else
printf '<fc=%s>%i%%</fc>\n' "$color" "$usage_percent" printf '<fc=%s>%i%%</fc>\n' "$color" "$usage_percent"
@ -136,13 +118,12 @@ monitor_load() {
load_fifteen="$fifteen" load_fifteen="$fifteen"
done </proc/loadavg done </proc/loadavg
# TODO(frosty): Find a less cursed way to achieve this.
load_one_color= load_one_color=
load_five_color= load_five_color=
load_fifteen_color= load_fifteen_color=
for load in load_one load_five load_fifteen; do for load in load_one load_five load_fifteen; do
case "$(eval 'printf "%i\n" "\$$load"')" in case "$(eval "printf '%.0f\n' \$$load")" in
[0-3]) eval "${load}_color=#cccccc" ;; [0-3]) eval "${load}_color=$DEFAULT_COLOR" ;;
[4-7]) eval "${load}_color=$STATUS_OK_COLOR" ;; [4-7]) eval "${load}_color=$STATUS_OK_COLOR" ;;
*) eval "${load}_color=$STATUS_UNWELL_COLOR" ;; *) eval "${load}_color=$STATUS_UNWELL_COLOR" ;;
esac esac
@ -171,28 +152,39 @@ monitor_memory() {
} }
monitor_ssid() { monitor_ssid() {
while read -r line; do if [ -f "$SSID_HIDE_FILE" ]; then
case $line in while IFS= read -r line; do
*"Connected network"*) ssid="$line" ;; hidden_ssid="$line"
done <"$SSID_HIDE_FILE"
fi
while IFS= read -r line; do
case "$line" in
*"Connected network"*) [ ! -f "$SSID_HIDE_FILE" ] && ssid="$line" || ssid="$hidden_ssid" ;;
esac esac
done <<EOF done <<EOF
$(iwctl station "$WIFI_ADAPTER" show) $(iwctl station "$WIFI_ADAPTER" show)
EOF EOF
[ -z "$ssid" ] && exit
ssid="${ssid##*Connected network}"
ssid="${ssid#"${ssid%%[![:space:]]*}"}"
# TODO(frosty): Add other icons based on the connection status. if [ -n "$ssid" ]; then
icon="" ssid="${ssid##*Connected network}"
ssid="${ssid#"${ssid%%[![:space:]]*}"}"
ssid="${ssid%"${ssid##*[![:space:]]}"}"
icon=""
else
ssid="Offline"
icon=""
fi
printf '%s %s\n' "$icon" "$ssid" printf '%s %s\n' "$icon" "$ssid"
} }
monitor_local_ip() { monitor_local_ip() {
# TODO(frosty): Add a fallback value when offline. if address="$(ip route get 1 2>/dev/null)"; then
address="$(ip route get 1)" address="${address#* via * dev * src }"
address="${address#* via * dev * src }" address="${address% uid *}"
address="${address% uid *}" else
address="0.0.0.0"
fi
printf '%s\n' "$address" printf '%s\n' "$address"
} }
@ -211,16 +203,25 @@ monitor_volume() {
} }
monitor_uptime() { monitor_uptime() {
# TODO(frosty): Find the uptime without calling another command.
up="$(uptime -p)" up="$(uptime -p)"
up="$(replace_substring "$up" 'up ' '')" up="${up#up }"
up="$(replace_substring "$up" ',' '')" while :; do
up="$(replace_substring "$up" ' days' 'd')" case "$up" in
up="$(replace_substring "$up" ' day' 'd')" *","*) up="${up%%,*}${up#*,}" ;;
up="$(replace_substring "$up" ' hours' 'h')" *) break ;;
up="$(replace_substring "$up" ' hour' 'h')" esac
up="$(replace_substring "$up" ' minutes' 'm')" done
up="$(replace_substring "$up" ' minute' 'm')" while :; do
case "$up" in
*" days"*) up="${up%% days*}d${up#* days}" ;;
*" day"*) up="${up%% day*}d${up#* day}" ;;
*" hours"*) up="${up%% hours*}h${up#* hours}" ;;
*" hour"*) up="${up%% hour*}h${up#* hour}" ;;
*" minutes"*) up="${up%% minutes*}m${up#* minutes}" ;;
*" minute"*) up="${up%% minute*}h${up#* minute}" ;;
*) break ;;
esac
done
printf '%s\n' "$up" printf '%s\n' "$up"
} }
@ -234,7 +235,6 @@ monitor_disk() {
use_icon="${3:-0}" use_icon="${3:-0}"
[ -z "$disk" ] || [ ! -d "$disk" ] && exit 1 [ -z "$disk" ] || [ ! -d "$disk" ] && exit 1
# TODO(frosty): Allow more icons to be added using an rc file.
if [ "$use_icon" -eq 1 ]; then if [ "$use_icon" -eq 1 ]; then
case "$disk" in case "$disk" in
"/") icon="" ;; "/") icon="" ;;
@ -309,7 +309,7 @@ EOF
} }
if command -v monitor_"$1" >/dev/null 2>&1; then if command -v monitor_"$1" >/dev/null 2>&1; then
"monitor_$1" "$@" monitor_"$1" "$@"
else else
exit 1 exit 1
fi fi