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