forked from pisilinux-rs/yali-rs
3194c4d8a38808d3dd6231169bb4d407f6c8ea8a
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.tomlfor logo, slides, color settings - Theme: Dark/light theme, atomic color management, custom gradient buttons
- Async job queue: All installation steps run in separate
tokioruntime, UI updated viampscchannel - 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
# 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
- Welcome — Language selection, system checks, rescue mode
- Location / Time — Timezone selection (region/area dual ComboBox), GeoIP, NTP or manual date/time
- Keyboard — Layout/variant selection, search, live preview (setxkbmap)
- Network — WiFi scanning, connection, proxy
- Disk Partitioning — Automatic (guided) or manual, LVM, LUKS
- Users — Account creation, password strength indicator, root password, autologin
- Bootloader — GRUB device, timeout, password, kernel parameters
- Summary — Review all selections
- Installation — Slideshow + progress bar + live log
- 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.
Languages
Rust
98.1%
Makefile
1.9%