[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)

# Temperlux

بیرونی (DDC/CI) اور اندرونی (بیک لائٹ) ڈسپلے کے لیے ایک چمک کنٹرولر، Rust میں GTK4/Libadwaita GUI کے ساتھ لکھا گیا۔ یہ sidevesh کے [Luminance](https://github.com/sidevesh/Luminance) پر مبنی ہے — کارکردگی اور قابلِ آزمائش فن تعمیر کے لیے FFI-پر مبنی DDC کے ساتھ صفر سے دوبارہ لکھا گیا۔

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

## خصوصیات

### ڈسپلے کنٹرول

- **GUI** — ہر ڈسپلے کے لیے چمک سلائیڈر، لائیو ہارڈویئر کنٹرول کے ساتھ
- **CLI** — اسکرپٹنگ اور ٹرمینل استعمال کے لیے مکمل کمانڈ سیٹ
- **ملٹی-مانیٹر** — DDC/CI بیرونی ڈسپلے اور اندرونی بیک لائٹ کی کوئی بھی ترکیب کی سپورٹ
- **لیپ ٹاپ سپورٹ** — `/sys/class/backlight` کے ذریعے اندرونی بیک لائٹ ڈسپلے کی خودکار تشخیص
- **ہارڈویئر تشخیص** — قابلِ اعتماد ڈسپلے گنتی کے لیے FFI-پر مبنی `libddcutil` انضمام

### سنک موڈ

متعدد ڈسپلے میں چمک کے تعلقات کو کنٹرول کریں:

| موڈ | رویہ |
|------|----------|
| **بند** | ہر ڈسپلے آزادانہ طور پر کنٹرول |
| **ایک ہی قدر** | تمام ڈسپلے ایک ہی چمک فیصد پر سیٹ |
| **تناسبی** | ڈسپلے تناسبی چمک تناسب برقرار رکھتے ہیں |

### چمک کی حدیں

ہر ڈسپلے کے لیے کم سے کم اور زیادہ سے زیادہ چمک کی حدود (0–100%) سیٹ کریں۔ حدود GUI سلائیڈر اور CLI کمانڈز دونوں پر لاگو ہوتی ہیں:

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

### شیڈولنگ

دن کے وقت، طلوع آفتاب یا غروب آفتاب کی بنیاد پر چمک کی تبدیلیوں کو خودکار کریں:

```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"
```

**طلوع/غروب آفتاب کی تخمینہ** — درست شمسی توقیت کے لیے اپنی جغرافیائی محل وقوع سیٹ کریں:

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

**systemd ٹائمر انضمام** — ہیڈلیس شیڈولنگ کے لیے یوزر ٹائمر یونٹس بنائیں:

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

### ڈسپلے انتظام

- **نام تبدیل** — حسب ضرورت ڈسپلے نام سیشنز میں محفوظ رہتے ہیں
- **دوبارہ ترتیب** — ترجیحات میں ڈسپلے کو ڈریگ-آرڈر کریں؛ ترتیب دوبارہ شروع ہونے پر محفوظ رہتی ہے
- **ریفریش** — دوبارہ شروع کیے بغیر ڈسپلے ہاٹ پلگ تبدیلیوں کے لیے دوبارہ اسکین کریں

### ڈسپلے فارمیٹنگ

```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 آؤٹ پٹ

waybar، polybar اور دیگر انضمام کے لیے اسکرپٹ-دوست JSON آؤٹ پٹ:

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

```json
[
  {"id": "ddc:1", "name": "Left Monitor", "brightness": 75, "type": "ddc"},
  {"id": "ddc:2", "name": "Right Monitor", "brightness": 60, "type": "ddc"},
  {"id": "backlight:intel_backlight", "name": "Built-in", "brightness": 100, "type": "backlight"}
]
```

### آٹو اسٹارٹ

ترجیحات میں اختیاری "لاگ اِن پر شروع کریں" ٹوگل۔ `~/.config/autostart/` میں ایک `.desktop` فائل انسٹال کرتا ہے۔

### خامی کا انتظام

غلطی کے پیغامات 5 سیکنڈ بعد خود بخود ختم ہو جاتے ہیں — انہیں دستی طور پر برطرف کرنے کی ضرورت نہیں۔

## تھیمنگ

Temperlux میں 16 رنگ تھیم شامل ہیں جس میں آزاد لائٹ اور ڈارک موڈ پکرز ہیں۔ ترجیحات میں ہر موڈ کے لیے الگ پلیٹ منتخب کریں — تھیم دوبارہ شروع کیے بغیر فوری تبدیل ہوتے ہیں۔

### دستیاب تھیم

| تھیم | لائٹ ویریئنٹ | ڈارک ویریئنٹ | ایکسنٹ |
|-------|:---:|:---:|--------|
| **Angus (برانڈ)** | 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` |

### اسکرین شاٹس

| 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) |

## انسٹال

### سورس سے (GUI کے لیے تجویز کردہ)

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

# Build and install (CLI + GUI)
make && sudo make install
```

یہ انسٹال کرتا ہے:
- `temperlux` (CLI) → `/usr/local/bin/`
- `temperlux-gui` (GUI) → `/usr/local/bin/`
- Desktop entry → `/usr/local/share/applications/`
- App icon → `/usr/local/share/icons/hicolor/`

### crates.io سے

```bash
# CLI only (no GUI)
cargo install temperlux

# With GUI
cargo install temperlux --features gui
```

### ان انسٹال

```bash
sudo make uninstall
```

## استعمال

### GUI

```bash
temperlux-gui
```

GUI فراہم کرتا ہے:
- ہر ڈسپلے کے لیے چمک سلائیڈر، لائیو ہارڈویئر کنٹرول کے ساتھ
- سنک موڈ، حدود، ڈسپلے نام، ترتیب اور تھیم کے لیے ترجیحات ڈائیلاگ
- چمک پروفائل بنانے اور انتظام کرنے کے لیے شیڈول ایڈیٹر
- ڈسپلے ہاٹ پلگ تبدیلیوں کے لیے ایک کلک ریفریش

### CLI

```bash
# List all displays
temperlux list

# JSON output for scripting
temperlux list --json

# Get brightness of display 1
temperlux get 1

# Set display 1 to 75%
temperlux set 1 --percent 75

# Set all displays to 50%
temperlux set --percent 50

# Increase all displays by 10%
temperlux increase --percent 10

# Decrease display 2 by 5%
temperlux decrease 2 --percent 5

# Rename a display
temperlux rename 1 "Left Monitor"

# Set brightness caps
temperlux caps 1 --min 20 --max 80

# Set sync mode
temperlux sync proportional

# Reorder displays
temperlux order 1 2    # swap positions of display 1 and 2

# Toggle autostart
temperlux autostart enable
```

### شیڈولنگ (CLI)

```bash
# List schedule profiles
temperlux schedule list

# Create a profile
temperlux schedule add --name "Evening" --after-sunset 0 --monitors "all=30"

# Edit a profile
temperlux schedule edit --name "Evening" --time "20:00"

# Delete a profile
temperlux schedule delete "Evening"

# Apply schedules now (checks if any are due)
temperlux schedule apply

# Set location for sunrise/sunset
temperlux schedule location --lat 41.88 --lon -87.63
temperlux schedule detect-location

# Generate systemd user timers
temperlux schedule generate-timers
```

### شیل کمپلیشنز

```bash
# Bash
temperlux completions bash > ~/.local/share/bash-completion/completions/temperlux

# Zsh
temperlux completions zsh > ~/.zfunc/_temperlux

# Fish
temperlux completions fish > ~/.config/fish/completions/temperlux.fish

# Elvish
temperlux completions elvish > ~/.config/elvish/completions/temperlux
```

## بین الاقوامیت

Temperlux باکس سے باہر 25 زبانوں کی سپورٹ کرتا ہے، جو دنیا کی آبادی کا ~78% اور Linux ڈیسک ٹاپ صارفین کے ~97%+ کو احاطہ کرتا ہے۔ GUI اور CLI خود بخود `LANG`/`LC_ALL` سے آپ کی سسٹم زبان کی تشخیص کرتے ہیں۔

### زبان کا آزمائش

```bash
# German GUI
LANG=de_DE.UTF-8 temperlux-gui

# Japanese CLI help
LANG=ja_JP.UTF-8 temperlux --help
```

یا GNOME ترتیبات → علاقہ اور زبان میں اپنی سسٹم زبان تبدیل کریں۔

### نئی زبان کا اضافہ

1. `locales/en.yml` کو `locales/<lang>.yml` میں کاپی کریں
2. قدروں کا ترجمہ کریں (کیز کو ایک جیسا رکھیں)
3. دوبارہ تعمیر کریں — ترجمے کمپائل وقت پر شامل کیے جاتے ہیں
4. `cargo test -- --test-threads=1` چلائیں — ٹیسٹ سیٹ ہر لوکیل میں ہر کلید کے حل ہونے کی تصدیق کرتا ہے

i18n سسٹم [`rust-i18n`](https://github.com/longbridge/rust-i18n) استعمال کرتا ہے — خالص Rust، کوئی سسٹم انحصار نہیں۔

## بلڈ

```bash
# CLI only (default)
cargo build --release

# With GUI
cargo build --release --features gui

# Run tests
cargo test

# Lint
cargo clippy -- -D warnings
```

### ضروریات

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

### Install dependencies (Debian/Ubuntu)

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

### Install dependencies (Fedora)

```bash
sudo dnf install ddcutil ddcutil-devel gtk4-devel libadwaita-devel pkg-config
```

### Install dependencies (Arch)

```bash
sudo pacman -S ddcutil gtk4 libadwaita pkgconf
```

## فن تعمیر

```
src/
  main.rs            CLI entry point (dispatches to subcommands)
  cli.rs             clap argument definitions + shell completions
  i18n.rs            Internationalization (tr/tr_args, locale normalization)
  autostart.rs       Autostart .desktop file management
  settings.rs        JSON config (~/.config/temperlux/settings.json)
  sync.rs            Sync mode math (proportional map, delta apply)
  caps.rs            Min/max brightness clamping
  schedule.rs        Schedule profile definitions + sunrise/sunset calc
  display/
    ddc_ffi.rs       DdcService (FFI libddcutil, parallel writes, command coalescing)
    backlight.rs     RealBacklightProvider (/sys/class/backlight)
    manager.rs       DisplayManager (unified display operations)
    provider.rs      BacklightProvider trait
  gui/
    window.rs        Main window, display rows, preferences, schedule editor
    viewmodel.rs     DisplayRow data model
    debounce.rs      Slider debouncing + worker pool
    schedule.rs      Schedule UI (profile editor, time pickers)
    theme.rs         Color theme system (brand CSS, community themes, live switching)
    themes/          14 embedded community theme CSS files
    widgets/         Custom GTK4 widgets
locales/             Translation files (en, de, es, fr, pt, ru, zh, it, pl, nl, ja, ko, tr, uk, id, hi, ar, bn, ur, fa, vi, th, ms, cs, hu, ro)
```

CLI اور GUI دونوں قابلِ اعتماد ڈسپلے تشخیص اور کمانڈ کوالیسنگ کے ساتھ تیز متوازی DDC رائٹنگ کے لیے `DdcService` (FFI libddcutil) استعمال کرتے ہیں۔ ہارڈویئر تک رسائی آزمائش کے لیے موک عمل درآمد کے ساتھ پرووائڈر ٹریٹس کے پیچھے ہے۔

### آزمائش

کوڈبیس میں 185 ٹیسٹ ہیں موک-پر مبنی فن تعمیر کے ساتھ — تمام ہارڈویئر تک رسائی ٹریٹس (`DdcProvider`، `BacklightProvider`) کے پیچھے ہے، جو طبعی ڈسپلے کے بغیر مکمل یونٹ ٹیسٹنگ کو قابل بناتا ہے۔ i18n ٹیسٹ سیٹ تمام 25 لوکیلز میں ہر ترجمہ کلید کے حل ہونے کی تصدیق کرتا ہے۔

```bash
cargo test                           # run all tests
cargo test --features gui            # include GUI tests
cargo test -- --test-threads=1       # serial (required for locale-switching tests)
cargo test -- --nocapture sync_test  # verbose specific test
```

## کنفیگریشن

کنفیگ فائل: `~/.config/temperlux/settings.json`

```json
{
  "sync_mode": "proportional",
  "show_display_numbers": true,
  "use_24h_time": true,
  "show_range_labels": true,
  "autostart": false,
  "theme_mode": "system",
  "light_theme": "angus_light",
  "dark_theme": "angus_dark",
  "display_order": ["ddc:2", "ddc:1", "ddc:3"],
  "displays": {
    "ddc:1": {
      "min_brightness": 20.0,
      "max_brightness": 80.0,
      "custom_name": "Left Monitor"
    },
    "ddc:2": {
      "min_brightness": 0.0,
      "max_brightness": 100.0,
      "custom_name": "Right Monitor"
    }
  }
}
```

### ترتیبات حوالہ

| فیلڈ | قسم | ڈیفالٹ | تفصیل |
|-------|------|---------|-------------|
| `sync_mode` | `"off"` \| `"same"` \| `"proportional"` | `"off"` | ڈسپلے میں چمک سنک |
| `show_display_numbers` | bool | `true` | ڈسپلے ناموں میں انڈیکس نمبر دکھائیں |
| `use_24h_time` | bool | `true` | شیڈول ایڈیٹر میں 24 گھنٹے فارمیٹ |
| `show_range_labels` | bool | `true` | سلائیڈر پر کم سے کم/زیادہ سے زیادہ رینج لیبل دکھائیں |
| `autostart` | bool | `false` | لاگ اِن پر لانچ کریں |
| `theme_mode` | `"system"` \| `"light"` \| `"dark"` | `"system"` | UI رنگ موڈ |
| `light_theme` | string | `"angus_light"` | لائٹ موڈ کے لیے رنگ پلیٹ |
| `dark_theme` | string | `"angus_dark"` | ڈارک موڈ کے لیے رنگ پلیٹ |
| `display_order` | string[] | — | ڈسپلے ترتیب |
| `displays` | object | — | ہر ڈسپلے کنفیگ (حدود، نام) |

## CI/CD

- **بلڈ + ٹیسٹ** — master پر ہر پش
- **Clippy** — `-D warnings` کے ساتھ لنٹ
- **کوریج ٹولگیٹ** — 80% لائن کوریج ضروری
- **Diff کوریج** — نئے کوڈ کو کوریج تھریش ہول پورا کرنا ہوگا
- **ریلیز** — ٹیگ پش GitHub ریلیز (بائنری ٹاربال) + crates.io اشاعت کو متحرک کرتا ہے

## تشخیص

```bash
# Run the diagnostic binary to troubleshoot display detection
ddc-diag
```

یہ libddcutil ورژن، I2C ڈیوائس اجازتیں اور ہر تشخیص شدہ ڈسپلے کے لیے DDC/CI صلاحیت کی جانچ کرتا ہے۔

## لائسنس

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

یہ پروجیکٹ sidevesh کے [Luminance](https://github.com/sidevesh/Luminance) کا دوبارہ لکھنا ہے، جو GPL-3.0-or-later کے تحت بھی لائسنس یافتہ ہے۔

کمیونٹی تھیم ان کے متعلقہ مصنفین کے ذریعے MIT کے تحت انفرادی طور پر لائسنس یافتہ ہیں:
- [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)

---

Full documentation: [English](README.md)
