# Temperlux

[English](README.md) | [Deutsch](README.de.md) | [हिन्दी](README.hi.md) | [Español](README.es.md) | [Français](README.fr.md) | [العربية](README.ar.md) | [বাংলা](README.bn.md) | [Русский](README.ru.md) | [Português](README.pt.md) | [اردو](README.ur.md) | [Indonesia](README.id.md) | [中文](README.zh.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Türkçe](README.tr.md) | [Italiano](README.it.md) | [Polski](README.pl.md) | [Українська](README.uk.md) | [Nederlands](README.nl.md) | [فارسی](README.fa.md) | [Tiếng Việt](README.vi.md) | [ไทย](README.th.md) | [Bahasa Melayu](README.ms.md) | [Čeština](README.cs.md) | [Magyar](README.hu.md) | [Română](README.ro.md)

[![CI](https://ci.angussoftware.dev/api/badges/RhoMancer/temperlux/status.svg)](https://ci.angussoftware.dev/RhoMancer/temperlux)
[![crates.io](https://img.shields.io/crates/v/temperlux.svg)](https://crates.io/crates/temperlux)
[![License: GPL-3.0-or-later](https://img.shields.io/badge/license-GPL--3.0--or--later-blue.svg)](LICENSE)

Ein Helligkeitsregler für externe (DDC/CI) und interne (Hintergrundbeleuchtung) Bildschirme, geschrieben in Rust mit GTK4/Libadwaita-Oberfläche.

Basierend auf [Luminance](https://github.com/sidevesh/Luminance) von sidevesh — von Grund auf neu geschrieben mit FFI-basiertem DDC für Leistung und testbarer Architektur.

![Temperlux — Angus (dark)](docs/screenshot-angus.png)

## Funktionen

### Bildschirmsteuerung

- **GUI** — Pro-Bildschirm-Helligkeitsregler mit Live-Hardwaresteuerung
- **CLI** — Vollständige Befehlssuite für Skripte und Terminal
- **Multi-Monitor** — Unterstützt jede Kombination aus DDC/CI und Hintergrundbeleuchtung
- **Laptop-Unterstützung** — Interne Hintergrundbeleuchtung automatisch erkannt
- **Hardwareerkennung** — FFI-basierte `libddcutil`-Integration

### Synchronisierungsmodi

Steuern Sie die Helligkeitsbeziehungen über mehrere Bildschirme:

| Modus | Verhalten |
|------|----------|
| **Aus** | Jeder Bildschirm unabhängig |
| **Gleicher Wert** | Alle auf denselben Prozentsatz |
| **Proportional** | Proportionale Helligkeitsverhältnisse |

### Helligkeitsgrenzen

Pro-Bildschirm-Mindest- und Maximalhelligkeit (0–100%):

```bash
# Clamp display 1 to range 20–80%
temperlux caps 1 --min 20 --max 80
```

### Zeitplanung

Automatisieren Sie Helligkeitsänderungen nach Tageszeit, Sonnenaufgang oder -untergang:

```bash
# Dim monitors at sunset
temperlux schedule add --name "Evening" --after-sunset 0 --monitors "all=30"

# Full brightness at sunrise
temperlux schedule add --name "Morning" --after-sunrise 0 --monitors "all=80"

# Specific time
temperlux schedule add --name "Night" --time "23:00" --monitors "ddc:1=10,ddc:2=15"
```

**Sonnenaufgang/Sonnenuntergang-Berechnung**

```bash
temperlux schedule location --lat 41.88 --lon -87.63   # Chicago
temperlux schedule detect-location                       # auto-detect via IP
```

**systemd-Timer-Integration**

```bash
temperlux schedule generate-timers
```

### Bildschirmverwaltung

- **Umbenennen** — benutzerdefinierte Namen bleiben erhalten
- **Neu anordnen** — Reihenfolge in Einstellungen festlegen
- **Aktualisieren** — neu scannen ohne Neustart

### Anzeigeformatierung

```bash
# Show/hide display numbers
temperlux config --show-numbers false

# Toggle 24-hour time format in schedule editor
temperlux config --use-24h true

# Show/hide brightness range labels
temperlux config --show-range-labels true
```

### JSON-Ausgabe

Skriptfreundliche JSON-Ausgabe für waybar, polybar usw.:

```bash
temperlux list --json
```

### Autostart

Optionaler "Bei Anmeldung starten"-Schalter. Installiert eine `.desktop`-Datei.

### Fehlerbehandlung

Fehlermeldungen verschwinden nach 5 Sekunden automatisch.

## Designs

Temperlux enthält 16 Farbdesigns mit unabhängigen Hell-/Dunkelmodus-Wählern.

### Verfügbare Designs

| Theme | Helle Varianten | Dunkle Varianten | Akzent |
|-------|:---:|:---:|--------|
| **Angus (brand)** | Angus (light) | Angus (dark) | Teal `#006A6A` |
| **Catppuccin** | Latte | Frappe, Macchiato, Mocha | Mauve `#8839EF` |
| **Nord** | Nord Polar | Nord | Frost blue `#81A1C1` |
| **Gruvbox** | Gruvbox Light | Gruvbox Dark | Yellow `#D79921` |
| **Solarized** | Solarized Light | Solarized Dark | Blue `#268BD2` |
| **Dracula** | — | Dracula | Purple `#BD93F9` |
| **Rose Pine** | Rose Pine Dawn | Rose Pine, Rose Pine Moon | Pine `#31748F` |

### Screenshots

| Dracula (dark) | Catppuccin Latte (light) |
|:---:|:---:|
| ![Dracula](docs/screenshot-dracula.png) | ![Latte](docs/screenshot-latte.png) |

| Catppuccin Mocha (dark) | Nord (dark) |
|:---:|:---:|
| ![Mocha](docs/screenshot-mocha.png) | ![Nord](docs/screenshot-nord.png) |

| Gruvbox Dark | Angus (brand, dark) |
|:---:|:---:|
| ![Gruvbox](docs/screenshot-gruvbox.png) | ![Angus](docs/screenshot-angus.png) |

## Installation

### Aus dem Quellcode (empfohlen für GUI)

```bash
sudo apt install ddcutil libddcutil-dev libgtk-4-dev libadwaita-1-dev pkg-config

make && sudo make install
```

Dies installiert:
- `temperlux` (CLI) → `/usr/local/bin/`
- `temperlux-gui` (GUI) → `/usr/local/bin/`
- Desktop entry → `/usr/local/share/applications/`
- App icon → `/usr/local/share/icons/hicolor/`

### Aus crates.io

```bash
cargo install temperlux --features gui
```

### Deinstallieren

```bash
sudo make uninstall
```

## Verwendung

### GUI

```bash
temperlux-gui
```

Die GUI bietet:
- Pro-Bildschirm-Helligkeitsregler mit Live-Hardwaresteuerung
- Einstellungsdialog für Synchronisierung, Grenzen, Namen, Designs
- Zeitplan-Editor für Helligkeitsprofile
- Ein-Klick-Aktualisierung für Hotplug-Änderungen

### CLI

```bash
temperlux list
temperlux list --json
temperlux get 1
temperlux set 1 --percent 75
temperlux set --percent 50
temperlux increase --percent 10
temperlux decrease 2 --percent 5
temperlux rename 1 "Left Monitor"
temperlux caps 1 --min 20 --max 80
temperlux sync proportional
temperlux autostart enable
```

### Zeitplanung (CLI)

```bash
temperlux schedule list
temperlux schedule add --name "Evening" --after-sunset 0 --monitors "all=30"
temperlux schedule delete "Evening"
temperlux schedule apply
temperlux schedule generate-timers
```

### Shell-Vervollständigungen

```bash
temperlux completions bash > ~/.local/share/bash-completion/completions/temperlux
temperlux completions zsh > ~/.zfunc/_temperlux
```

## Erstellen

```bash
cargo build --release --features gui
cargo test
cargo clippy -- -D warnings
```

### Anforderungen

- Rust 1.82+
- `libddcutil` 2.0+ and development headers
- GTK4 + Libadwaita 1.2+ (for GUI feature)
- `pkg-config`

## Architektur

```
src/
  main.rs            CLI entry point
  cli.rs             clap argument definitions + shell completions
  i18n.rs            Internationalization (tr/tr_args, locale normalization)
  settings.rs        JSON config (~/.config/temperlux/settings.json)
  schedule/          Schedule profiles, sunrise/sunset, systemd timers
  display/           DdcService (FFI libddcutil), backlight, display manager
  gui/               GTK4 window, themes, schedule UI, custom widgets
locales/             Translation files (15 languages)
```

### Testen

Die Codebasis hat 185 Tests mit Mock-basierter Architektur. Der gesamte Hardwarezugriff ist hinter Traits, was vollständiges Unit-Testing ohne physische Bildschirme ermöglicht.

```bash
cargo test                           # run all tests
cargo test -- --test-threads=1       # serial (required for locale tests)
```

## Konfiguration

Konfigurationsdatei: `~/.config/temperlux/settings.json`

| Feld | Typ | Standard | Beschreibung |
|-------|------|---------|-------------|
| `sync_mode` | string | `"off"` | Helligkeitssynchronisierung |
| `show_display_numbers` | bool | `true` | Indexnummern anzeigen |
| `autostart` | bool | `false` | Bei Anmeldung starten |
| `theme_mode` | string | `"system"` | UI-Farbmodus |
| `display_order` | string[] | — | Bildschirmanordnung |

## CI/CD

- Erstellen + Testen — jeder Push auf master
- Clippy — Lint mit `-D warnings`
- Abdeckungs-Grenze — 80% erforderlich
- Release — Tag-Push löst Release aus

## Diagnose

```bash
ddc-diag
```

Prüft libddcutil-Version, I2C-Berechtigungen und DDC/CI-Fähigkeit.

## Lizenz

GPL-3.0-or-later. See [LICENSE](LICENSE) and [NOTICE](NOTICE).

Dieses Projekt ist ein Rewrite von [Luminance](https://github.com/sidevesh/Luminance) von sidevesh.

Community-Designs sind einzeln unter MIT lizenziert:
- [Catppuccin](https://github.com/catppuccin/catppuccin) · [Nord](https://github.com/nordtheme/nord) · [Gruvbox](https://github.com/morhetz/gruvbox) · [Solarized](https://github.com/altercation/solarized) · [Dracula](https://github.com/dracula/dracula-theme) · [Rose Pine](https://github.com/rose-pine/palette)
