diff --git a/Cargo.toml b/Cargo.toml index 4f4d213..e52b4b3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "yali-rs" -version = "0.2.0" +version = "4.0.0" edition = "2021" [dependencies] @@ -17,4 +17,4 @@ lazy_static = "1.4" async-trait = "0.1" [patch.crates-io] -# Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir \ No newline at end of file +# Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir diff --git a/Makefile b/Makefile index 93f6865..ccabd10 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # ─────────────────────────────────────────────────────────────────────────── BINARY := yali-rs -VERSION := 0.2.0 +VERSION := 4.0.0 # Kurulum yolları (DESTDIR ile paket yöneticisi uyumlu) PREFIX ?= /usr diff --git a/README b/README.md similarity index 100% rename from README rename to README.md diff --git a/TODO.md b/TODO.md index c008114..bab114a 100644 --- a/TODO.md +++ b/TODO.md @@ -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] Değişiklik planı gösterimi (özet tablo). - [x] GlobalState'e `custom_partitions: Vec` 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] **Özet (Summary):** Yapılacak işlemlerin son kontrolü. - [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] `CustomPartition`, `FsType` tipleri `installer.rs`'e eklendi. - [x] `GlobalState`'e `custom_partitions: Vec` eklendi. - - [ ] `CustomPartitionJob`: kullanıcının seçtiği planı uygulayan Job — gelecek. - - [ ] `build_custom_job_queue()` fabrika fonksiyonu — gelecek. \ No newline at end of file + - [x] `CustomPartitionJob`: kullanıcının seçtiği planı uygulayan Job — gelecek. + - [x] `build_custom_job_queue()` fabrika fonksiyonu — gelecek. \ No newline at end of file diff --git a/src/installer.rs b/src/installer.rs index 25d8a16..618d4a5 100644 --- a/src/installer.rs +++ b/src/installer.rs @@ -239,7 +239,7 @@ impl InstallerStep for WelcomeStep { CheckStatus::Fail => ("❌", theme::c_error()), }; ui.colored_label(color, icon); - ui.strong(&check.name); + ui.label(egui::RichText::new(&check.name).strong().color(theme::c_text())); ui.label( egui::RichText::new(&check.message) .size(12.0) diff --git a/src/main.rs b/src/main.rs index 224516e..23305bd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -253,14 +253,15 @@ impl eframe::App for YaliApp { ui.add_space(8.0); ui.label( egui::RichText::new(t!("os_name")) - .size(11.0) + .strong() + .size(16.0) .color(ui::theme::c_text_dim()), ); // get desktop environment let desktop = std::env::var("XDG_CURRENT_DESKTOP").unwrap_or_default(); ui.label( egui::RichText::new(&format!("{} Desktop", desktop)) - .size(11.0) + .size(14.0) .color(ui::theme::c_text_dim()), ); }); @@ -290,7 +291,7 @@ impl eframe::App for YaliApp { }); } else if i < cur { 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); }); } else { @@ -309,7 +310,7 @@ impl eframe::App for YaliApp { ui.add_space(12.0); ui.colored_label( egui::Color32::from_rgb(60, 60, 90), - "Yali-RS v0.2.0", + format!("YALI (v{})", env!("CARGO_PKG_VERSION")), ); ui.add_space(6.0); // Tema değiştirme butonu diff --git a/src/steps/partition.rs b/src/steps/partition.rs index d89c7c4..c30bfa1 100644 --- a/src/steps/partition.rs +++ b/src/steps/partition.rs @@ -241,10 +241,10 @@ impl PartitionStep { let disks = state.available_disks.clone(); for disk in &disks { 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| { 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.partition_plan = make_plan(disk, self.is_uefi); } @@ -259,7 +259,7 @@ impl PartitionStep { ui.add_space(12.0); ui.separator(); 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); partition_bar(ui, plan); ui.add_space(8.0); @@ -269,9 +269,9 @@ impl PartitionStep { .spacing([20.0, 6.0]) .striped(true) .show(ui, |ui| { - ui.strong(t!("plan_col_part")); - ui.strong(t!("plan_col_fs")); - ui.strong(t!("plan_col_size")); + ui.label(egui::RichText::new(t!("plan_col_part")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("plan_col_fs")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("plan_col_size")).strong().color(crate::ui::theme::c_text())); ui.end_row(); if plan.efi_mb > 0 { @@ -326,8 +326,8 @@ impl PartitionStep { let disks = state.available_disks.clone(); for disk in &disks { let selected = state.selected_disk.as_deref() == Some(&disk.name); - let label = format!("{} — {} GB ({})", disk.name, disk.size_gb, disk.model); - if ui.radio(selected, &label).clicked() { + 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() { state.selected_disk = Some(disk.name.clone()); // Disk değişince listeyi sıfırla state.custom_partitions.clear(); @@ -347,7 +347,7 @@ impl PartitionStep { }; // ── 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); let mut delete_idx: Option = None; @@ -358,11 +358,11 @@ impl PartitionStep { .striped(true) .show(ui, |ui| { // Başlık - ui.strong(t!("mp_device")); - ui.strong(t!("mp_size")); - ui.strong(t!("mp_fstype")); - ui.strong(t!("mp_mountpoint")); - ui.strong(t!("mp_action")); + ui.label(egui::RichText::new(t!("mp_device")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("mp_size")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("mp_fstype")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("mp_mountpoint")).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(t!("mp_action")).strong().color(crate::ui::theme::c_text())); ui.end_row(); for (i, part) in state.custom_partitions.iter().enumerate() { diff --git a/src/steps/summary.rs b/src/steps/summary.rs index eee9efd..12b68de 100644 --- a/src/steps/summary.rs +++ b/src/steps/summary.rs @@ -105,7 +105,7 @@ impl InstallerStep for SummaryStep { } fn summary_row(ui: &mut egui::Ui, label: impl Into, value: &str) { - ui.strong(label.into()); - ui.label(value); + ui.label(egui::RichText::new(label.into()).strong().color(crate::ui::theme::c_text())); + ui.label(egui::RichText::new(value).color(crate::ui::theme::c_text())); ui.end_row(); } diff --git a/src/ui/theme.rs b/src/ui/theme.rs index 7d7e5df..fb51535 100644 --- a/src/ui/theme.rs +++ b/src/ui/theme.rs @@ -89,7 +89,14 @@ fn setup_fonts(ctx: &egui::Context) { // ISO ortamında genellikle DejaVu veya Noto bulunur. // Bulunamazsa egui varsayılanı kullanılır. 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/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/noto/NotoSans-Regular.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) }; // Metin - v.override_text_color = Some(c_text()); + v.override_text_color = None; // Kenarlıklar 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(); // 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.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 v.widgets.noninteractive.rounding = Rounding::same(6.0);