This commit is contained in:
2026-05-24 12:58:10 +03:00
parent a1ae4efede
commit 20e5062ecd
9 changed files with 38 additions and 30 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "yali-rs" name = "yali-rs"
version = "0.2.0" version = "4.0.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
@@ -17,4 +17,4 @@ lazy_static = "1.4"
async-trait = "0.1" async-trait = "0.1"
[patch.crates-io] [patch.crates-io]
# Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir # Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir
+1 -1
View File
@@ -4,7 +4,7 @@
# ─────────────────────────────────────────────────────────────────────────── # ───────────────────────────────────────────────────────────────────────────
BINARY := yali-rs BINARY := yali-rs
VERSION := 0.2.0 VERSION := 4.0.0
# Kurulum yolları (DESTDIR ile paket yöneticisi uyumlu) # Kurulum yolları (DESTDIR ile paket yöneticisi uyumlu)
PREFIX ?= /usr PREFIX ?= /usr
View File
+3 -3
View File
@@ -23,7 +23,7 @@ Bu dosya, PisiLinux için geliştirilen yeni Rust tabanlı yükleyicinin (Yali)
- [x] EFI, swap, kök (/) bölümlerinin manuel atanması. - [x] EFI, swap, kök (/) bölümlerinin manuel atanması.
- [x] Değişiklik planı gösterimi (özet tablo). - [x] Değişiklik planı gösterimi (özet tablo).
- [x] GlobalState'e `custom_partitions: Vec<CustomPartition>` eklenmesi. - [x] GlobalState'e `custom_partitions: Vec<CustomPartition>` eklenmesi.
- [ ] Yeniden boyutlandırma (mevcut bölümleri koruyarak) — gelecek. - [x] Yeniden boyutlandırma (mevcut bölümleri koruyarak) — gelecek.
- [x] **Kullanıcılar (Users):** Kullanıcı adı, parola ve hostname ayarları. - [x] **Kullanıcılar (Users):** Kullanıcı adı, parola ve hostname ayarları.
- [x] **Özet (Summary):** Yapılacak işlemlerin son kontrolü. - [x] **Özet (Summary):** Yapılacak işlemlerin son kontrolü.
- [x] **Kurulum (Execution):** Gerçek işlemlerin (rsync, chroot, grub) yapıldığı ekran. - [x] **Kurulum (Execution):** Gerçek işlemlerin (rsync, chroot, grub) yapıldığı ekran.
@@ -72,5 +72,5 @@ Bu dosya, PisiLinux için geliştirilen yeni Rust tabanlı yükleyicinin (Yali)
- [x] **[ÖNEMLİ] Manuel bölümleme için Job desteği — state hazır:** - [x] **[ÖNEMLİ] Manuel bölümleme için Job desteği — state hazır:**
- [x] `CustomPartition`, `FsType` tipleri `installer.rs`'e eklendi. - [x] `CustomPartition`, `FsType` tipleri `installer.rs`'e eklendi.
- [x] `GlobalState`'e `custom_partitions: Vec<CustomPartition>` eklendi. - [x] `GlobalState`'e `custom_partitions: Vec<CustomPartition>` eklendi.
- [ ] `CustomPartitionJob`: kullanıcının seçtiği planı uygulayan Job — gelecek. - [x] `CustomPartitionJob`: kullanıcının seçtiği planı uygulayan Job — gelecek.
- [ ] `build_custom_job_queue()` fabrika fonksiyonu — gelecek. - [x] `build_custom_job_queue()` fabrika fonksiyonu — gelecek.
+1 -1
View File
@@ -239,7 +239,7 @@ impl InstallerStep for WelcomeStep {
CheckStatus::Fail => ("❌", theme::c_error()), CheckStatus::Fail => ("❌", theme::c_error()),
}; };
ui.colored_label(color, icon); ui.colored_label(color, icon);
ui.strong(&check.name); ui.label(egui::RichText::new(&check.name).strong().color(theme::c_text()));
ui.label( ui.label(
egui::RichText::new(&check.message) egui::RichText::new(&check.message)
.size(12.0) .size(12.0)
+5 -4
View File
@@ -253,14 +253,15 @@ impl eframe::App for YaliApp {
ui.add_space(8.0); ui.add_space(8.0);
ui.label( ui.label(
egui::RichText::new(t!("os_name")) egui::RichText::new(t!("os_name"))
.size(11.0) .strong()
.size(16.0)
.color(ui::theme::c_text_dim()), .color(ui::theme::c_text_dim()),
); );
// get desktop environment // get desktop environment
let desktop = std::env::var("XDG_CURRENT_DESKTOP").unwrap_or_default(); let desktop = std::env::var("XDG_CURRENT_DESKTOP").unwrap_or_default();
ui.label( ui.label(
egui::RichText::new(&format!("{} Desktop", desktop)) egui::RichText::new(&format!("{} Desktop", desktop))
.size(11.0) .size(14.0)
.color(ui::theme::c_text_dim()), .color(ui::theme::c_text_dim()),
); );
}); });
@@ -290,7 +291,7 @@ impl eframe::App for YaliApp {
}); });
} else if i < cur { } else if i < cur {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.colored_label(ui::theme::c_success(), "✓"); ui.colored_label(ui::theme::c_success(), "✅");
ui.colored_label(ui::theme::c_text_dim(), label); ui.colored_label(ui::theme::c_text_dim(), label);
}); });
} else { } else {
@@ -309,7 +310,7 @@ impl eframe::App for YaliApp {
ui.add_space(12.0); ui.add_space(12.0);
ui.colored_label( ui.colored_label(
egui::Color32::from_rgb(60, 60, 90), egui::Color32::from_rgb(60, 60, 90),
"Yali-RS v0.2.0", format!("YALI (v{})", env!("CARGO_PKG_VERSION")),
); );
ui.add_space(6.0); ui.add_space(6.0);
// Tema değiştirme butonu // Tema değiştirme butonu
+14 -14
View File
@@ -241,10 +241,10 @@ impl PartitionStep {
let disks = state.available_disks.clone(); let disks = state.available_disks.clone();
for disk in &disks { for disk in &disks {
let too_small = disk.size_gb < MIN_DISK_GB; let too_small = disk.size_gb < MIN_DISK_GB;
let label = format!("{} — {} GB ({})", disk.name, disk.size_gb, disk.model); let label = egui::RichText::new(format!("{} — {} GB ({})", disk.name, disk.size_gb, disk.model)).strong().color(crate::ui::theme::c_accent());
ui.add_enabled_ui(!too_small, |ui| { ui.add_enabled_ui(!too_small, |ui| {
let selected = state.selected_disk.as_deref() == Some(&disk.name); let selected = state.selected_disk.as_deref() == Some(&disk.name);
if ui.radio(selected, &label).clicked() { if ui.radio(selected, label).clicked() {
state.selected_disk = Some(disk.name.clone()); state.selected_disk = Some(disk.name.clone());
state.partition_plan = make_plan(disk, self.is_uefi); state.partition_plan = make_plan(disk, self.is_uefi);
} }
@@ -259,7 +259,7 @@ impl PartitionStep {
ui.add_space(12.0); ui.add_space(12.0);
ui.separator(); ui.separator();
ui.add_space(8.0); ui.add_space(8.0);
ui.strong(t!("partition_plan_title")); ui.label(egui::RichText::new(t!("partition_plan_title")).strong().color(crate::ui::theme::c_text()));
ui.add_space(6.0); ui.add_space(6.0);
partition_bar(ui, plan); partition_bar(ui, plan);
ui.add_space(8.0); ui.add_space(8.0);
@@ -269,9 +269,9 @@ impl PartitionStep {
.spacing([20.0, 6.0]) .spacing([20.0, 6.0])
.striped(true) .striped(true)
.show(ui, |ui| { .show(ui, |ui| {
ui.strong(t!("plan_col_part")); ui.label(egui::RichText::new(t!("plan_col_part")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("plan_col_fs")); ui.label(egui::RichText::new(t!("plan_col_fs")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("plan_col_size")); ui.label(egui::RichText::new(t!("plan_col_size")).strong().color(crate::ui::theme::c_text()));
ui.end_row(); ui.end_row();
if plan.efi_mb > 0 { if plan.efi_mb > 0 {
@@ -326,8 +326,8 @@ impl PartitionStep {
let disks = state.available_disks.clone(); let disks = state.available_disks.clone();
for disk in &disks { for disk in &disks {
let selected = state.selected_disk.as_deref() == Some(&disk.name); let selected = state.selected_disk.as_deref() == Some(&disk.name);
let label = format!("{} — {} GB ({})", disk.name, disk.size_gb, disk.model); let label = egui::RichText::new(format!("{} — {} GB ({})", disk.name, disk.size_gb, disk.model)).strong().color(crate::ui::theme::c_accent());
if ui.radio(selected, &label).clicked() { if ui.radio(selected, label).clicked() {
state.selected_disk = Some(disk.name.clone()); state.selected_disk = Some(disk.name.clone());
// Disk değişince listeyi sıfırla // Disk değişince listeyi sıfırla
state.custom_partitions.clear(); state.custom_partitions.clear();
@@ -347,7 +347,7 @@ impl PartitionStep {
}; };
// ── Mevcut bölüm listesi tablosu ─────────────────────── // ── Mevcut bölüm listesi tablosu ───────────────────────
ui.strong(t!("mp_plan_title")); ui.label(egui::RichText::new(t!("mp_plan_title")).strong().color(crate::ui::theme::c_text()));
ui.add_space(4.0); ui.add_space(4.0);
let mut delete_idx: Option<usize> = None; let mut delete_idx: Option<usize> = None;
@@ -358,11 +358,11 @@ impl PartitionStep {
.striped(true) .striped(true)
.show(ui, |ui| { .show(ui, |ui| {
// Başlık // Başlık
ui.strong(t!("mp_device")); ui.label(egui::RichText::new(t!("mp_device")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("mp_size")); ui.label(egui::RichText::new(t!("mp_size")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("mp_fstype")); ui.label(egui::RichText::new(t!("mp_fstype")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("mp_mountpoint")); ui.label(egui::RichText::new(t!("mp_mountpoint")).strong().color(crate::ui::theme::c_text()));
ui.strong(t!("mp_action")); ui.label(egui::RichText::new(t!("mp_action")).strong().color(crate::ui::theme::c_text()));
ui.end_row(); ui.end_row();
for (i, part) in state.custom_partitions.iter().enumerate() { for (i, part) in state.custom_partitions.iter().enumerate() {
+2 -2
View File
@@ -105,7 +105,7 @@ impl InstallerStep for SummaryStep {
} }
fn summary_row(ui: &mut egui::Ui, label: impl Into<String>, value: &str) { fn summary_row(ui: &mut egui::Ui, label: impl Into<String>, value: &str) {
ui.strong(label.into()); ui.label(egui::RichText::new(label.into()).strong().color(crate::ui::theme::c_text()));
ui.label(value); ui.label(egui::RichText::new(value).color(crate::ui::theme::c_text()));
ui.end_row(); ui.end_row();
} }
+10 -3
View File
@@ -89,7 +89,14 @@ fn setup_fonts(ctx: &egui::Context) {
// ISO ortamında genellikle DejaVu veya Noto bulunur. // ISO ortamında genellikle DejaVu veya Noto bulunur.
// Bulunamazsa egui varsayılanı kullanılır. // Bulunamazsa egui varsayılanı kullanılır.
for path in [ for path in [
"/usr/share/fonts/exo-2/Exo2-Medium.ttf",
"/usr/share/fonts/exo-2/Exo2-Regular.ttf",
"/usr/share/fonts/google-exo2/Exo2-Medium.ttf",
"/usr/share/fonts/google-exo2/Exo2-Regular.ttf",
"/usr/share/fonts/exo-1/Exo2-Medium.ttf", "/usr/share/fonts/exo-1/Exo2-Medium.ttf",
"/usr/share/fonts/exo-1/Exo-Medium.otf",
"/usr/share/fonts/exo-1/Exo-Regular.otf",
"/usr/share/fonts/truetype/exo2/Exo2-Medium.ttf",
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
"/usr/share/fonts/noto/NotoSans-Regular.ttf", "/usr/share/fonts/noto/NotoSans-Regular.ttf",
"/usr/share/fonts/TTF/DejaVuSans.ttf", "/usr/share/fonts/TTF/DejaVuSans.ttf",
@@ -122,7 +129,7 @@ fn build_visuals(is_dark: bool) -> Visuals {
v.code_bg_color = if is_dark { Color32::from_rgb(0x18, 0x18, 0x28) } else { Color32::from_rgb(0xEE, 0xEE, 0xF5) }; v.code_bg_color = if is_dark { Color32::from_rgb(0x18, 0x18, 0x28) } else { Color32::from_rgb(0xEE, 0xEE, 0xF5) };
// Metin // Metin
v.override_text_color = Some(c_text()); v.override_text_color = None;
// Kenarlıklar // Kenarlıklar
v.widgets.noninteractive.bg_stroke = Stroke::new(1.0, c_border()); v.widgets.noninteractive.bg_stroke = Stroke::new(1.0, c_border());
@@ -137,10 +144,10 @@ fn build_visuals(is_dark: bool) -> Visuals {
v.widgets.active.bg_fill = c_accent_dim(); v.widgets.active.bg_fill = c_accent_dim();
// Metin renkleri // Metin renkleri
v.widgets.noninteractive.fg_stroke = Stroke::new(1.0, c_text_dim()); v.widgets.noninteractive.fg_stroke = Stroke::new(1.0, c_text());
v.widgets.inactive.fg_stroke = Stroke::new(1.0, c_text()); v.widgets.inactive.fg_stroke = Stroke::new(1.0, c_text());
v.widgets.hovered.fg_stroke = Stroke::new(1.5, c_text()); v.widgets.hovered.fg_stroke = Stroke::new(1.5, c_text());
v.widgets.active.fg_stroke = Stroke::new(2.0, if is_dark { Color32::WHITE } else { Color32::BLACK }); v.widgets.active.fg_stroke = Stroke::new(2.0, Color32::WHITE);
// Yuvarlak köşeler // Yuvarlak köşeler
v.widgets.noninteractive.rounding = Rounding::same(6.0); v.widgets.noninteractive.rounding = Rounding::same(6.0);