diff --git a/CLAUDE.md b/CLAUDE.md index 9f18c55..fc26ab2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,9 +20,10 @@ Laptops mit `charge_control_end_threshold`-Support (ThinkPad, Framework, etc.) e ## Nightlight (Blaufilter) -Waybar-Toggle für wlsunset (Wayland-nativer Blaufilter): -- `wlsunset` startet per Niri-Autostart mit fester Nacht-Temperatur (5000K) -- Klick auf das Nightlight-Modul in `group/brightness` toggled wlsunset an/aus (kill/restart) +Waybar-Toggle für wlsunset (Wayland-nativer Blaufilter), persistenter Zustand via systemd: +- `wlsunset.service` (systemd User-Service) mit `After=kanshi.service` — startet erst wenn alle Outputs konfiguriert sind +- Klick auf das Nightlight-Modul in `group/brightness` toggled wlsunset an/aus (`enable --now` / `disable --now`) +- Zustand überlebt Reboots (enabled/disabled bleibt bestehen) - Aktiver Zustand zeigt 󰌵 in Catppuccin Yellow, inaktiv 󰌶 in Standard-Textfarbe - Signal SIGRTMIN+11 für sofortiges Waybar-Refresh - Scripts: `moonarch-nightlight` (Toggle), `moonarch-waybar-nightlight` (Status-JSON) diff --git a/defaults/bin/moonarch-nightlight b/defaults/bin/moonarch-nightlight index 3704cac..65c3d42 100755 --- a/defaults/bin/moonarch-nightlight +++ b/defaults/bin/moonarch-nightlight @@ -1,12 +1,11 @@ #!/bin/bash -# ABOUTME: Toggles wlsunset night light on/off. -# ABOUTME: Kills or restarts wlsunset process, signals waybar for refresh. +# ABOUTME: Toggles wlsunset night light on/off via systemd user service. +# ABOUTME: Persists state across reboots (enable/disable), signals waybar for refresh. -if pgrep -x wlsunset > /dev/null; then - pkill -x wlsunset +if systemctl --user is-active --quiet wlsunset; then + systemctl --user disable --now wlsunset else - wlsunset -T 6500 -t 5000 -S 00:00 -s 00:01 & - disown + systemctl --user enable --now wlsunset fi pkill -RTMIN+11 waybar diff --git a/defaults/bin/moonarch-waybar-nightlight b/defaults/bin/moonarch-waybar-nightlight index 5b4d4bd..6717cc5 100755 --- a/defaults/bin/moonarch-waybar-nightlight +++ b/defaults/bin/moonarch-waybar-nightlight @@ -1,8 +1,8 @@ #!/bin/bash # ABOUTME: Outputs JSON status for waybar nightlight module. -# ABOUTME: Shows warm icon when wlsunset is active, cool icon when off. +# ABOUTME: Checks wlsunset systemd service, shows warm icon when active. -if pgrep -x wlsunset > /dev/null; then +if systemctl --user is-active --quiet wlsunset; then jq -nc '{text: "󰌵", alt: "on", tooltip: "Nightlight: An (5000K)", class: "on"}' else jq -nc '{text: "󰌶", alt: "off", tooltip: "Nightlight: Aus", class: "off"}' diff --git a/defaults/etc/systemd/user/wlsunset.service b/defaults/etc/systemd/user/wlsunset.service new file mode 100644 index 0000000..dd92bac --- /dev/null +++ b/defaults/etc/systemd/user/wlsunset.service @@ -0,0 +1,19 @@ +# ABOUTME: systemd user service for wlsunset night light (blue light filter). +# ABOUTME: Starts after kanshi to ensure all outputs are configured. + +[Unit] +Description=Wlsunset night light (blue light filter) +Documentation=man:wlsunset(1) +PartOf=graphical-session.target +After=graphical-session.target kanshi.service + +[Service] +Type=simple +# Give kanshi time to configure all outputs before wlsunset captures them +ExecStartPre=/bin/sleep 2 +ExecStart=/usr/bin/wlsunset -T 6500 -t 5000 -S 00:00 -s 00:01 +Restart=on-failure +RestartSec=3 + +[Install] +WantedBy=graphical-session.target diff --git a/defaults/xdg/niri/config.kdl b/defaults/xdg/niri/config.kdl index c8c9a87..58de34b 100644 --- a/defaults/xdg/niri/config.kdl +++ b/defaults/xdg/niri/config.kdl @@ -86,7 +86,7 @@ spawn-at-startup "nm-applet" "--indicator" spawn-sh-at-startup "waypaper --restore" // spawn-sh-at-startup "nemo . &> /dev/null &" spawn-sh-at-startup "foot --server" -spawn-at-startup "wlsunset" "-T" "6500" "-t" "5000" "-S" "00:00" "-s" "00:01" +// wlsunset is managed via systemd user service (wlsunset.service) // Clipboard history managed by cliphist.service (systemd user service) hotkey-overlay { diff --git a/scripts/moonarch-doctor b/scripts/moonarch-doctor index 6025a0d..522b52d 100755 --- a/scripts/moonarch-doctor +++ b/scripts/moonarch-doctor @@ -178,7 +178,7 @@ section "User Services" if [[ $EUID -eq 0 ]]; then warn "Running as root — skipping user service checks" else - for svc in kanshi stasis cliphist-text cliphist-image; do + for svc in kanshi wlsunset stasis cliphist-text cliphist-image; do check_user_service "$svc" done fi diff --git a/scripts/post-install.sh b/scripts/post-install.sh index 87e2f82..c20657d 100755 --- a/scripts/post-install.sh +++ b/scripts/post-install.sh @@ -124,6 +124,7 @@ fi log "Enabling systemd user services..." USER_SERVICES=( "kanshi" + "wlsunset" "stasis" "cliphist-text" "cliphist-image" diff --git a/scripts/transform.sh b/scripts/transform.sh index bc06636..ff6157d 100755 --- a/scripts/transform.sh +++ b/scripts/transform.sh @@ -345,6 +345,7 @@ echo "source /etc/zsh/zshrc.moonarch" >> "$HOME/.zshrc" log "Enabling systemd user services..." USER_SERVICES=( "kanshi" + "wlsunset" "stasis" "cliphist-text" "cliphist-image"