dotfiles/.local/bin/logitech_battery.sh

53 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Helper: map percent to icon and color
get_icon() {
local percent=$1
if ! [[ "$percent" =~ ^[0-9]+$ ]]; then percent=0; fi
if [ "$percent" -ge 90 ]; then echo ""; elif [ "$percent" -ge 60 ]; then echo ""; elif [ "$percent" -ge 40 ]; then echo ""; elif [ "$percent" -ge 20 ]; then echo ""; else echo ""; fi
}
get_color() {
local percent=$1
if ! [[ "$percent" =~ ^[0-9]+$ ]]; then percent=0; fi
if [ "$percent" -ge 90 ]; then echo "#00ff00"; elif [ "$percent" -ge 60 ]; then echo "#aaff00"; elif [ "$percent" -ge 40 ]; then echo "#ffff00"; elif [ "$percent" -ge 20 ]; then echo "#ff8800"; else echo "#ff0000"; fi
}
KEYBOARD_NAME="G915"
MOUSE_NAME="G903"
# Use actual Unicode icons
KEYBOARD_ICON=""
MOUSE_ICON="🖱️"
# Parse keyboard info
kb_line=$(solaar show 2>/dev/null | awk '/G915/ {dev=1} /Battery:/ && dev==1 {print; dev=0}')
kb_percent=$(echo "$kb_line" | awk '{print $2}' | tr -d '%' | grep -E '^[0-9]+$' || echo "N/A")
kb_voltage=$(echo "$kb_line" | grep -o '[0-9]*mV' | grep -o '[0-9]*' || echo "N/A")
kb_status=$(echo "$kb_line" | awk '{print $3}' || echo "N/A")
# Parse mouse info, handle offline/unknown
mouse_line=$(solaar show 2>/dev/null | awk '/G903/ {dev=1} /Battery:/ && dev==1 {print; dev=0}')
if echo "$mouse_line" | grep -qi "unknown"; then
mouse_percent="N/A"
mouse_voltage="N/A"
mouse_status="offline"
else
mouse_percent=$(echo "$mouse_line" | awk '{print $2}' | tr -d '%' | grep -E '^[0-9]+$' || echo "N/A")
mouse_voltage=$(echo "$mouse_line" | grep -o '[0-9]*mV' | grep -o '[0-9]*' || echo "N/A")
mouse_status=$(echo "$mouse_line" | awk '{print $3}' || echo "N/A")
fi
kb_icon=$(get_icon "$kb_percent")
kb_color=$(get_color "$kb_percent")
kb_tooltip="${KEYBOARD_NAME}: ${kb_percent:-N/A}% @ ${kb_voltage:-N/A}mV (${kb_status:-N/A})"
mouse_icon=$(get_icon "$mouse_percent")
mouse_tooltip="${MOUSE_NAME}: ${mouse_percent:-N/A}% @ ${mouse_voltage:-N/A}mV (${mouse_status:-N/A})"
# Escape newlines for JSON
tooltip=$(echo -e "$kb_tooltip\n$mouse_tooltip" | sed ':a;N;$!ba;s/\n/\\n/g')
cat <<EOF
{"text": "$KEYBOARD_ICON $kb_icon | $MOUSE_ICON $mouse_icon ","tooltip": "$tooltip","class": "logitech-battery","color": "$kb_color"}
EOF