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