mirror of
https://gitlab.com/erkanisik/yali-rs.git
synced 2026-07-30 18:59:02 +00:00
113 lines
5.8 KiB
Markdown
113 lines
5.8 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
|
|
```
|
|
|
|
## 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.
|