Files
yali-rs/README_en.md
T
Erkan IŞIK 1e920e0717 docs: update README, CHANGELOG for slides/ restructure and binary refactor
- README.md: add slides/ directory, src/bin/slides_test.rs, src/lib.rs
  to project tree; add slides_test usage example
- README_en.md: same changes in English
- CHANGELOG.md: add v4.0.5 entry (slide migration, slides_test, rsync
  progress refactor, auto-install CLI output, edit dialog fixes)
- CHANGELOG_en.md: same in English
2026-07-10 02:05:35 +03:00

124 lines
6.4 KiB
Markdown

# 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
# Slideshow test (standalone window, no root required)
cargo run --bin slides_test [desktop] [lang]
# E.g.: cargo run --bin slides_test xfce en
```
## Project Structure
```
├── src/
│ ├── main.rs # Entry point, eframe App, GUI layout
│ ├── lib.rs # Library root (reserved for future DLL structure)
│ ├── installer.rs # InstallerStep trait, GlobalState, WelcomeStep
│ ├── funct.rs # Shared UI helpers (form fields, language selector)
│ ├── branding.rs # Branding.toml loader (logo, slides, theme, OEM)
│ ├── bin/
│ │ └── slides_test.rs # Standalone slideshow test binary
│ ├── 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
├── slides/
│ ├── img/ # Slide images (PNG)
│ ├── slides_tr.toml # Turkish slide content
│ └── slides_en.toml # English slide content
├── assets/
│ ├── icons/ # UI icons (YALI_icon_LIGHT.svg, language-icon.svg, etc.)
│ ├── flags/ # Country flags (~250 SVG)
│ └── pisi-logo-*.png # Distribution logos (branding `[general]`)
├── 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.