| #!/usr/bin/env bash |
| # batterybar; displays battery percentage as a bar on i3blocks |
| # |
| # Copyright 2015 Keftaa <adnan.37h@gmail.com> |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
| # MA 02110-1301, USA. |
| # |
| # |
| readarray -t output <<< $(acpi battery) |
| battery_count=${#output[@]} |
| |
| for line in "${output[@]}"; |
| do |
| percentages+=($(echo "$line" | grep -o -m1 '[0-9]\{1,3\}%' | tr -d '%')) |
| statuses+=($(echo "$line" | egrep -o -m1 'Discharging|Charging|AC|Full|Unknown')) |
| remaining=$(echo "$line" | egrep -o -m1 '[0-9][0-9]:[0-9][0-9]') |
| if [[ -n $remaining ]]; then |
| remainings+=(" ($remaining)") |
| else |
| remainings+=("") |
| fi |
| done |
| |
| squares="■" |
| |
| #There are 8 colors that reflect the current battery percentage when |
| #discharging |
| dis_colors=("${C1:-#FF0027}" "${C2:-#FF3B05}" "${C3:-#FFB923}" |
| "${C4:-#FFD000}" "${C5:-#E4FF00}" "${C6:-#ADFF00}" |
| "${C7:-#6DFF00}" "${C8:-#10BA00}") |
| charging_color="${CHARGING_COLOR:-#00AFE3}" |
| full_color="${FULL_COLOR:-#FFFFFF}" |
| ac_color="${AC_COLOR:-#535353}" |
| |
| |
| while getopts 1:2:3:4:5:6:7:8:c:f:a:h opt; do |
| case "$opt" in |
| 1) dis_colors[0]="$OPTARG";; |
| 2) dis_colors[1]="$OPTARG";; |
| 3) dis_colors[2]="$OPTARG";; |
| 4) dis_colors[3]="$OPTARG";; |
| 5) dis_colors[4]="$OPTARG";; |
| 6) dis_colors[5]="$OPTARG";; |
| 7) dis_colors[6]="$OPTARG";; |
| 8) dis_colors[7]="$OPTARG";; |
| c) charging_color="$OPTARG";; |
| f) full_color="$OPTARG";; |
| a) ac_color="$OPTARG";; |
| h) printf "Usage: batterybar [OPTION] color |
| When discharging, there are 8 [1-8] levels colors. |
| You can specify custom colors, for example: |
| |
| batterybar -1 red -2 \"#F6F6F6\" -8 green |
| |
| You can also specify the colors for the charging, AC and |
| charged states: |
| |
| batterybar -c green -f white -a \"#EEEEEE\"\n"; |
| exit 0; |
| esac |
| done |
| |
| end=$(($battery_count - 1)) |
| for i in $(seq 0 $end); |
| do |
| if (( percentages[$i] > 0 && percentages[$i] < 20 )); then |
| squares="■" |
| elif (( percentages[$i] >= 20 && percentages[$i] < 40 )); then |
| squares="■■" |
| elif (( percentages[$i] >= 40 && percentages[$i] < 60 )); then |
| squares="■■■" |
| elif (( percentages[$i] >= 60 && percentages[$i] < 80 )); then |
| squares="■■■■" |
| elif (( percentages[$i] >=80 )); then |
| squares="■■■■■" |
| fi |
| |
| if [[ "${statuses[$i]}" = "Unknown" ]]; then |
| squares="<sup>?</sup>$squares" |
| fi |
| |
| case "${statuses[$i]}" in |
| "Charging") |
| color="$charging_color" |
| ;; |
| "Full") |
| color="$full_color" |
| ;; |
| "AC") |
| color="$ac_color" |
| ;; |
| "Discharging"|"Unknown") |
| if (( percentages[$i] >= 0 && percentages[$i] < 10 )); then |
| color="${dis_colors[0]}" |
| elif (( percentages[$i] >= 10 && percentages[$i] < 20 )); then |
| color="${dis_colors[1]}" |
| elif (( percentages[$i] >= 20 && percentages[$i] < 30 )); then |
| color="${dis_colors[2]}" |
| elif (( percentages[$i] >= 30 && percentages[$i] < 40 )); then |
| color="${dis_colors[3]}" |
| elif (( percentages[$i] >= 40 && percentages[$i] < 60 )); then |
| color="${dis_colors[4]}" |
| elif (( percentages[$i] >= 60 && percentages[$i] < 70 )); then |
| color="${dis_colors[5]}" |
| elif (( percentages[$i] >= 70 && percentages[$i] < 80 )); then |
| color="${dis_colors[6]}" |
| elif (( percentages[$i] >= 80 )); then |
| color="${dis_colors[7]}" |
| fi |
| ;; |
| esac |
| |
| # Print Battery number if there is more than one |
| if (( $end > 0 )) ; then |
| message="$message $(($i + 1)):" |
| fi |
| |
| if [[ "$BLOCK_BUTTON" -eq 1 ]]; then |
| message="$message ${statuses[$i]} <span foreground=\"$color\">${percentages[$i]}%${remainings[i]}</span>" |
| fi |
| message="$message <span foreground=\"$color\">$squares</span>" |
| done |
| |
| echo $message |