"""Control the hyprsunset daemon: status, restart, live preview via hyprctl.""" from __future__ import annotations import shlex import subprocess from typing import Optional def is_running() -> bool: return subprocess.run( ["pgrep", "-x", "hyprsunset"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ).returncode == 0 def live_preview( temperature: Optional[int] = None, gamma: Optional[float] = None, identity: bool = False, ) -> None: """Push values to the running daemon over IPC. No file write, no restart.""" if identity: subprocess.run(["hyprctl", "hyprsunset", "identity"], check=False) return if temperature is not None: subprocess.run( ["hyprctl", "hyprsunset", "temperature", str(temperature)], check=False, ) if gamma is not None: # IPC gamma is integer percent; profile gamma is a 0-2 float. pct = str(round(gamma * 100)) subprocess.run(["hyprctl", "hyprsunset", "gamma", pct], check=False) def restart(command: str = "hyprsunset") -> None: subprocess.run(["pkill", "hyprsunset"], check=False) subprocess.Popen( shlex.split(command), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, start_new_session=True, )