An ultra-lightweight, resource-efficient screen color temperature daemon written in Rust. It automatically adjusts your display's color temperature throughout the day with smooth transitions while running in the background with near-zero CPU usage.
luma automatically detects your display environment and uses the most appropriate backend:
| Environment | Backend |
|---|---|
| Wayland (Hyprland) | High-performance GLSL 300 ES shader injection via hyprctl |
| Wayland (KDE Plasma) | Native D-Bus integration with KWin Night Light |
| X11 | Native X11 (x11rb) + RandR hardware gamma control |
git clone https://github.com/hakuxyz/luma.git
cd lumaMake sure the Rust toolchain is installed, then run:
cargo build --releaseCopy the binary into your $PATH:
sudo install -Dm755 target/release/luma /usr/bin/lumaReload the user systemd daemon:
systemctl --user daemon-reloadsystemctl --user enable --now lumaluma reads its configuration from:
~/.config/luma/config.toml
Example:
day_temp = 6500
night_temp = 3500
start_time = "20:00"
end_time = "06:00"
transition_mins = 60journalctl --user -u luma -fsystemctl --user restart lumasystemctl --user stop luma
⚠️ Beta Software
lumais still under active development. Bugs and unexpected behavior are possible, particularly on uncommon desktop environments.
To work around systemd user services not always inheriting the correct display environment, luma attempts multiple Wayland backends. In unusual or nested compositor setups, this may produce unexpected behavior.
If your user systemd instance strips environment variables such as WAYLAND_DISPLAY or HYPRLAND_INSTANCE_SIGNATURE, luma may be unable to locate the active display session.
The Hyprland backend relies on injecting a custom GLSL shader. Future Hyprland releases that change internal shader interfaces may temporarily break compatibility until luma is updated.
If shader compilation fails, check the logs:
journalctl --user -u luma -f