initial commit
This commit is contained in:
Executable
+85
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
# ---------------------------------------------------------------------------
|
||||
# Launch one polybar instance per connected monitor.
|
||||
# Hardware-specific values are detected here and passed to polybar as
|
||||
# environment variables, so config.ini stays machine-independent.
|
||||
# ---------------------------------------------------------------------------
|
||||
set -uo pipefail
|
||||
|
||||
CONFIG="$HOME/.config/polybar/config.ini"
|
||||
LOG="${XDG_CACHE_HOME:-$HOME/.cache}/polybar.log"
|
||||
|
||||
mkdir -p "$(dirname "$LOG")"
|
||||
|
||||
# --- stop any running instances and wait for them to die -------------------
|
||||
pkill -x polybar >/dev/null 2>&1 || true
|
||||
for _ in {1..20}; do
|
||||
pgrep -x polybar >/dev/null || break
|
||||
sleep 0.1
|
||||
done
|
||||
# Anything still alive gets the hammer.
|
||||
pgrep -x polybar >/dev/null && pkill -9 -x polybar
|
||||
|
||||
# --- hardware detection ----------------------------------------------------
|
||||
# Battery + AC adapter
|
||||
BATTERY="$(ls -1 /sys/class/power_supply 2>/dev/null | grep -m1 '^BAT' || true)"
|
||||
ADAPTER="$(ls -1 /sys/class/power_supply 2>/dev/null | grep -m1 -E '^(AC|ADP|ACAD)' || true)"
|
||||
export BATTERY="${BATTERY:-BAT0}"
|
||||
export ADAPTER="${ADAPTER:-AC}"
|
||||
|
||||
# Backlight device (intel_backlight, amdgpu_bl0, nvidia_0, …)
|
||||
BACKLIGHT="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1 || true)"
|
||||
export BACKLIGHT="${BACKLIGHT:-intel_backlight}"
|
||||
|
||||
# Network interfaces: wireless ones have a /sys/class/net/*/wireless dir
|
||||
WLAN_IFACE=""
|
||||
ETH_IFACE=""
|
||||
for iface in /sys/class/net/*; do
|
||||
name="$(basename "$iface")"
|
||||
[[ "$name" == "lo" ]] && continue
|
||||
if [[ -d "$iface/wireless" ]]; then
|
||||
[[ -z "$WLAN_IFACE" ]] && WLAN_IFACE="$name"
|
||||
else
|
||||
[[ -z "$ETH_IFACE" ]] && ETH_IFACE="$name"
|
||||
fi
|
||||
done
|
||||
export WLAN_IFACE ETH_IFACE
|
||||
|
||||
# --- module pruning --------------------------------------------------------
|
||||
# Desktops have no battery/backlight; leaving those modules enabled makes
|
||||
# polybar spam the log, so build the right-hand module list dynamically.
|
||||
MODULES_RIGHT="filesystem memory cpu temperature"
|
||||
[[ -d "/sys/class/backlight/$BACKLIGHT" ]] && MODULES_RIGHT+=" backlight"
|
||||
MODULES_RIGHT+=" pulseaudio"
|
||||
[[ -n "$WLAN_IFACE" ]] && MODULES_RIGHT+=" wlan"
|
||||
[[ -n "$ETH_IFACE" ]] && MODULES_RIGHT+=" eth"
|
||||
[[ -d "/sys/class/power_supply/$BATTERY" ]] && MODULES_RIGHT+=" battery"
|
||||
MODULES_RIGHT+=" systray"
|
||||
export MODULES_RIGHT
|
||||
|
||||
# --- launch ----------------------------------------------------------------
|
||||
{
|
||||
echo
|
||||
echo "=== polybar launch $(date -Is) ==="
|
||||
echo "battery=$BATTERY adapter=$ADAPTER backlight=$BACKLIGHT wlan=${WLAN_IFACE:-none} eth=${ETH_IFACE:-none}"
|
||||
echo "modules-right=$MODULES_RIGHT"
|
||||
} >>"$LOG"
|
||||
|
||||
if command -v polybar >/dev/null && polybar --list-monitors >/dev/null 2>&1; then
|
||||
# The tray can only live on one bar; give it to the primary monitor.
|
||||
primary="$(polybar --list-monitors | grep -m1 '(primary)' | cut -d: -f1)"
|
||||
while IFS= read -r line; do
|
||||
m="${line%%:*}"
|
||||
[[ -z "$m" ]] && continue
|
||||
if [[ -n "$primary" && "$m" != "$primary" ]]; then
|
||||
MONITOR="$m" MODULES_RIGHT="${MODULES_RIGHT/ systray/}" \
|
||||
polybar --reload main --config="$CONFIG" >>"$LOG" 2>&1 &
|
||||
else
|
||||
MONITOR="$m" polybar --reload main --config="$CONFIG" >>"$LOG" 2>&1 &
|
||||
fi
|
||||
done < <(polybar --list-monitors)
|
||||
else
|
||||
polybar --reload main --config="$CONFIG" >>"$LOG" 2>&1 &
|
||||
fi
|
||||
|
||||
echo "polybar launched" >>"$LOG"
|
||||
Reference in New Issue
Block a user