167 lines
No EOL
3.9 KiB
Bash
Executable file
167 lines
No EOL
3.9 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
runtime="${XDG_RUNTIME_DIR}/i3blocks"
|
||
[[ ! -d "$runtime" ]] && mkdir -p "$runtime"
|
||
|
||
human_time() {
|
||
local seconds="${1}"
|
||
local minutes=$(( seconds / 60 ))
|
||
local hours=$(( minutes / 60 ))
|
||
minutes=$(( minutes % 60 ))
|
||
printf "%d:%02d\n" "$hours" "$minutes"
|
||
return
|
||
}
|
||
|
||
# Récupération des infos de la batterie
|
||
|
||
source /sys/class/power_supply/BAT1/uevent
|
||
|
||
# %age réel
|
||
#percentage="$POWER_SUPPLY_CAPACITY"
|
||
# %age relatif aux 80 % limités dans le BIOS
|
||
percentage=$(( POWER_SUPPLY_CHARGE_NOW * 100 / 4450400 ))
|
||
|
||
status="$POWER_SUPPLY_STATUS"
|
||
if [[ "$status" == "Charging" && "$percentage" -eq 80 ]]
|
||
then
|
||
status="Full"
|
||
fi
|
||
|
||
time="$(date +%s)"
|
||
|
||
if [[ -f "${runtime}/bat" ]]
|
||
then
|
||
mapfile -t old < "${runtime}/bat"
|
||
fi
|
||
|
||
if [[ "${old[0]}" != "$status" ]]
|
||
then
|
||
printf "%s\n" "$status" "$time" "$POWER_SUPPLY_CHARGE_NOW" > "${runtime}/bat"
|
||
fi
|
||
|
||
|
||
if [[ "$status" == "Discharging" ]]
|
||
then
|
||
remaining_secs="$(( POWER_SUPPLY_CHARGE_NOW / ((old[2] - POWER_SUPPLY_CHARGE_NOW) / (time - old[1])) ))"
|
||
else
|
||
remaining_secs="$(( (4450400 - POWER_SUPPLY_CHARGE_NOW) / ((POWER_SUPPLY_CHARGE_NOW - old[2]) / (time - old[1])) ))"
|
||
fi
|
||
|
||
remaining="$(human_time "$remaining_secs")"
|
||
|
||
# Définition des couleurs
|
||
dis_colors=("#F2777A" "#F2777A" "#F99157" "#F99157" "#FFCC66" "#FFCC66" "#99CC99" "#99CC99")
|
||
charging_color="#66CCCC"
|
||
ac_color="#6699CC"
|
||
full_color="#D3D0C8"
|
||
|
||
# Création de la barre « graphique », 48 états affichables
|
||
|
||
## à partir du pourcentage de charge
|
||
|
||
#percents=$(( percentage / 2 ))
|
||
#(( percents > 48 )) && percents=48
|
||
|
||
## à partir des données brutes
|
||
|
||
### Relatif à 100 %
|
||
#percents=$(( POWER_SUPPLY_CHARGE_NOW * 48 / POWER_SUPPLY_CHARGE_FULL ))
|
||
|
||
### Relatif à 80 % (limite de charge du BIOS)
|
||
percents=$(( POWER_SUPPLY_CHARGE_NOW * 48 / 4450400 ))
|
||
|
||
|
||
full_squares=$(( percents / 8 ))
|
||
for t in $(seq 1 $full_squares)
|
||
do
|
||
squares+="█"
|
||
done
|
||
|
||
if [[ $(( percents - ( full_squares * 8 ) )) -eq 7 ]]
|
||
then
|
||
#squares+="█"
|
||
squares+="▉"
|
||
#squares+="▇"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 6 ]]
|
||
then
|
||
#squares+="▓"
|
||
squares+="▊"
|
||
#squares+="▆"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 5 ]]
|
||
then
|
||
#squares+="▓"
|
||
squares+="▋"
|
||
#squares+="▅"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 4 ]]
|
||
then
|
||
#squares+="▒"
|
||
squares+="▌"
|
||
#squares+="▄"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 3 ]]
|
||
then
|
||
#squares+="▒"
|
||
squares+="▍"
|
||
#squares+="▃"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 2 ]]
|
||
then
|
||
#squares+="░"
|
||
squares+="▎"
|
||
#squares+="▂"
|
||
elif [[ $(( percents - ( full_squares * 8 ) )) -eq 1 ]]
|
||
then
|
||
#squares+="░"
|
||
squares+="▏"
|
||
#squares+="▁"
|
||
fi
|
||
|
||
# Complétion de la barre afin d'avoir une taille fixe
|
||
blanks=$(( 6 - ${#squares} ))
|
||
for t in $(seq 1 $blanks)
|
||
do
|
||
squares+=" "
|
||
done
|
||
|
||
# Choix de la couleur
|
||
case "${status}" in
|
||
"Charging")
|
||
color="$charging_color"
|
||
;;
|
||
"Full")
|
||
color="$full_color"
|
||
;;
|
||
"AC")
|
||
color="$ac_color"
|
||
;;
|
||
"Discharging"|"Unknown")
|
||
if (( percentage >= 0 && percentage < 10 )); then
|
||
color="${dis_colors[0]}"
|
||
elif (( percentage >= 10 && percentage < 20 )); then
|
||
color="${dis_colors[1]}"
|
||
elif (( percentage >= 20 && percentage < 30 )); then
|
||
color="${dis_colors[2]}"
|
||
elif (( percentage >= 30 && percentage < 40 )); then
|
||
color="${dis_colors[3]}"
|
||
elif (( percentage >= 40 && percentage < 60 )); then
|
||
color="${dis_colors[4]}"
|
||
elif (( percentage >= 60 && percentage < 70 )); then
|
||
color="${dis_colors[5]}"
|
||
elif (( percentage >= 70 && percentage < 80 )); then
|
||
color="${dis_colors[6]}"
|
||
elif (( percentage >= 80 )); then
|
||
color="${dis_colors[7]}"
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
# Format détaillé en cas de clic
|
||
if [[ -n "$BLOCK_BUTTON" ]]
|
||
then
|
||
message="<span foreground=\"$color\">${status} ${percentage}%</span> ${remaining}"
|
||
message=${message% }
|
||
else
|
||
message="<span foreground=\"$color\" background=\"#515151\">$squares</span> ${remaining}"
|
||
fi
|
||
|
||
# Affichage
|
||
echo "bat $message"
|
||
echo "bat <span foreground=\"$color\">${percentage}%</span>" |