# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] — 2026-06-19

Major release: full theming system with 16 color palettes and dual light/dark theme pickers.

### Added
- **Angus brand color integration** — all 16 Material 3 design tokens mapped to libadwaita's color system via `@define-color` and CSS custom properties at `STYLE_PROVIDER_PRIORITY_USER`
- **Theme mode dropdown** — System / Light / Dark preference in Preferences dialog, using libadwaita `ColorScheme`
- **Community color themes** — 14 themes from 6 popular open-source palettes:
  - Catppuccin (Latte, Frappe, Macchiato, Mocha)
  - Nord (Nord, Nord Polar)
  - Gruvbox (Dark, Light)
  - Solarized (Dark, Light)
  - Dracula
  - Rose Pine (Base, Moon, Dawn)
- **Dual light/dark theme pickers** — separate dropdowns for light mode and dark mode color palettes, so users can mix-and-match (e.g. Catppuccin Latte for light, Dracula for dark)
- **Mismatch warnings** — contextual warning labels appear when a dark-only theme is selected for light mode (or vice versa)
- **Live theme switching** — no restart required; CSS providers reload instantly on theme or mode change
- **CSS provider reload on dark_notify** — connects to libadwaita's `StyleManager::dark_notify` signal to reload the correct theme CSS when system dark mode changes
- **180 tests** (up from 105)

### Changed
- Minimum requirements: GTK4 + libadwaita 1.2+ (unchanged), Rust 1.82+ (unchanged)
- Settings struct gains `light_theme`, `dark_theme`, and `theme_mode` fields (backward-compatible via `#[serde(default)]`)

### Architecture
- `src/gui/theme.rs` — brand color generation, CSS provider management, theme switching
- `src/gui/themes/*.css` — 14 embedded community theme CSS files (compile-time `include_str!`)
- `src/settings.rs` — `ColorTheme` enum (16 variants), `ThemeMode` enum, classification helpers

### Credits
- Community themes sourced from [Angus-Software-Theming](https://github.com/RhoMancer/Angus-Software-Theming) pipeline:
  - [Catppuccin](https://github.com/catppuccin/catppuccin) (MIT)
  - [Nord](https://github.com/nordtheme/nord) (MIT)
  - [Gruvbox](https://github.com/morhetz/gruvbox) (MIT)
  - [Solarized](https://github.com/altercation/solarized) (MIT)
  - [Dracula](https://github.com/dracula/dracula-theme) (MIT)
  - [Rose Pine](https://github.com/rose-pine/palette) (MIT)

## [1.0.0] — 2026-06-01

First stable release.

### Added
- **GUI** — per-display brightness sliders with live DDC/CI hardware control (GTK4/Libadwaita)
- **CLI** — `list`, `get`, `set`, `increase`, `decrease`, `rename` commands
- **JSON output** — `temperlux list --json` for scripting/waybar/polybar integration
- **Shell completions** — `temperlux completions bash|zsh|fish|elvish`
- **adw::AboutWindow** — proper GNOME About dialog with logo, credits, license
- **SVG app icon** — sun/brightness theme with Angus Software brand colors
- **Autostart** — "Start on login" toggle in Preferences
- **Sync modes** — Off, Same Value, or Proportional across all displays
- **Min/Max caps** — per-display brightness range limits
- **Display rename** — custom names persisted in config
- **Display reorder** — arrow buttons in Preferences; order persists across restarts
- **Refresh** — rescan for display changes without restarting
- **Error auto-expiry** — error messages auto-clear after 5 seconds
- **Unified detection** — CLI and GUI share a single `DdcService` path (FFI libddcutil)
- **Parallel DDC writes** — command coalescing for responsive sliders
- **`ddc-diag`** — diagnostic binary for display detection debugging
- **CI/CD** — build, test, clippy, coverage tollgate (80% LINE), diff coverage, release pipeline
- **CD** — tag push → GitHub Release (binary tarball) + crates.io publish
- **105 tests** with mock-based architecture
- **Makefile** with install/uninstall targets
- **CONTRIBUTING.md** with development guide

### Security
- Compile-time write gate in hw-test binary
- I2C devices only accessible in hw-test step (push to master only)
- Raw value clamping to 0..65535 before DDC writes

### Credits
- Based on [Luminance](https://github.com/sidevesh/Luminance) by sidevesh

[1.0.0]: https://github.com/RhoMancer/temperlux/releases/tag/v1.0.0
[2.0.0]: https://github.com/RhoMancer/temperlux/releases/tag/v2.0.0
