Move files out of their respective fs structure into program dirs in root and symlink dotfils using HM.

This commit is contained in:
Martin Larsson 2025-01-16 23:49:38 +00:00
parent 10bab010b7
commit fb2adb4547
72 changed files with 9 additions and 0 deletions

174
confutils/get-battery.sh Executable file
View file

@ -0,0 +1,174 @@
#!/bin/bash
#############################
# Icons for Linux Battery
#############################
# This icon is used for macOS (no dynamic levels).
MAC_BATTERY_ICON=""
# Charging icon (positive power_now)
BATTERY_CHARGING_ICON="󰂄"
# Discharging icons based on capacity
BATTERY_FULL_ICON="" # 80%100%
BATTERY_3QTR_ICON="" # 60%79%
BATTERY_HALF_ICON="" # 40%59%
BATTERY_QTR_ICON="" # 20%39%
BATTERY_EMPTY_ICON="" # 0%19%
#############################
# macOS Battery
#############################
get_battery_info_mac() {
# pmset is the standard battery command on macOS
if ! command -v pmset &>/dev/null; then
return 1
fi
capacity=$(pmset -g batt | grep -o "\d\+%" | head -n1 | tr -d '%')
if [[ -n "$capacity" ]]; then
# Just show generic icon + capacity on mac
echo "$MAC_BATTERY_ICON $capacity%"
return 0
fi
return 1
}
#############################
# Linux Battery
#############################
get_battery_info_linux() {
local path="$1"
# Early return if path is not valid
if [ -z "$path" ]; then
return 1
fi
# capacity
if [ -r "$path/capacity" ]; then
capacity=$(cat "$path/capacity")
else
capacity=""
fi
# power_now
power_now=""
if [ -r "$path/power_now" ]; then
power_now=$(cat "$path/power_now")
elif [ -r "$path/current_now" ] && [ -r "$path/voltage_now" ]; then
# Some systems use current_now and voltage_now
current_now=$(cat "$path/current_now")
voltage_now=$(cat "$path/voltage_now")
if [[ -n "$current_now" && -n "$voltage_now" ]]; then
# (current_now * voltage_now) / 1e6 => watts
power_now=$(echo "scale=2; ($current_now * $voltage_now) / 1000000" | bc)
fi
fi
# If we got capacity at all
if [[ -n "$capacity" ]]; then
# Figure out numeric or empty power
if [[ -n "$power_now" ]]; then
# Determine if power_now is micro- or milliwatts
abs_power_now=${power_now#-} # remove leading '-' if present
if (( abs_power_now > 10000 )); then
# microwatts -> W
power_consumption_watts=$(echo "scale=2; $power_now / 1000000" | bc)
else
# milliwatts -> W
power_consumption_watts=$(echo "scale=2; $power_now / 1000" | bc)
fi
fi
# Decide if charging or discharging
# (If power_now > 0 => charging, < 0 => discharging)
local battery_icon
if [[ -n "$power_now" ]]; then
# numeric check: is it > 0 or < 0?
float_power=$(echo "$power_now" | sed 's/^+//; s/,/./')
# strip any trailing newline, just in case
if (( $(echo "$float_power > 0" | bc -l) )); then
# CHARGING
battery_icon="$BATTERY_CHARGING_ICON"
else
# DISCHARGING - pick icon by capacity
battery_icon=$(pick_battery_icon "$capacity")
fi
else
# Unknown or no power_now => treat as discharging
battery_icon=$(pick_battery_icon "$capacity")
fi
# Build the final string
if [[ -n "$power_consumption_watts" ]]; then
echo "$battery_icon $capacity% (${power_consumption_watts} W)"
else
echo "$battery_icon $capacity%"
fi
return 0
fi
return 1
}
#############################
# Helper to pick icon by capacity
#############################
pick_battery_icon() {
local cap="$1"
# convert to integer
if [ "$cap" -ge 80 ]; then
echo "$BATTERY_FULL_ICON"
elif [ "$cap" -ge 60 ]; then
echo "$BATTERY_3QTR_ICON"
elif [ "$cap" -ge 40 ]; then
echo "$BATTERY_HALF_ICON"
elif [ "$cap" -ge 20 ]; then
echo "$BATTERY_QTR_ICON"
else
echo "$BATTERY_EMPTY_ICON"
fi
}
#############################
# Gather battery info
#############################
get_battery_info_linux_main() {
battery_paths=(
"/sys/class/power_supply/macsmc-battery" # Asahi (M1) Fedora Remix
"/sys/class/power_supply/BAT0" # Standard Linux
"/sys/class/power_supply/BAT1" # Common secondary
)
for path in "${battery_paths[@]}"; do
if [ -d "$path" ]; then
battery_info=$(get_battery_info_linux "$path")
if [ $? -eq 0 ]; then
echo "$battery_info"
return
fi
fi
done
}
#############################
# Main logic
#############################
OS="$(uname)"
case "$OS" in
Darwin)
battery=$(get_battery_info_mac)
;;
Linux)
battery=$(get_battery_info_linux_main)
;;
*)
# Unsupported OS, no output
battery=""
;;
esac
echo "$battery"