# YALI (Yet Another Linux Installer) — Rust / egui A rewritten **Pisi GNU/Linux** installation tool in Rust and egui. YALI installs the system from the live environment, installs packages, and performs basic configuration. It is a modern, fast, and maintainable rewrite of the original Python/Qt version. ## Features - **10-step installation wizard**: Welcome → Location → Keyboard → Network → Disk Partitioning → Users → Bootloader → Summary → Installation → Finish - **Two modes**: Graphical interface (default) and automatic installation with answer file (`--auto-install answer.toml`) - **Demo mode**: Skips system checks, simulates installation (`--demo`) - **Disk partitioning**: Automatic (GPT/MBR) or manual, LVM and LUKS encryption support - **Network configuration**: WiFi scanning (nmcli), proxy settings - **Bootloader**: GRUB device/password/timeout settings, kernel parameters - **Rescue mode**: Chroot, GRUB reinstallation, Pisi rollback - **OEM mode**: Predefined settings for manufacturer pre-installation - **Internationalization**: Turkish and English (with rust-i18n via TOML locale files) - **Branding system**: Runtime-loadable `branding.toml` for logo, slides, color settings - **Theme**: Dark/light theme, atomic color management, custom gradient buttons - **Async job queue**: All installation steps run in separate `tokio` runtime, UI updated via `mpsc` channel - **System checks**: 8 pre-checks including RAM, disk space, internet, UEFI, CPU, NVMe - **Slideshow**: Custom branded slides for 9 desktop environments - **Demo session cleanup**: Removes live environment artifacts, adds production repository ## Usage ```bash # Normal installation (requires root) sudo cargo run --release # Demo mode (no root required) cargo run --release -- --demo # Automatic installation (with answer file) sudo cargo run --release -- --auto-install answer.toml ``` ## Project Structure ``` ├── src/ │ ├── main.rs # Entry point, eframe App, GUI layout │ ├── installer.rs # InstallerStep trait, GlobalState, WelcomeStep │ ├── funct.rs # Shared UI helpers (form fields, language selector) │ ├── branding.rs # Branding.toml loader (logo, slides, theme, OEM) │ ├── ui/ │ │ ├── theme.rs # Colors, fonts, Visuals, section_heading, error/warning/success boxes │ │ ├── buttons.rs # Gradient buttons (primary, secondary, danger, etc.) │ │ ├── combobox.rs # ComboBox helpers (show_combo_box, selectable_value) │ │ ├── combobox_stil.rs # ComboBox visual constants (weak_bg, border, text colors) │ │ ├── slideshow.rs # Auto-advancing slideshow │ │ └── error_screen.rs # Error screen (log viewer, copy, retry) │ ├── steps/ │ │ ├── location.rs # Location/timezone + date/time │ │ ├── license.rs # License agreement │ │ ├── keyboard.rs # Keyboard layout/variant selection │ │ ├── network.rs # Network configuration (WiFi, proxy) │ │ ├── partition.rs # Disk partitioning (automatic + manual + LVM) │ │ ├── users.rs # User account creation │ │ ├── bootloader.rs # GRUB configuration │ │ ├── summary.rs # Installation summary │ │ ├── execution.rs # Installation execution (progress bar, log) │ │ ├── finish.rs # Completion screen │ │ ├── netinstall.rs # Extra package group selection │ │ └── rescue.rs # Rescue mode (chroot, GRUB, Pisi takeback) │ ├── jobs/mod.rs # Async job queue and all installation jobs │ └── autoinstall/ │ ├── mod.rs # Answer file loading and state application │ └── checker.rs # System pre-checks ├── locales/ │ ├── tr.toml # Turkish translations │ └── en.toml # English translations ├── assets/ │ ├── icons/ # UI icons (YALI_icon_LIGHT.svg, language-icon.svg, etc.) │ ├── flags/ # Country flags (~250 SVG) │ └── *.png # Slide and logo images ├── branding.toml # Default branding configuration ├── branding_en.toml # English branding ├── branding_tr.toml # Turkish branding └── answer-example.toml # Example answer file ``` ## Installation Workflow 1. **Welcome** — Language selection, system checks, rescue mode 2. **Location / Time** — Timezone selection (region/area dual ComboBox), GeoIP, NTP or manual date/time 3. **Keyboard** — Layout/variant selection, search, live preview (setxkbmap) 4. **Network** — WiFi scanning, connection, proxy 5. **Disk Partitioning** — Automatic (guided) or manual, LVM, LUKS 6. **Users** — Account creation, password strength indicator, root password, autologin 7. **Bootloader** — GRUB device, timeout, password, kernel parameters 8. **Summary** — Review all selections 9. **Installation** — Slideshow + progress bar + live log 10. **Finish** — Successful installation, reboot or return to live desktop ## Dependencies | Dependency | Version | Purpose | |---|---|---| | `eframe` | 0.27 (wgpu) | egui framework, WebGPU backend | | `egui_extras` | 0.27 (image, file, svg) | Image loading, file dialogs, SVG | | `image` | 0.24 | PNG decoding | | `serde` / `toml` | 1.0 / 0.8 | Branding and answer file serialization | | `zbus` | 4.0 | D-Bus communication (COMAR) | | `tokio` | 1.0 (full) | Async job queue | | `sysinfo` | 0.30 | System information (RAM, disk, OS) | | `rust-i18n` | 3.1 | Internationalization | | `chrono` | 0.4 | Date/time operations | ## License GNU General Public License v3.0 This project is developed by the Pisi GNU/Linux team.