#!/bin/sh
 # see sway-bar(5) and swaybar-protocol(7)
 KILO=1000
+
+BAT_DIR=/sys/class/power_supply/BAT0
+
+print_battery () {
+    COLOR=ffffff
+    printf '    {"separator_block_width": 20, "full_text": "'
+    STATUS=$(cat "${BAT_DIR}/status")
+    if [ "${STATUS}" = "Not charging" ]; then
+        printf "_"
+    elif [ "${STATUS}" = "Charging" ]; then
+        printf "^"
+       COLOR=00ff00
+    elif [ "${STATUS}" = "Discharging" ]; then
+        printf "v"
+       COLOR=ffff00
+    else
+        printf "?"
+    fi
+    printf ":%d" $(calc "100 * $(cat ${BAT_DIR}/energy_full) // $(cat ${BAT_DIR}/energy_full_design)")
+    printf ":%d" $(calc "100 * $(cat ${BAT_DIR}/energy_now) // $(cat ${BAT_DIR}/energy_full)")
+    printf '", "color": "%s"},\n' "${COLOR}"
+}
+
 printf '{ "version": 1 }\n[\n' 
 while true; do
   printf '  [\n'
   printf '    {"separator_block_width": 20, "full_text": "%s"},\n' "$(ip -4 addr show scope global | grep -oP '(?<=inet\s)\d+(\.\d+){3}')"
-  printf '    {"separator_block_width": 20, "full_text": "%s"},\n' "$(cat /sys/class/power_supply/BAT0/status)"
+  print_battery
   printf '    {"separator_block_width": 20, "full_text": "%d° C"},\n' $(calc "$(cat /sys/class/thermal/thermal_zone0/temp) // ${KILO}")
   printf '    {"separator_block_width": 20, "full_text": "%s"},\n' "$(date +'%Y-%m-%d %H:%M:%S/%Z')"
   printf '  ],\n'