round() { awk -v n=$1 -v d=$2 'BEGIN{print int((n+d/2)/d) * d}'; } # e.g. 69.420% percentage_raw=$(upower -i /org/freedesktop/UPower/devices/DisplayDevice | awk '/percentage:/ {print $2}') # e.g. 7h est_time=$(upower -i /org/freedesktop/UPower/devices/DisplayDevice | awk '/time to empty:/ {print $4substr($5, 1, 1)}') # charging / discharging / pending-charge chg_state=$(upower -i /org/freedesktop/UPower/devices/DisplayDevice | awk '/state:/ {print $2}') # rounded to tens: 10 20 30 etc. percentage_10s=$(round "${percentage_raw%%%}" 10); # when battery is low, highlight it if [[ $percentage_10s -le "10" ]]; then printf "#[[bg=red,fg=brightwhite]]"; elif [[ $percentage_10s -le "20" ]]; then printf "#[[bg=brightyellow]]"; fi printf " "; if [[ $chg_state == "charging" ]]; then printf "󰂄" else if [[ $percentage_10s -le "10" ]]; then printf "󰁺"; fi if [[ $percentage_10s -eq "20" ]]; then printf "󰁻"; fi if [[ $percentage_10s -eq "30" ]]; then printf "󰁼"; fi if [[ $percentage_10s -eq "40" ]]; then printf "󰁽"; fi if [[ $percentage_10s -eq "50" ]]; then printf "󰁾"; fi if [[ $percentage_10s -eq "60" ]]; then printf "󰁿"; fi if [[ $percentage_10s -eq "70" ]]; then printf "󰂀"; fi if [[ $percentage_10s -eq "80" ]]; then printf "󰂁"; fi if [[ $percentage_10s -eq "90" ]]; then printf "󰂂"; fi if [[ $percentage_10s -eq "100" ]]; then printf "󰁹"; fi fi printf " "; # percentage level rounded to a whole number (69%) printf "%.0f%%" "${percentage_raw%%%}"; if [[ $est_time ]]; then printf " "; # estimated time, if on battery printf " $est_time" fi printf " "; # reset style printf "#[default]";