2022-10-29 18:25:42 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# shellcheck source=include
|
|
|
|
source "./scripts/include"
|
|
|
|
|
|
|
|
# $BATTERY and $ADAPTER env vars can be set manually, being the names of the
|
|
|
|
# devices (in /sys/class/power_supply/) i.e. BATTERY=BAT0 ADAPTER=ADP0
|
|
|
|
# or, if left unset, they will be automatically picked.
|
|
|
|
|
2023-01-29 14:40:24 +00:00
|
|
|
CAPACITY_ICONS=("" "" "" "" "" "" "" "" "" "")
|
2022-10-29 18:25:42 +00:00
|
|
|
CHARGING_ICON=""
|
|
|
|
DISCHARGING_ICON=""
|
2023-12-31 11:40:55 +00:00
|
|
|
FULL_ICON="" # Plugged in, but no longer charging (fully charged)
|
2022-10-29 18:25:42 +00:00
|
|
|
CRITICAL_ICON=""
|
|
|
|
CRITICAL_PERCENTAGE=15
|
|
|
|
|
|
|
|
if [ -z "$BATTERY" ]; then
|
|
|
|
# shellcheck disable=SC2010
|
2023-12-31 11:40:55 +00:00
|
|
|
BATTERY="$(\ls -t /sys/class/power_supply | grep "BAT" | head -n 1)"
|
2022-10-29 18:25:42 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$ADAPTER" ]; then
|
|
|
|
# shellcheck disable=SC2010
|
2023-12-31 11:40:55 +00:00
|
|
|
ADAPTER="$(\ls -t /sys/class/power_supply | grep -E "ADP|AC" | head -n 1)"
|
2022-10-29 18:25:42 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
get_bat_info() {
|
|
|
|
cat /sys/class/power_supply/"$BATTERY"/"$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
get_adp_info() {
|
|
|
|
cat /sys/class/power_supply/"$ADAPTER"/"$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
manufacturer="$(get_bat_info manufacturer)"
|
|
|
|
model_name="$(get_bat_info model_name)"
|
|
|
|
technology="$(get_bat_info technology)"
|
|
|
|
energy_now="$(get_bat_info energy_now)"
|
|
|
|
energy_full="$(get_bat_info energy_full)"
|
|
|
|
energy_full_design="$(get_bat_info energy_full_design)"
|
|
|
|
cycle_count="$(get_bat_info cycle_count)"
|
|
|
|
|
|
|
|
capacity="$(get_bat_info capacity)"
|
|
|
|
status="$(get_bat_info status)"
|
|
|
|
[ "$(get_adp_info online)" -eq 1 ] && adp_connected="true" || adp_connected="false"
|
|
|
|
|
2023-01-25 01:13:50 +00:00
|
|
|
# Quick overrides to showcase how battery works
|
|
|
|
# capacity=100
|
|
|
|
# adp_connected="true"
|
|
|
|
# status="Charging"
|
|
|
|
# status="Not charging"
|
|
|
|
# status="Discharging"
|
|
|
|
|
2022-10-29 18:25:42 +00:00
|
|
|
full="false"
|
|
|
|
capacity_icon="$(pick_icon "$capacity" 0 100 "${CAPACITY_ICONS[@]}")"
|
|
|
|
|
|
|
|
if [ "$status" = "Not charging" ] || [ "$status" = "Full" ] && [ "$adp_connected" = "true" ]; then
|
|
|
|
extra_icon="$FULL_ICON"
|
|
|
|
full="true"
|
|
|
|
elif [ "$status" = "Discharging" ] && [ "$capacity" -le "$CRITICAL_PERCENTAGE" ]; then
|
|
|
|
extra_icon="$CRITICAL_ICON"
|
|
|
|
elif [ "$status" = "Discharging" ]; then
|
|
|
|
extra_icon="$DISCHARGING_ICON"
|
|
|
|
elif [ "$status" = "Charging" ]; then
|
|
|
|
extra_icon="$CHARGING_ICON"
|
|
|
|
fi
|
|
|
|
|
|
|
|
[ "$capacity" -le "$CRITICAL_PERCENTAGE" ] && critical="true" || critical="false"
|
|
|
|
|
|
|
|
jq -n -c --monochrome-output \
|
|
|
|
--arg percent "$capacity" \
|
|
|
|
--arg plugged "$adp_connected" \
|
|
|
|
--arg status "$status" \
|
|
|
|
--arg capacity_icon "$capacity_icon" \
|
|
|
|
--arg extra_icon "$extra_icon" \
|
|
|
|
--arg manufacturer "$manufacturer" \
|
|
|
|
--arg model_name "$model_name" \
|
|
|
|
--arg technology "$technology" \
|
|
|
|
--arg energy_now "$energy_now" \
|
|
|
|
--arg energy_full "$energy_full" \
|
|
|
|
--arg energy_full_design "$energy_full_design" \
|
|
|
|
--arg cycle_count "$cycle_count" \
|
|
|
|
--arg critical "$critical" \
|
|
|
|
--arg full "$full" \
|
|
|
|
'$ARGS.named'
|