# YALI (Yet Another Linux Installer) — Rust / egui

Rust ve egui ile yeniden yazılmış **Pisi GNU/Linux** kurulum aracı. YALI, canlı ortamdan sistemi kurar, paketleri kurar ve temel yapılandırmayı gerçekleştirir. Orijinal Python/Qt sürümünün modern, hızlı ve bakımı kolay bir yeniden yazımıdır.

- [Changelog](CHANGELOG.md)
- [English README](README_en.md)

## Özellikler

- **10 adımlı kurulum sihirbazı**: Hoş Geldiniz → Konum → Klavye → Ağ → Disk Bölümleme → Kullanıcılar → Bootloader → Özet → Kurulum → Bitir
- **İki mod**: Grafik arayüz (varsayılan) ve cevap dosyasıyla otomatik kurulum (`--auto-install answer.toml`)
- **Demo modu**: Sistem kontrollerini atlar, kurulumu simüle eder (`--demo`)
- **Disk bölümleme**: Otomatik (GPT/MBR) veya manuel, LVM ve LUKS şifreleme desteği
- **Ağ yapılandırması**: WiFi tarama (nmcli), proxy ayarları
- **Önyükleyici**: GRUB aygıt/parola/zaman aşımı ayarları, çekirdek parametreleri
- **Kurtarma modu**: Chroot, GRUB yeniden kurulumu, Pisi geçmişe dönme
- **OEM modu**: Üretici ön kurulumu için ön tanımlı ayarlar
- **Uluslararasılaştırma**: Türkçe ve İngilizce (rust-i18n ile TOML locale dosyaları)
- **Markalama sistemi**: Çalışma zamanında yüklenebilir `branding.toml` ile logo, slayt, renk ayarları
- **Tema**: Koyu/açık tema, atomik renk yönetimi, özel gradient butonlar
- **Asenkron iş kuyruğu**: Tüm kurulum adımları ayrı `tokio` runtime'ında çalışır, `mpsc` kanalı ile UI güncellenir
- **Sistem kontrolleri**: RAM, disk alanı, internet, UEFI, CPU, NVMe gibi 8 ön kontrol
- **Slayt gösterisi**: 9 masaüstü ortamı için özel markalı slaytlar
- **Demo oturum temizliği**: Canlı ortam artifact'lerini kaldırır, üretim deposu ekler

## Kullanım

```bash
# Normal kurulum (root yetkisi gerekir)
sudo cargo run --release

# Demo modu (root gerekmez)
cargo run --release -- --demo

# Otomatik kurulum (cevap dosyası ile)
sudo cargo run --release -- --auto-install answer.toml

# Slayt gösterisi testi (bağımsız pencere, root gerekmez)
cargo run --bin slides_test [desktop] [lang]
# Örn: cargo run --bin slides_test xfce en
```

## Proje Yapısı

```
├── src/
│   ├── main.rs              # Giriş noktası, eframe App, GUI düzeni
│   ├── lib.rs               # Kütüphane kökü (yedek DLL yapısı için ayrıldı)
│   ├── installer.rs         # InstallerStep trait'i, GlobalState, WelcomeStep
│   ├── funct.rs             # Paylaşılan UI yardımcıları (form alanları, dil seçici)
│   ├── branding.rs          # Branding.toml yükleyici (logo, slayt, tema, OEM)
│   ├── bin/
│   │   └── slides_test.rs   # Slayt gösterisi test aracı (bağımsız ikili)
│   ├── ui/
│   │   ├── theme.rs         # Renkler, fontlar, Visuals, section_heading, error/warning/success kutuları
│   │   ├── buttons.rs       # Gradient butonlar (primary, secondary, danger, vb.)
│   │   ├── combobox.rs      # ComboBox yardımcıları (show_combo_box, selectable_value)
│   │   ├── combobox_stil.rs # ComboBox görsel sabitleri (weak_bg, border, text renkleri)
│   │   ├── slideshow.rs     # Otomatik ilerleyen slayt gösterisi
│   │   └── error_screen.rs  # Hata ekranı (log görüntüleyici, kopyala, yeniden dene)
│   ├── steps/
│   │   ├── location.rs      # Konum/saat dilimi + tarih/saat
│   │   ├── license.rs       # Lisans sözleşmesi
│   │   ├── keyboard.rs      # Klavye düzeni/varyant seçimi
│   │   ├── network.rs       # Ağ yapılandırması (WiFi, proxy)
│   │   ├── partition.rs     # Disk bölümleme (otomatik + manuel + LVM)
│   │   ├── users.rs         # Kullanıcı hesabı oluşturma
│   │   ├── bootloader.rs    # GRUB yapılandırması
│   │   ├── summary.rs       # Kurulum özeti
│   │   ├── execution.rs     # Kurulum yürütme (ilerleme çubuğu, log)
│   │   ├── finish.rs        # Tamamlanma ekranı
│   │   ├── netinstall.rs    # Ek paket grubu seçimi
│   │   └── rescue.rs        # Kurtarma modu (chroot, GRUB, Pisi takeback)
│   ├── jobs/mod.rs           # Asenkron iş kuyruğu ve tüm kurulum işleri
│   └── autoinstall/
│       ├── mod.rs           # Cevap dosyası yükleme ve state uygulama
│       └── checker.rs       # Sistem ön kontrolleri
├── locales/
│   ├── tr.toml              # Türkçe çeviriler
│   └── en.toml              # İngilizce çeviriler
├── slides/
│   ├── img/                 # Slayt görselleri (PNG)
│   ├── slides_tr.toml       # Türkçe slayt içeriği
│   └── slides_en.toml       # İngilizce slayt içeriği
├── assets/
│   ├── icons/               # UI ikonları (YALI_icon_LIGHT.svg, language-icon.svg, vb.)
│   ├── flags/               # Ülke bayrakları (~250 SVG)
│   └── pisi-logo-*.png      # Dağıtım logoları (branding `[general]`)
├── branding.toml            # Varsayılan markalama yapılandırması
├── branding_en.toml         # İngilizce markalama
├── branding_tr.toml         # Türkçe markalama
└── answer-example.toml      # Örnek cevap dosyası
```

## Kurulum İş Akışı

1. **Hoş Geldiniz** — Dil seçimi, sistem kontrolleri, kurtarma modu
2. **Konum / Zaman** — Saat dilimi seçimi (bölge/alan çift ComboBox), GeoIP, NTP veya manuel tarih/saat
3. **Klavye** — Düzen/varyant seçimi, arama, canlı önizleme (setxkbmap)
4. **Ağ** — WiFi tarama, bağlantı, proxy
5. **Disk Bölümleme** — Otomatik (rehberli) veya manuel, LVM, LUKS
6. **Kullanıcılar** — Hesap oluşturma, parola gücü göstergesi, root parolası, otomatik oturum açma
7. **Bootloader** — GRUB aygıtı, zaman aşımı, parola, çekirdek parametreleri
8. **Özet** — Tüm seçimlerin gözden geçirilmesi
9. **Kurulum** — Slayt + ilerleme çubuğu + canlı log
10. **Bitir** — Başarılı kurulum, yeniden başlat veya canlı masaüstüne dön

## Bağımlılıklar

| Bağımlılık | Sürüm | Amaç |
|---|---|---|
| `eframe` | 0.27 (wgpu) | egui çatısı, WebGPU çıktısı |
| `egui_extras` | 0.27 (image, file, svg) | Görsel yükleme, dosya diyalogları, SVG |
| `image` | 0.24 | PNG kod çözme |
| `serde` / `toml` | 1.0 / 0.8 | Branding ve cevap dosyası serileştirme |
| `zbus` | 4.0 | D-Bus iletişimi (COMAR) |
| `tokio` | 1.0 (full) | Asenkron iş kuyruğu |
| `sysinfo` | 0.30 | Sistem bilgisi (RAM, disk, OS) |
| `rust-i18n` | 3.1 | Uluslararasılaştırma |
| `chrono` | 0.4 | Tarih/saat işlemleri |

## Lisans

GNU General Public License v3.0

Bu proje Pisi GNU/Linux ekibi tarafından geliştirilmektedir.
