updated waybar config

This commit is contained in:
2025-09-19 00:42:12 +02:00
parent db5293a57d
commit 3ca717768a
7 changed files with 537 additions and 553 deletions

View File

@@ -0,0 +1,136 @@
#!/usr/bin/env bash
set -euo pipefail
CONF="${XDG_CONFIG_HOME:-$HOME/.config}/hyprsunset/config"
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/hyprsunset"
LOG_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/hyprsunset"
AUTO_FILE="$STATE_DIR/auto" # "1" = automation ON, "0" = OFF
TEMP_FILE="$STATE_DIR/temp" # last manual/night temp persisted
MODE_FILE="$STATE_DIR/mode" # "day" or "night"
mkdir -p "$STATE_DIR" "$LOG_DIR"
# Defaults
LAT="52.5200"; LON="13.4050"
TEMP_DAY=6500; TEMP_NIGHT=3800
RAMP_DOWN_MIN=45; RAMP_UP_MIN=35
STEP_K=100
FALLBACK_SUNSET="20:30"; FALLBACK_SUNRISE="06:30"
# Load config
[ -r "$CONF" ] && source "$CONF"
cmd() { hyprctl dispatch exec "$1" >/dev/null 2>&1 || true; }
start_hyprsunset() {
local t="$1"
echo -n "$t" > "$TEMP_FILE"
cmd "hyprsunset -t $t"
}
stop_hyprsunset() {
cmd "hyprsunset -x"
pkill -x hyprsunset >/dev/null 2>&1 || true
}
# Compute ramp steps between a and b over minutes, step size STEP_K
ramp_between() {
local from="$1" to="$2" minutes="$3"
local step="${STEP_K}"
local delta=$(( to - from ))
local sign=1
(( delta < 0 )) && sign=-1
local steps=$(( (delta*sign + step - 1) / step )) # ceil
[ "$steps" -lt 1 ] && steps=1
local sleep_s=$(( (minutes*60) / steps ))
local t="$from"
for ((i=1;i<=steps;i++)); do
t=$(( from + sign*i*step ))
# clamp
(( sign == 1 && t > to )) && t="$to"
(( sign == -1 && t < to )) && t="$to"
start_hyprsunset "$t"
sleep "$sleep_s"
done
}
now_hhmm() { date +%H:%M; }
sec_until() {
# returns seconds until HH:MM tomorrow/ today
local target="$1"
local now_s=$(date +%s)
local tgt_s=$(date -d "$(date +%F) $target" +%s)
if (( tgt_s <= now_s )); then
tgt_s=$(( tgt_s + 86400 ))
fi
echo $(( tgt_s - now_s ))
}
have_sunwait() { command -v sunwait >/dev/null 2>&1; }
# Initialize state defaults if missing
[ -r "$AUTO_FILE" ] || echo -n "1" > "$AUTO_FILE" # default: automation ON
[ -r "$TEMP_FILE" ] || echo -n "$TEMP_NIGHT" > "$TEMP_FILE"
[ -r "$MODE_FILE" ] || echo -n "day" > "$MODE_FILE"
log() { printf "[hyprsunset] %s\n" "$*" >&2; }
while :; do
# If automation is OFF, just sleep and retry
if [ "$(cat "$AUTO_FILE" 2>/dev/null || echo 1)" != "1" ]; then
sleep 30
continue
fi
if have_sunwait; then
# Use sunwait to block until the next event
# Decide current solar state quickly
# sunwait 'day' exits 0 if sun is up; 'night' if down
if sunwait day "$LAT" "$LON" >/dev/null 2>&1; then
echo -n "day" > "$MODE_FILE"
# Wait for sunset, then ramp down
log "waiting for SUNSET via sunwait…"
sunwait set "$LAT" "$LON" >/dev/null 2>&1
[ "$(cat "$AUTO_FILE")" = "1" ] || continue
log "SUNSET reached → ramp down ${TEMP_DAY}${TEMP_NIGHT} over ${RAMP_DOWN_MIN}m"
ramp_between "$TEMP_DAY" "$TEMP_NIGHT" "$RAMP_DOWN_MIN"
echo -n "night" > "$MODE_FILE"
# Stay in night until sunrise
log "waiting for SUNRISE via sunwait…"
sunwait rise "$LAT" "$LON" >/dev/null 2>&1
[ "$(cat "$AUTO_FILE")" = "1" ] || continue
log "SUNRISE reached → ramp up ${TEMP_NIGHT}${TEMP_DAY} over ${RAMP_UP_MIN}m"
ramp_between "$TEMP_NIGHT" "$TEMP_DAY" "$RAMP_UP_MIN"
echo -n "day" > "$MODE_FILE"
else
echo -n "night" > "$MODE_FILE"
# We are in night → ramp to night if not already, then wait sunrise
log "night now → ensure at night temp, then wait SUNRISE"
start_hyprsunset "$TEMP_NIGHT"
sunwait rise "$LAT" "$LON" >/dev/null 2>&1
[ "$(cat "$AUTO_FILE")" = "1" ] || continue
log "SUNRISE → ramp up ${TEMP_NIGHT}${TEMP_DAY} over ${RAMP_UP_MIN}m"
ramp_between "$TEMP_NIGHT" "$TEMP_DAY" "$RAMP_UP_MIN"
echo -n "day" > "$MODE_FILE"
fi
else
# Fallback fixed schedule
cur="$(now_hhmm)"
# If day now (before fallback sunset), wait sunset
if [[ "$cur" < "$FALLBACK_SUNSET" && "$cur" > "$FALLBACK_SUNRISE" ]]; then
echo -n "day" > "$MODE_FILE"
secs=$(sec_until "$FALLBACK_SUNSET")
log "fallback: waiting $secs s until sunset ${FALLBACK_SUNSET}"
sleep "$secs"
[ "$(cat "$AUTO_FILE")" = "1" ] || continue
ramp_between "$TEMP_DAY" "$TEMP_NIGHT" "$RAMP_DOWN_MIN"
echo -n "night" > "$MODE_FILE"
else
echo -n "night" > "$MODE_FILE"
secs=$(sec_until "$FALLBACK_SUNRISE")
log "fallback: waiting $secs s until sunrise ${FALLBACK_SUNRISE}"
sleep "$secs"
[ "$(cat "$AUTO_FILE")" = "1" ] || continue
ramp_between "$TEMP_NIGHT" "$TEMP_DAY" "$RAMP_UP_MIN"
echo -n "day" > "$MODE_FILE"
fi
fi
done

View File

@@ -0,0 +1,89 @@
#!/usr/bin/env bash
set -euo pipefail
CONF="${XDG_CONFIG_HOME:-$HOME/.config}/hyprsunset/config"
STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/hyprsunset"
AUTO_FILE="$STATE_DIR/auto" # "1"=auto on, "0"=auto off
TEMP_FILE="$STATE_DIR/temp" # last set temp (manual/night)
MODE_FILE="$STATE_DIR/mode" # "day"/"night" (best effort)
mkdir -p "$STATE_DIR"
# Defaults (overridden by CONF)
DEFAULT_TEMP=5500
TEMP_DAY=6500
TEMP_NIGHT=2500
[ -r "$CONF" ] && source "$CONF"
[ -r "$TEMP_FILE" ] || echo -n "${TEMP_NIGHT:-$DEFAULT_TEMP}" > "$TEMP_FILE"
[ -r "$AUTO_FILE" ] || echo -n "1" > "$AUTO_FILE"
[ -r "$MODE_FILE" ] || echo -n "day" > "$MODE_FILE"
is_running() { pgrep -x hyprsunset >/dev/null 2>&1; }
cur_temp() {
if is_running; then
pid="$(pgrep -x hyprsunset | head -n1 || true)"
if [ -n "${pid:-}" ] && [ -r "/proc/$pid/cmdline" ]; then
t="$(tr '\0' ' ' < "/proc/$pid/cmdline" | sed -n 's/.*-t \([0-9]\+\).*/\1/p')"
[ -n "$t" ] && { echo "$t"; return; }
fi
fi
cat "$TEMP_FILE"
}
set_temp() {
local t="$1"
echo -n "$t" > "$TEMP_FILE"
hyprctl dispatch exec "hyprsunset -t $t" >/dev/null 2>&1 || true
}
disable() {
hyprctl dispatch exec "hyprsunset -x" >/dev/null 2>&1 || true
pkill -x hyprsunset >/dev/null 2>&1 || true
}
print_json() {
local auto="$(cat "$AUTO_FILE")"
local t="$(cur_temp)"
local mode="$(cat "$MODE_FILE" 2>/dev/null || echo "day")"
if [ "$auto" = "1" ]; then
printf '{"text":" %sK","class":"auto %s","tooltip":"Hyprsunset Auto (%s) — %sK\\nLeft-click: Toggle auto OFF\\nRight-click: Toggle manual on/off\\nScroll: +/- 200K (manual)"}\n' "$t" "$mode" "$mode" "$t"
else
if is_running; then
printf '{"text":" %sK","class":"manual on","tooltip":"Hyprsunset Manual ON — %sK\\nLeft-click: Toggle auto ON\\nRight-click: Turn OFF\\nScroll: +/- 200K"}\n' "$t" "$t"
else
local last="$(cat "$TEMP_FILE")"
printf '{"text":" Off","class":"manual off","tooltip":"Hyprsunset Manual OFF — last %sK\\nLeft-click: Toggle auto ON\\nRight-click: Turn ON (%sK)\\nScroll: +/- 200K"}\n' "$last" "$last"
fi
fi
}
case "${1:---print}" in
--print) print_json ;;
--auto-on) echo -n "1" > "$AUTO_FILE" ; print_json ;;
--auto-off) echo -n "0" > "$AUTO_FILE" ; print_json ;;
--toggle-auto)
if [ "$(cat "$AUTO_FILE")" = "1" ]; then
# Turning auto OFF → restore last manual temp and keep running
echo -n "0" > "$AUTO_FILE"
set_temp "$(cat "$TEMP_FILE")"
else
# Turning auto ON → let daemon steer; ensure hyprsunset is running at current temp (keeps smoothness)
echo -n "1" > "$AUTO_FILE"
set_temp "$(cur_temp)"
fi
print_json
;;
--toggle)
# Manual on/off (does not change auto flag)
if is_running; then
disable
else
set_temp "$(cat "$TEMP_FILE")"
fi
print_json
;;
--set)
t="${2:-$DEFAULT_TEMP}"
echo -n "$t" > "$TEMP_FILE"
set_temp "$t"
print_json
;;
*) echo "Usage: $0 [--print|--toggle-auto|--auto-on|--auto-off|--toggle|--set TEMP]" >&2; exit 1 ;;
esac