avd/mod/bat
2025-04-10 10:42:17 +03:00

56 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
mod_bat () {
# Customizable configuration constants
local -r DEFAULT_CNT=1
local -r DEFAULT_PRE_PLG=$'\u26A1 '
local -r DEFAULT_PRE_UPLG=$'\u2755 '
local -r DEFAULT_PRE_UNK='?? '
local -r DEFAULT_SUF='%'
local -r cnt="${1:-${DEFAULT_CNT}}"
local -r pre_plg="${2-${DEFAULT_PRE_PLG}}"
local -r pre_uplg="${3-${DEFAULT_PRE_UPLG}}"
local -r pre_unk="${4-${DEFAULT_PRE_UNK}}"
local -r suf="${5-${DEFAULT_SUF}}"
local res cap_files cap_file cap stat_file stat
# Get up to the specified number of battery capacity files
readarray -d '' cap_files < \
<(find /sys/class/power_supply/BAT?/capacity -type f -print0 \
| head -z -n "${cnt}")
# Get the corresponding status and capacity for each battery
for cap_file in "${cap_files[@]}"; do
# Compute the name of the status file
printf -v stat_file '%s' "$(dirname "${cap_file}")/status";
# Get the current battery status
if [[ -r "${stat_file}" ]]; then
read -r stat < "${stat_file}"
case "${stat}" in
Charging|Full)
printf -v res '%b %b' "${res}" "${pre_plg}"
;;
Discharging)
printf -v res '%b %b' "${res}" "${pre_uplg}"
;;
*)
printf -v res '%b %b' "${res}" "${pre_unk}"
;;
esac
else
printf -v res '%b %b' "${res}" "${pre_unk}"
fi
# Get the current battery capacity
read -r cap < "${cap_file}"
printf -v res '%b%3d%b' "${res}" "${cap}" "${suf}"
done
# In res, info for each battery is separated by a space, including a
# leading space before the first battery info, so remove it
printf '%b' "${res:1}"
}