5 Commits

Author SHA1 Message Date
Erkan IŞIK 20dc937ab8 fix: GPU karakter bozulması için repaint throttle; slideshow emoji ikonları; partition auto FS; çeşitli f32 tip düzeltmeleri 2026-07-23 17:13:05 +03:00
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
Erkan IŞIK 62000b7c87 feat: slide images moved to slides/img/, direct path in TOML, slides_test binary
- Moved 16 slide PNGs from assets/ to slides/img/
- Replaced [icons] mapping section with direct paths in icon field
- Added slides_test standalone binary for testing slideshows
- Added default-run = "yali-rs" in Cargo.toml to fix cargo run ambiguity
- Fixed edit dialog auto-resize and text field wrapping in partition.rs
- Updated branding.rs to load external slides from slides/ directory
- Removed [slides] section from branding.toml files
- Revamped CopyFilesJob with find-based progress tracking (rsync --out-format)
- Fixed install progress bar visibility logic
- Tweaked auto-install CLI output with sub-progress and current file
- Switched language-icon.svg to white fills for dark theme
- Minor locale fixes
2026-07-10 01:59:59 +03:00
Erkan IŞIK 3194c4d8a3 Please provide the files or the diff so I can generate the appropriate commit message for you. 2026-06-28 10:01:33 +03:00
Erkan IŞIK 7621507acd Please provide the file changes or a description of the modifications you made so I can generate the commit message for you. 2026-06-28 09:58:20 +03:00
45 changed files with 1228 additions and 1219 deletions
+13 -1
View File
@@ -1,6 +1,18 @@
# Rust build outputs
/target
.cargo/registry/
# Lock files (bırakalım, bazen kontrol edilir)
Cargo.lock
# IDE settings
.idea/
.vscode/
# Temporary files
*.swp
*.swo
.vscode/
*.bak
# OS files
.DS_Store
+23
View File
@@ -1,5 +1,28 @@
# Changelog — [English](CHANGELOG_en.md)
## [4.0.5] — 2026-07-10
### Added
- `slides/slides_tr.toml`, `slides/slides_en.toml` — dil bazlı slayt içerik dosyaları (`[icons]` eşlemesi yerine doğrudan dosya yolu)
- `src/bin/slides_test.rs` — bağımsız slayt gösterisi test ikilisi (arg: `[desktop] [lang]`)
- `default-run = "yali-rs"` (`Cargo.toml`) — `cargo run` belirsizliği giderildi
### Changed
- Slayt görselleri `assets/*.png``slides/img/` altına taşındı
- `branding.toml` / `branding_tr.toml` / `branding_en.toml` içindeki `[slides]` bölümü kaldırıldı; içerik `slides/` dizinindeki dil dosyalarına taşındı
- `branding.rs::load_for_lang()` — slaytları `slides/slides_{lang}.toml`'den yükler (fallback: `slides/slides.toml`)
- `slideshow.rs``slide.icon` doğrudan dosya yolu içeriyorsa `file://` URI'sine çevirir (artık `[icons]` eşlemesi gerekmez)
- `CopyFilesJob` — rsync çıktı formatı `--info=progress2``--out-format=%n`, ilerleme `find` ile toplam dosya sayısı üzerinden hesaplanır
- Otomatik kurulum CLI çıktısına alt ilerleme ve dosya adı bilgisi eklendi
### Fixed
- Edit diyalog penceresinin her frame'de büyümesi (`default_size` + min/max genişlik)
- TextEdit alanı `available_width * 0.90` yerine `desired_width()` ile düzgün genişlik
- `cargo run -- --demo` belirsizliği (çift ikili)
- `locales/tr.toml` "Hoş Geldiniz12" yazım hatası
---
## [4.0.4] — 2026-06-25
### Added
+23
View File
@@ -1,5 +1,28 @@
# Changelog — [Türkçe](CHANGELOG.md)
## [4.0.5] — 2026-07-10
### Added
- `slides/slides_tr.toml`, `slides/slides_en.toml` — language-specific slide content files (direct file paths instead of `[icons]` mapping)
- `src/bin/slides_test.rs` — standalone slideshow test binary (args: `[desktop] [lang]`)
- `default-run = "yali-rs"` (`Cargo.toml`) — fixes `cargo run` ambiguity
### Changed
- Slide images moved from `assets/*.png``slides/img/`
- `[slides]` section removed from `branding.toml`/`branding_tr.toml`/`branding_en.toml`; content moved to `slides/slides_{lang}.toml`
- `branding.rs::load_for_lang()` — loads slides from `slides/slides_{lang}.toml` (fallback: `slides/slides.toml`)
- `slideshow.rs` — if `slide.icon` contains a file path, converts it to `file://` URI directly (no `[icons]` mapping needed)
- `CopyFilesJob` — rsync output format `--info=progress2``--out-format=%n`, progress calculated via `find` total file count
- Auto-install CLI output now shows sub-progress and current file name
### Fixed
- Edit dialog window growing every frame (`default_size` + min/max width)
- TextEdit field width using `desired_width()` instead of `available_width * 0.90`
- `cargo run -- --demo` ambiguity (dual binary)
- `locales/tr.toml` "Hoş Geldiniz12" typo
---
## [4.0.4] — 2026-06-25
### Added
+9
View File
@@ -2,6 +2,7 @@
name = "yali-rs"
version = "4.0.0"
edition = "2024"
default-run = "yali-rs"
[dependencies]
eframe = { version = "0.27", features = ["default", "wgpu"] }
@@ -18,5 +19,13 @@ async-trait = "0.1"
chrono = "0.4"
xkbcommon = "0.9"
[[bin]]
name = "yali-rs"
path = "src/main.rs"
[[bin]]
name = "slides_test"
path = "src/bin/slides_test.rs"
[patch.crates-io]
# Yerel mudur veya comar-api kütüphaneleri buraya eklenebilir
-2
View File
@@ -131,8 +131,6 @@ install: release
# .desktop girdisi
install -Dm644 assets/yali.desktop $(DESTDIR)$(DESKTOPDIR)/yali.desktop
# Logo (pixmap)
install -Dm644 assets/yali.png $(DESTDIR)$(PIXMAPDIR)/yali.png
@echo "$(BOLD)$(GREEN)✓ Kurulum tamamlandı$(RESET)"
+12 -1
View File
@@ -34,6 +34,10 @@ cargo run --release -- --demo
# Otomatik kurulum (cevap dosyası ile)
sudo cargo run --release -- --auto-install answer.toml
# Slayt gösterisi testi (bağımsız pencere, root gerekmez)
cargo run --bin slides_test [desktop] [lang]
# Örn: cargo run --bin slides_test xfce en
```
## Proje Yapısı
@@ -41,9 +45,12 @@ sudo cargo run --release -- --auto-install answer.toml
```
├── src/
│ ├── main.rs # Giriş noktası, eframe App, GUI düzeni
│ ├── lib.rs # Kütüphane kökü (yedek DLL yapısı için ayrıldı)
│ ├── installer.rs # InstallerStep trait'i, GlobalState, WelcomeStep
│ ├── funct.rs # Paylaşılan UI yardımcıları (form alanları, dil seçici)
│ ├── branding.rs # Branding.toml yükleyici (logo, slayt, tema, OEM)
│ ├── bin/
│ │ └── slides_test.rs # Slayt gösterisi test aracı (bağımsız ikili)
│ ├── ui/
│ │ ├── theme.rs # Renkler, fontlar, Visuals, section_heading, error/warning/success kutuları
│ │ ├── buttons.rs # Gradient butonlar (primary, secondary, danger, vb.)
@@ -71,10 +78,14 @@ sudo cargo run --release -- --auto-install answer.toml
├── locales/
│ ├── tr.toml # Türkçe çeviriler
│ └── en.toml # İngilizce çeviriler
├── slides/
│ ├── img/ # Slayt görselleri (PNG)
│ ├── slides_tr.toml # Türkçe slayt içeriği
│ └── slides_en.toml # İngilizce slayt içeriği
├── assets/
│ ├── icons/ # UI ikonları (YALI_icon_LIGHT.svg, language-icon.svg, vb.)
│ ├── flags/ # Ülke bayrakları (~250 SVG)
│ └── *.png # Slayt ve logo görselleri
│ └── pisi-logo-*.png # Dağıtım logoları (branding `[general]`)
├── branding.toml # Varsayılan markalama yapılandırması
├── branding_en.toml # İngilizce markalama
├── branding_tr.toml # Türkçe markalama
+12 -1
View File
@@ -31,6 +31,10 @@ 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
@@ -38,9 +42,12 @@ sudo cargo run --release -- --auto-install answer.toml
```
├── 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.)
@@ -68,10 +75,14 @@ sudo cargo run --release -- --auto-install answer.toml
├── 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)
│ └── *.png # Slide and logo images
│ └── pisi-logo-*.png # Distribution logos (branding `[general]`)
├── branding.toml # Default branding configuration
├── branding_en.toml # English branding
├── branding_tr.toml # Turkish branding
+6 -6
View File
@@ -2,14 +2,14 @@
<!-- Generator: Adobe Illustrator 27.7.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Optimized" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 841.8897705 595.2755737" style="enable-background:new 0 0 841.8897705 595.2755737;" xml:space="preserve">
<polygon style="fill:#020203;" points="512.5472412,488.2385864 542.3688354,537.3009033 558.0941772,491.724762 "/>
<path style="fill:#020203;" d="M277.7966003,213.2223663c-1.1176147-1.0975342,1.4554749,8.9684143,5.0365906,12.5897064
<polygon style="fill:#FFFFFF;" points="512.5472412,488.2385864 542.3688354,537.3009033 558.0941772,491.724762 "/>
<path style="fill:#FFFFFF;" d="M277.7966003,213.2223663c-1.1176147-1.0975342,1.4554749,8.9684143,5.0365906,12.5897064
c6.3496399,6.4062805,11.3096008,7.23172,13.9502563,7.3376465c5.8437805,0.2337646,13.0553894-1.4554596,17.3377991-3.2506104
c4.1435852-1.767746,11.404541-5.4748993,14.1529236-10.8822479c0.5825195-1.1559601,2.1731262-3.0972137,1.1742859-7.8927765
c-0.7579041-3.6888733-3.1064148-4.980011-5.9698181-4.7754517c-2.8634644,0.1935883-11.5323792,2.5055237-15.7253113,3.7948151
c-4.1947021,1.2728424-12.8344116,3.9025269-16.6000366,4.7188416
C287.3968811,215.6767426,279.1151123,214.4842987,277.7966003,213.2223663z"/>
<path style="fill:#020203;" d="M383.9637451,333.5533752c-1.6582031-0.6026001-35.9649353-14.8140564-40.828064-17.1424255
<path style="fill:#FFFFFF;" d="M383.9637451,333.5533752c-1.6582031-0.6026001-35.9649353-14.8140564-40.828064-17.1424255
c-3.979248-1.9137573-13.7365417-6.0391541-18.3276062-7.9127808c12.9312439-19.9383545,21.0942688-34.984314,22.1808472-37.276123
c2.0106506-4.1929321,15.697876-30.9757843,16.0174561-32.6248322c0.3104858-1.6709595,0.6994324-7.8434601,0.3981323-9.3098907
c-0.3013-1.495636-5.3196411,1.3787689-12.1331482,3.6889343c-6.8244629,2.3009491-19.7940674,10.7361145-24.8032837,11.7934723
@@ -26,7 +26,7 @@
c2.0288696,0.8454895,18.4335022,14.2113342,22.7140503,17.1734619c4.2806396,2.9602051,21.172821,12.3851318,24.832489,13.9483643
c3.6596985,1.5832825,17.7249756,8.0681152,18.3166809,5.8730469
C388.7592468,347.1237793,385.6236877,334.1834412,383.9637451,333.5533752z"/>
<path style="fill-rule:evenodd;clip-rule:evenodd;fill:#020203;" d="M304.6889954,512.2145996
<path style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;" d="M304.6889954,512.2145996
c3.2871399,2.0087891,6.3916626,3.6523438,9.8614197,5.2958984c6.9394836,3.4697876,14.7920837,7.1221313,22.2794495,9.8614502
c10.2266541,3.8349609,20.4532776,6.9395142,30.6799316,9.3135376c5.6611633,1.2783203,11.8701782,2.3740234,17.8966064,3.2871094
c0.5478516,0,16.8009033,2.0087891,20.0880432,2.0087891h16.4356689c6.3916321-0.5478516,12.4180603-0.9130859,18.8096924-1.8261719
@@ -43,7 +43,7 @@
c-12.6006775-4.7481079-25.7492065-10.9571533-38.1672668-19.1749878c-2.1914062-1.4609375-2.3740234-2.921875-2.3740234-4.5654297
c0-2.7392883,2.0087891-5.2959595,5.295929-5.2959595C297.7495117,507.4664917,303.5932922,511.6667175,304.6889954,512.2145996z"/>
<g>
<path style="fill:#020203;" d="M639.8383789,180.4025879l-40.7682495-12.975708V48.3634644
<path style="fill:#FFFFFF;" d="M639.8383789,180.4025879l-40.7682495-12.975708V48.3634644
c0-3.4697266-2.5567017-5.843811-5.843811-5.843811c-2.5567017,0-84.9176636,28.3059082-91.4918823,30.6799316
c-22.3344727,7.4448242-86.798645,29.7334595-86.798645,29.7334595l-0.000061,0.0002441
c-1.0336304,0.2964478-2.6376953,0.7871704-4.7411499,1.4482422L252.854248,48.8499756
@@ -57,6 +57,6 @@
V182.0402222l199.0542603-66.2905273V409.4003296z M587.9303589,55.6682129v108.2130737l-164.4921875-52.3546143
L587.9303589,55.6682129z M567.6870728,385.267334l-10.5206299-38.4284668l-60.5161133-18.3422241l-13.0134277,31.3044434
l-29.2919922-8.8861084l62.1779785-152.5870361l28.5085449,8.6360474l51.9385376,187.1876831L567.6870728,385.267334z"/>
<polygon style="fill:#020203;" points="507.8375244,300.3788452 547.7670288,312.4828491 529.5562744,247.8833618 "/>
<polygon style="fill:#FFFFFF;" points="507.8375244,300.3788452 547.7670288,312.4828491 529.5562744,247.8833618 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

-309
View File
@@ -22,315 +22,6 @@ pisi_logo_light = "assets/pisi-logo-light.png"
# Kurulum penceresinin başlığı (pencere çubuğu)
title = "PiSi Linux Kurulumu"
# ──────────────────────────────────────────────────────────────────
# [slides] Kurulum sırasında gösterilen slaytlar
# ──────────────────────────────────────────────────────────────────
[slides]
# Slayt geçiş süresi (saniye)
interval_secs = 6
# ── Slayt ikonları → görsel dosya yolu eşlemesi ──────────────────
# Geliştirici notu: Yeni ikon eklemek için sadece buraya satır ekle.
[slides.icons]
pisilogo_dark = "assets/pisi-logo-dark.png"
pisilogo_light = "assets/pisi-logo-light.png"
pisi = "assets/pisi-software-center.png"
community = "assets/community.png"
pisi_speed = "assets/pisi_speed.png"
securety = "assets/securety.png"
customization = "assets/customization.png"
budgie = "assets/budgie.png"
budgie_applets = "assets/budgie_applets.png"
budgie_raven = "assets/budgie_raven.png"
budgie_gtk_theme = "assets/budgie_gtk_theme.png"
cinnamon = "assets/cinnamon.png"
cinnamon_panel = "assets/cinnamon_panel.png"
cinnamon_settings = "assets/cinnamon_settings.png"
cinnamon_desklets = "assets/cinnamon_desklets.png"
gnome = "assets/gnome.png"
gnome_search = "assets/gnome_search.png"
gnome_extensions = "assets/gnome_extensions.png"
kde = "assets/kde.png"
kde_connect = "assets/kde_connect.png"
discover = "assets/discover.png"
file_manager = "assets/file_manager.png"
lxde = "assets/lxde.png"
lxqt = "assets/lxqt.png"
lumina = "assets/lumina.png"
mate = "assets/mate.png"
mate_settings = "assets/mate_settings.png"
xfce = "assets/xfce.png"
xfce_settings = "assets/xfce_settings.png"
xfce_panel = "assets/xfce_panel.png"
# ══════════════════════════════════════════════════════════════════
# [[slides.items]] Slayt içerikleri
# ══════════════════════════════════════════════════════════════════
#
# Her [[slides.items]] bloğu bir slaytı tanımlar.
#
# Alanlar:
# icon = Görsel için yukarıdaki [slides.icons] anahtarı
# title = Slayt başlığı
# description = Slayt açıklama metni
# desktop = (isteğe bağlı) Yalnızca belirli masaüstünde göster.
# Boş bırakılırsa tüm masaüstlerinde gösterilir.
# Değerler: "xfce", "kde", "gnome", "mate", "budgie",
# "cinnamon", "lxde", "lxqt", "lumina"
#
# Geliştirici notu:
# Yeni bir slayt eklemek veya metni değiştirmek için yalnızca
# buraya [[slides.items]] bloğu ekleyin / düzenleyin.
# Rust koduna dokunmanıza gerek yoktur.
# ──────────────────────────────────────────────────────────────────
# ── Tüm masaüstlerinde gösterilen ortak slaytlar ──────────────────
[[slides.items]]
icon = "pisilogo"
title = "Pisi GNU/Linux'a Hoş Geldiniz"
description = "Pisi; hız, kararlılık ve kullanım kolaylığını bir araya getiren Türkçe destekli bir GNU/Linux dağıtımıdır."
[[slides.items]]
icon = "pisi"
title = "PISI Paket Yöneticisi"
description = "Binlerce pakete tek komutla erişin. `pisi install <paket>` ile ihtiyacınız olan her şeyi kolayca kurabilirsiniz."
[[slides.items]]
icon = "community"
title = "Topluluk Desteği"
description = "forum.pisilinux.org adresindeki aktif topluluğumuz sorularınızı yanıtlamak için hazır. Wiki sayfalarımız da her an erişilebilir."
[[slides.items]]
icon = "pisi_speed"
title = "Hız ve Performans"
description = "Optimize edilmiş çekirdek ve başlangıç servisleri sayesinde PisiLinux saniyeler içinde açılır ve minimum kaynak kullanır."
[[slides.items]]
icon = "securety"
title = "Güvenlik Önce Gelir"
description = "Düzenli güvenlik güncellemeleri, AppArmor profilleri ve güvenli varsayılan ayarlarla sisteminizi koruyun."
[[slides.items]]
icon = "customization"
title = "Özelleştirme"
description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın."
# ── XFCE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "xfce"
icon = "xfce"
title = "PisiLinux XFCE"
description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[slides.items]]
desktop = "xfce"
icon = "xfce_panel"
title = "XFCE Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında."
[[slides.items]]
desktop = "xfce"
icon = "file_manager"
title = "Thunar Dosya Yöneticisi"
description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar."
[[slides.items]]
desktop = "xfce"
icon = "xfce_settings"
title = "Ayarlar Merkezi"
description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin."
# ── KDE Plasma ────────────────────────────────────────────────────
[[slides.items]]
desktop = "kde"
icon = "kde"
title = "PisiLinux KDE Plasma"
description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında."
[[slides.items]]
desktop = "kde"
icon = "file_manager"
title = "Dolphin Dosya Yöneticisi"
description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır."
[[slides.items]]
desktop = "kde"
icon = "kde_connect"
title = "KDE Bağlan"
description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün."
[[slides.items]]
desktop = "kde"
icon = "discover"
title = "Discover Yazılım Merkezi"
description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin."
# ── GNOME ─────────────────────────────────────────────────────────
[[slides.items]]
desktop = "gnome"
icon = "gnome"
title = "PisiLinux GNOME"
description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun."
[[slides.items]]
desktop = "gnome"
icon = "gnome_search"
title = "GNOME Arama"
description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın."
[[slides.items]]
desktop = "gnome"
icon = "gnome_extensions"
title = "GNOME Eklentileri"
description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin."
# ── MATE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "mate"
icon = "mate"
title = "PisiLinux MATE"
description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar."
[[slides.items]]
desktop = "mate"
icon = "file_manager"
title = "Caja Dosya Yöneticisi"
description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar."
[[slides.items]]
desktop = "mate"
icon = "mate_settings"
title = "MATE Ayarları"
description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin."
[[slides.items]]
desktop = "mate"
icon = "customization"
title = "Zengin Uygulama Paketi"
description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar."
# ── Budgie ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "budgie"
icon = "budgie"
title = "PisiLinux Budgie"
description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur."
[[slides.items]]
desktop = "budgie"
icon = "budgie_applets"
title = "Budgie Desktop Applets"
description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin."
[[slides.items]]
desktop = "budgie"
icon = "budgie_raven"
title = "Raven Bildirim Merkezi"
description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin."
[[slides.items]]
desktop = "budgie"
icon = "budgie_gtk_theme"
title = "GTK Tema Desteği"
description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar."
# ── Cinnamon ──────────────────────────────────────────────────────
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon"
title = "PisiLinux Cinnamon"
description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_panel"
title = "Cinnamon Paneli"
description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_settings"
title = "Ayarlar Yöneticisi"
description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_desklets"
title = "Cinnamon Desklets"
description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın."
# ── LXQt ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxqt"
icon = "lxqt"
title = "PisiLinux LXQt"
description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[slides.items]]
desktop = "lxqt"
icon = "file_manager"
title = "LXQt Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında."
[[slides.items]]
desktop = "lxqt"
icon = "file_manager"
title = "PCManFM-Qt Dosya Yöneticisi"
description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar."
# ── LXDE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxde"
icon = "lxde"
title = "PisiLinux LXDE"
description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır."
[[slides.items]]
desktop = "lxde"
icon = "lxde"
title = "Openbox Tabanlı"
description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar."
[[slides.items]]
desktop = "lxde"
icon = "file_manager"
title = "PCManFM Dosya Yöneticisi"
description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler."
# ── Lumina ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lumina"
icon = "lumina"
title = "PisiLinux Lumina"
description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam."
[[slides.items]]
desktop = "lumina"
icon = "customization"
title = "Tema Özelleştirme"
description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin."
# ──────────────────────────────────────────────────────────────────
# [theme] Arayüz renk şeması (Hex)
# ──────────────────────────────────────────────────────────────────
-298
View File
@@ -20,304 +20,6 @@ title = "YALI Installation Wizard"
# Subtitle displayed in the left sidebar
subtitle = "YALI"
# ──────────────────────────────────────────────────────────────────
# [slides] Slides shown during installation
# ──────────────────────────────────────────────────────────────────
[slides]
# Slide transition duration (seconds)
interval_secs = 6
# ── Slide Icons → File Path Mappings ─────────────────────────────
[slides.icons]
pisilogo = "assets/pisilinux-logo.png"
pisi = "assets/pisi-software-center.png"
community = "assets/community.png"
pisi_speed = "assets/pisi_speed.png"
securety = "assets/securety.png"
customization = "assets/customization.png"
# Masaüstü İkonları
budgie = "assets/budgie.png"
budgie_applets = "assets/budgie_applets.png"
budgie_raven = "assets/budgie_raven.png"
budgie_gtk_theme = "assets/budgie_gtk_theme.png"
cinnamon = "assets/cinnamon.png"
cinnamon_panel = "assets/cinnamon_panel.png"
cinnamon_settings = "assets/cinnamon_settings.png"
cinnamon_desklets = "assets/cinnamon_desklets.png"
gnome = "assets/gnome.png"
gnome_search = "assets/gnome_search.png"
gnome_extensions = "assets/gnome_extensions.png"
kde = "assets/kde.png"
file_manager = "assets/file_manager.png"
kde_connect = "assets/kde_connect.png"
discover = "assets/discover.png"
lxde = "assets/lxde.png"
lxde_openbox = "assets/lxde_openbox.png"
lxde_lxpanel = "assets/lxde_lxpanel.png"
lxqt = "assets/lxqt.png"
lxqt_panel = "assets/lxqt_panel.png"
lumina = "assets/lumina.png"
lumina_applications = "assets/lumina_applications.png"
lumina_theme = "assets/lumina_theme.png"
lumina_panel = "assets/lumina_panel.png"
mate = "assets/mate.png"
mate_settings = "assets/mate_settings.png"
mate_applications = "assets/mate_applications.png"
xfce = "assets/xfce.png"
xfce_panel = "assets/xfce_panel.png"
xfce_settings = "assets/xfce_settings.png"
# ── Common Slides ────────────────────────────────────────────────
[[slides.items]]
icon = "pisilogo"
title = "Welcome to Pisi GNU/Linux"
description = "Pisi is a Turkish-supported GNU/Linux distribution that combines speed, stability, and ease of use."
[[slides.items]]
icon = "pisi"
title = "PISI Package Manager"
description = "Access thousands of packages with a single command. Install anything you need easily with `pisi install <package>`."
[[slides.items]]
icon = "community"
title = "Community Support"
description = "Our active community at forum.pisilinux.org is ready to answer your questions. Our wiki pages are always accessible."
[[slides.items]]
icon = "pisi_speed"
title = "Speed & Performance"
description = "Thanks to an optimized kernel and startup services, PisiLinux boots in seconds and uses minimal resources."
[[slides.items]]
icon = "securety"
title = "Security First"
description = "Keep your system secure with regular security updates, AppArmor profiles, and secure default settings."
[[slides.items]]
icon = "customization"
title = "Customization"
description = "Tailor everything to your taste — from the desktop environment and theme colors to panel layout and keyboard shortcuts."
# ── Budgie ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "budgie"
icon = "budgie"
title = "PisiLinux Budgie"
description = "A modern, clean, and elegant Budgie desktop. Built on the GNOME stack and user-friendly."
[[slides.items]]
desktop = "budgie"
icon = "budgie_applets"
title = "Budgie Desktop Applets"
description = "Easily add tools like weather, system monitor, and calendar via Budgie's panel applets."
[[slides.items]]
desktop = "budgie"
icon = "budgie_raven"
title = "Raven Notification Center"
description = "Access volume, media controls, notifications, and quick settings from the Raven panel."
[[slides.items]]
desktop = "budgie"
icon = "budgie_gtk_theme"
title = "GTK Theme Support"
description = "Budgie runs GTK themes and GNOME applications seamlessly, ensuring visual consistency."
# ── Cinnamon ──────────────────────────────────────────────────────
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon"
title = "PisiLinux Cinnamon"
description = "Cinnamon combines the traditional desktop experience with modern features, offering a powerful and flexible environment."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_panel"
title = "Cinnamon Panel"
description = "Customize your panel with applets, launchers, and system indicators for a classic yet powerful desktop."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_settings"
title = "Settings Manager"
description = "Fine-tune every aspect of your Cinnamon desktop through the comprehensive Settings Manager."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_desklets"
title = "Cinnamon Desklets"
description = "Keep notes, clocks, and system info always visible on your desktop with Cinnamon Desklets."
# ── GNOME ─────────────────────────────────────────────────────────
[[slides.items]]
desktop = "gnome"
icon = "gnome"
title = "PisiLinux GNOME"
description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment."
[[slides.items]]
desktop = "gnome"
icon = "gnome_search"
title = "GNOME Search"
description = "Press the Super key and start typing. Instantly reach applications, files, and settings."
[[slides.items]]
desktop = "gnome"
icon = "gnome_extensions"
title = "GNOME Extensions"
description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org."
# ── KDE ───────────────────────────────────────────────────────────
[[slides.items]]
desktop = "kde"
icon = "kde"
title = "PisiLinux KDE Plasma"
description = "Meet the modern, customizable, and powerful KDE Plasma desktop. Everything is at your fingertips."
[[slides.items]]
desktop = "kde"
icon = "file_manager"
title = "Dolphin File Manager"
description = "Dolphin makes managing your files easy with tabbed browsing, dual-panel view, and powerful search."
[[slides.items]]
desktop = "kde"
icon = "kde_connect"
title = "KDE Connect"
description = "Connect your phone to your computer. Notifications, file transfer, and clipboard sharing — all with KDE Connect."
[[slides.items]]
desktop = "kde"
icon = "discover"
title = "Discover Software Center"
description = "Easily find, install, and update applications from the visual interface with Discover."
# ── LXQt ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxqt"
icon = "lxqt"
title = "PisiLinux LXQt"
description = "A lightweight, fast, and modern LXQt desktop environment. Low resource consumption, high performance."
[[slides.items]]
desktop = "lxqt"
icon = "lxqt_panel"
title = "LXQt Panel"
description = "The traditional panel layout puts the taskbar, application launcher, and system tray always within reach."
[[slides.items]]
desktop = "lxqt"
icon = "file_manager"
title = "PCManFM-Qt File Manager"
description = "Manage files effortlessly with the lightweight and fast PCManFM-Qt. Tabbed navigation and a customizable interface."
# ── LXDE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxde"
icon = "lxde"
title = "PisiLinux LXDE"
description = "The legendary lightweight LXDE desktop. Known for extremely low resource usage and a reliable build."
[[slides.items]]
desktop = "lxde"
icon = "lxde_openbox"
title = "Openbox-Based"
description = "LXDE uses the Openbox window manager. Fine-tune it for a smooth and responsive experience."
[[slides.items]]
desktop = "lxde"
icon = "file_manager"
title = "PCManFM File Manager"
description = "PCManFM speeds up your file operations with its fast and lightweight build, supporting tree view and tabs."
# ── Lumina ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lumina"
icon = "lumina"
title = "PisiLinux Lumina"
description = "A lightweight and independent Lumina desktop. Qt-based, designed to run cleanly on BSD and Linux systems."
[[slides.items]]
desktop = "lumina"
icon = "lumina_applications"
title = "Application Support"
description = "Lumina works well with core utilities and many popular Qt apps, providing a practical everyday experience."
[[slides.items]]
desktop = "lumina"
icon = "lumina_theme"
title = "Theme Customization"
description = "Easily customize color schemes and interface styles with Lumina's flexible theme system."
[[slides.items]]
desktop = "lumina"
icon = "lumina_panel"
title = "Lumina Panel"
description = "A clean panel with a taskbar, application launcher, and system tray keeps your desktop organized."
# ── MATE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "mate"
icon = "mate"
title = "PisiLinux MATE"
description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience."
[[slides.items]]
desktop = "mate"
icon = "file_manager"
title = "Caja File Manager"
description = "Manage your files easily with MATE's powerful Caja. Dual panel, tabbed navigation, and rich features."
[[slides.items]]
desktop = "mate"
icon = "mate_settings"
title = "MATE Settings"
description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard, and more."
[[slides.items]]
desktop = "mate"
icon = "mate_applications"
title = "Rich Application Suite"
description = "MATE comes with a rich set of classic applications — from text editors to image viewers, all well-integrated."
# ── XFCE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "xfce"
icon = "xfce"
title = "PisiLinux XFCE"
description = "A lightweight, fast, and user-friendly XFCE desktop environment. Low resource consumption, high performance."
[[slides.items]]
desktop = "xfce"
icon = "xfce_panel"
title = "XFCE Panel"
description = "The traditional panel layout puts the taskbar, application menu, and system tray always within reach."
[[slides.items]]
desktop = "xfce"
icon = "file_manager"
title = "Thunar File Manager"
description = "Manage your files easily with the fast and lightweight Thunar. Tree view, tabbed navigation, and customizable features."
[[slides.items]]
desktop = "xfce"
icon = "xfce_settings"
title = "Whisker Menu"
description = "A modern alternative to the classic application menu. Find apps easily and organize your favorites with Whisker Menu."
# ──────────────────────────────────────────────────────────────────
# [theme] UI Style & Color Palette
# ──────────────────────────────────────────────────────────────────
-303
View File
@@ -30,309 +30,6 @@ subtitle = "YALI"
# ──────────────────────────────────────────────────────────────────
[slides]
# Slayt geçiş süresi (saniye)
interval_secs = 6
# ── Slayt ikonları → görsel dosya yolu eşlemesi ──────────────────
# Geliştirici notu: Yeni ikon eklemek için sadece buraya satır ekle.
[slides.icons]
pisilogo = "assets/pisilinux-logo.png"
pisi = "assets/pisi-software-center.png"
community = "assets/community.png"
pisi_speed = "assets/pisi_speed.png"
securety = "assets/securety.png"
customization = "assets/customization.png"
budgie = "assets/budgie.png"
budgie_applets = "assets/budgie_applets.png"
budgie_raven = "assets/budgie_raven.png"
budgie_gtk_theme = "assets/budgie_gtk_theme.png"
cinnamon = "assets/cinnamon.png"
cinnamon_panel = "assets/cinnamon_panel.png"
cinnamon_settings = "assets/cinnamon_settings.png"
cinnamon_desklets = "assets/cinnamon_desklets.png"
gnome = "assets/gnome.png"
gnome_search = "assets/gnome_search.png"
gnome_extensions = "assets/gnome_extensions.png"
kde = "assets/kde.png"
kde_connect = "assets/kde_connect.png"
discover = "assets/discover.png"
file_manager = "assets/file_manager.png"
lxde = "assets/lxde.png"
lxqt = "assets/lxqt.png"
lumina = "assets/lumina.png"
mate = "assets/mate.png"
mate_settings = "assets/mate_settings.png"
xfce = "assets/xfce.png"
xfce_settings = "assets/xfce_settings.png"
xfce_panel = "assets/xfce_panel.png"
# ══════════════════════════════════════════════════════════════════
# [[slides.items]] Slayt içerikleri
# ══════════════════════════════════════════════════════════════════
#
# Her [[slides.items]] bloğu bir slaytı tanımlar.
#
# Alanlar:
# icon = Görsel için yukarıdaki [slides.icons] anahtarı
# title = Slayt başlığı
# description = Slayt açıklama metni
# desktop = (isteğe bağlı) Yalnızca belirli masaüstünde göster.
# Boş bırakılırsa tüm masaüstlerinde gösterilir.
# Değerler: "xfce", "kde", "gnome", "mate", "budgie",
# "cinnamon", "lxde", "lxqt", "lumina"
#
# Geliştirici notu:
# Yeni bir slayt eklemek veya metni değiştirmek için yalnızca
# buraya [[slides.items]] bloğu ekleyin / düzenleyin.
# Rust koduna dokunmanıza gerek yoktur.
# ──────────────────────────────────────────────────────────────────
# ── Tüm masaüstlerinde gösterilen ortak slaytlar ──────────────────
[[slides.items]]
icon = "pisilogo"
title = "Pisi GNU/Linux'a Hoş Geldiniz"
description = "Pisi; hız, kararlılık ve kullanım kolaylığını bir araya getiren Türkçe destekli bir GNU/Linux dağıtımıdır."
[[slides.items]]
icon = "pisi"
title = "PISI Paket Yöneticisi"
description = "Binlerce pakete tek komutla erişin. `pisi install <paket>` ile ihtiyacınız olan her şeyi kolayca kurabilirsiniz."
[[slides.items]]
icon = "community"
title = "Topluluk Desteği"
description = "forum.pisilinux.org adresindeki aktif topluluğumuz sorularınızı yanıtlamak için hazır. Wiki sayfalarımız da her an erişilebilir."
[[slides.items]]
icon = "pisi_speed"
title = "Hız ve Performans"
description = "Optimize edilmiş çekirdek ve başlangıç servisleri sayesinde PisiLinux saniyeler içinde açılır ve minimum kaynak kullanır."
[[slides.items]]
icon = "securety"
title = "Güvenlik Önce Gelir"
description = "Düzenli güvenlik güncellemeleri, AppArmor profilleri ve güvenli varsayılan ayarlarla sisteminizi koruyun."
[[slides.items]]
icon = "customization"
title = "Özelleştirme"
description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın."
# ── XFCE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "xfce"
icon = "xfce"
title = "PisiLinux XFCE"
description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[slides.items]]
desktop = "xfce"
icon = "xfce_panel"
title = "XFCE Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında."
[[slides.items]]
desktop = "xfce"
icon = "file_manager"
title = "Thunar Dosya Yöneticisi"
description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar."
[[slides.items]]
desktop = "xfce"
icon = "xfce_settings"
title = "Ayarlar Merkezi"
description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin."
# ── KDE Plasma ────────────────────────────────────────────────────
[[slides.items]]
desktop = "kde"
icon = "kde"
title = "PisiLinux KDE Plasma"
description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında."
[[slides.items]]
desktop = "kde"
icon = "file_manager"
title = "Dolphin Dosya Yöneticisi"
description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır."
[[slides.items]]
desktop = "kde"
icon = "kde_connect"
title = "KDE Bağlan"
description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün."
[[slides.items]]
desktop = "kde"
icon = "discover"
title = "Discover Yazılım Merkezi"
description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin."
# ── GNOME ─────────────────────────────────────────────────────────
[[slides.items]]
desktop = "gnome"
icon = "gnome"
title = "PisiLinux GNOME"
description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun."
[[slides.items]]
desktop = "gnome"
icon = "gnome_search"
title = "GNOME Arama"
description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın."
[[slides.items]]
desktop = "gnome"
icon = "gnome_extensions"
title = "GNOME Eklentileri"
description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin."
# ── MATE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "mate"
icon = "mate"
title = "PisiLinux MATE"
description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar."
[[slides.items]]
desktop = "mate"
icon = "file_manager"
title = "Caja Dosya Yöneticisi"
description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar."
[[slides.items]]
desktop = "mate"
icon = "mate_settings"
title = "MATE Ayarları"
description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin."
[[slides.items]]
desktop = "mate"
icon = "customization"
title = "Zengin Uygulama Paketi"
description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar."
# ── Budgie ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "budgie"
icon = "budgie"
title = "PisiLinux Budgie"
description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur."
[[slides.items]]
desktop = "budgie"
icon = "budgie_applets"
title = "Budgie Desktop Applets"
description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin."
[[slides.items]]
desktop = "budgie"
icon = "budgie_raven"
title = "Raven Bildirim Merkezi"
description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin."
[[slides.items]]
desktop = "budgie"
icon = "budgie_gtk_theme"
title = "GTK Tema Desteği"
description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar."
# ── Cinnamon ──────────────────────────────────────────────────────
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon"
title = "PisiLinux Cinnamon"
description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_panel"
title = "Cinnamon Paneli"
description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_settings"
title = "Ayarlar Yöneticisi"
description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin."
[[slides.items]]
desktop = "cinnamon"
icon = "cinnamon_desklets"
title = "Cinnamon Desklets"
description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın."
# ── LXQt ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxqt"
icon = "lxqt"
title = "PisiLinux LXQt"
description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[slides.items]]
desktop = "lxqt"
icon = "file_manager"
title = "LXQt Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında."
[[slides.items]]
desktop = "lxqt"
icon = "file_manager"
title = "PCManFM-Qt Dosya Yöneticisi"
description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar."
# ── LXDE ──────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lxde"
icon = "lxde"
title = "PisiLinux LXDE"
description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır."
[[slides.items]]
desktop = "lxde"
icon = "lxde"
title = "Openbox Tabanlı"
description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar."
[[slides.items]]
desktop = "lxde"
icon = "file_manager"
title = "PCManFM Dosya Yöneticisi"
description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler."
# ── Lumina ────────────────────────────────────────────────────────
[[slides.items]]
desktop = "lumina"
icon = "lumina"
title = "PisiLinux Lumina"
description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam."
[[slides.items]]
desktop = "lumina"
icon = "customization"
title = "Tema Özelleştirme"
description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin."
# ──────────────────────────────────────────────────────────────────
# [theme] Arayüz renk şeması (Hex)
# ──────────────────────────────────────────────────────────────────
+1 -1
View File
@@ -98,7 +98,7 @@ finish_title = "Installation Complete"
# ── Execution (extra) ─────────────────────────────────────
install_failed = "Installation failed"
install_done = "Installation complete! Click Next to continue."
install_current_file = "Current file"
install_current_file = "Copy file"
retry_install = "Retry"
finish_next = "Finish →"
+1 -1
View File
@@ -97,7 +97,7 @@ finish_title = "Kurulum Tamamlandı"
# ── Execution (ek) ────────────────────────────────────────
install_failed = "Kurulum başarısız"
install_done = "Kurulum tamamlandı! Devam etmek için İleri'ye basın."
install_current_file = "İşlemdeki dosya"
install_current_file = "Kopyalanan dosya"
retry_install = "Yeniden Dene"
finish_next = "Tamamlandı →"

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

+243
View File
@@ -0,0 +1,243 @@
# ╔══════════════════════════════════════════════════════════════════╗
# ║ Yali-RS — Slide Content (English) ║
# ╚══════════════════════════════════════════════════════════════════╝
# Slide transition duration (seconds)
interval_secs = 6
[[items]]
icon = "slides/img/pisilinux-logo.png"
title = "Welcome to Pisi GNU/Linux"
description = "Pisi is a Turkish-supported GNU/Linux distribution that combines speed, stability, and ease of use."
[[items]]
icon = "slides/img/pisi-software-center.png"
title = "PISI Package Manager"
description = "Access thousands of packages with a single command. Install anything you need easily with `pisi install <package>`."
[[items]]
icon = "slides/img/community.png"
title = "Community Support"
description = "Our active community at forum.pisilinux.org is ready to answer your questions. Our wiki pages are always accessible."
[[items]]
icon = "slides/img/pisi_speed.png"
title = "Speed & Performance"
description = "Thanks to an optimized kernel and startup services, PisiLinux boots in seconds and uses minimal resources."
[[items]]
icon = "slides/img/securety.png"
title = "Security First"
description = "Keep your system secure with regular security updates, AppArmor profiles, and secure default settings."
[[items]]
icon = "slides/img/customization.png"
title = "Customization"
description = "Tailor everything to your taste — from the desktop environment and theme colors to panel layout and keyboard shortcuts."
# ── Budgie ────────────────────────────────────────────────────────
[[items]]
desktop = "budgie"
icon = "slides/img/budgie.png"
title = "PisiLinux Budgie"
description = "A modern, clean, and elegant Budgie desktop. Built on the GNOME stack and user-friendly."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_applets.png"
title = "Budgie Desktop Applets"
description = "Easily add tools like weather, system monitor, and calendar via Budgie's panel applets."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_raven.png"
title = "Raven Notification Center"
description = "Access volume, media controls, notifications, and quick settings from the Raven panel."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_gtk_theme.png"
title = "GTK Theme Support"
description = "Budgie runs GTK themes and GNOME applications seamlessly, ensuring visual consistency."
# ── Cinnamon ──────────────────────────────────────────────────────
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon.png"
title = "PisiLinux Cinnamon"
description = "Cinnamon combines the traditional desktop experience with modern features, offering a powerful and flexible environment."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_panel.png"
title = "Cinnamon Panel"
description = "Customize your panel with applets, launchers, and system indicators for a classic yet powerful desktop."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_settings.png"
title = "Settings Manager"
description = "Fine-tune every aspect of your Cinnamon desktop through the comprehensive Settings Manager."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_desklets.png"
title = "Cinnamon Desklets"
description = "Keep notes, clocks, and system info always visible on your desktop with Cinnamon Desklets."
# ── GNOME ─────────────────────────────────────────────────────────
[[items]]
desktop = "gnome"
icon = "slides/img/gnome.png"
title = "PisiLinux GNOME"
description = "Reduce distractions and focus on your work with the clean and focused GNOME desktop environment."
[[items]]
desktop = "gnome"
icon = "slides/img/gnome_search.png"
title = "GNOME Search"
description = "Press the Super key and start typing. Instantly reach applications, files, and settings."
[[items]]
desktop = "gnome"
icon = "slides/img/gnome_extensions.png"
title = "GNOME Extensions"
description = "Shape your desktop to your needs with hundreds of extensions from extensions.gnome.org."
# ── KDE ───────────────────────────────────────────────────────────
[[items]]
desktop = "kde"
icon = "slides/img/kde.png"
title = "PisiLinux KDE Plasma"
description = "Meet the modern, customizable, and powerful KDE Plasma desktop. Everything is at your fingertips."
[[items]]
desktop = "kde"
icon = "slides/img/file_manager.png"
title = "Dolphin File Manager"
description = "Dolphin makes managing your files easy with tabbed browsing, dual-panel view, and powerful search."
[[items]]
desktop = "kde"
icon = "slides/img/kde_connect.png"
title = "KDE Connect"
description = "Connect your phone to your computer. Notifications, file transfer, and clipboard sharing — all with KDE Connect."
[[items]]
desktop = "kde"
icon = "slides/img/discover.png"
title = "Discover Software Center"
description = "Easily find, install, and update applications from the visual interface with Discover."
# ── LXQt ──────────────────────────────────────────────────────────
[[items]]
desktop = "lxqt"
icon = "slides/img/lxqt.png"
title = "PisiLinux LXQt"
description = "A lightweight, fast, and modern LXQt desktop environment. Low resource consumption, high performance."
[[items]]
desktop = "lxqt"
icon = "slides/img/lxqt_panel.png"
title = "LXQt Panel"
description = "The traditional panel layout puts the taskbar, application launcher, and system tray always within reach."
[[items]]
desktop = "lxqt"
icon = "slides/img/file_manager.png"
title = "PCManFM-Qt File Manager"
description = "Manage files effortlessly with the lightweight and fast PCManFM-Qt. Tabbed navigation and a customizable interface."
# ── LXDE ──────────────────────────────────────────────────────────
[[items]]
desktop = "lxde"
icon = "slides/img/lxde.png"
title = "PisiLinux LXDE"
description = "The legendary lightweight LXDE desktop. Known for extremely low resource usage and a reliable build."
[[items]]
desktop = "lxde"
icon = "slides/img/lxde_openbox.png"
title = "Openbox-Based"
description = "LXDE uses the Openbox window manager. Fine-tune it for a smooth and responsive experience."
[[items]]
desktop = "lxde"
icon = "slides/img/file_manager.png"
title = "PCManFM File Manager"
description = "PCManFM speeds up your file operations with its fast and lightweight build, supporting tree view and tabs."
# ── Lumina ────────────────────────────────────────────────────────
[[items]]
desktop = "lumina"
icon = "slides/img/lumina.png"
title = "PisiLinux Lumina"
description = "A lightweight and independent Lumina desktop. Qt-based, designed to run cleanly on BSD and Linux systems."
[[items]]
desktop = "lumina"
icon = "slides/img/lumina_applications.png"
title = "Application Support"
description = "Lumina works well with core utilities and many popular Qt apps, providing a practical everyday experience."
[[items]]
desktop = "lumina"
icon = "slides/img/lumina_theme.png"
title = "Theme Customization"
description = "Easily customize color schemes and interface styles with Lumina's flexible theme system."
[[items]]
desktop = "lumina"
icon = "slides/img/lumina_panel.png"
title = "Lumina Panel"
description = "A clean panel with a taskbar, application launcher, and system tray keeps your desktop organized."
# ── MATE ──────────────────────────────────────────────────────────
[[items]]
desktop = "mate"
icon = "slides/img/mate.png"
title = "PisiLinux MATE"
description = "MATE for those who love the traditional desktop layout. Developed with GTK+ 3 for a modern and smooth experience."
[[items]]
desktop = "mate"
icon = "slides/img/file_manager.png"
title = "Caja File Manager"
description = "Manage your files easily with MATE's powerful Caja. Dual panel, tabbed navigation, and rich features."
[[items]]
desktop = "mate"
icon = "slides/img/mate_settings.png"
title = "MATE Settings"
description = "Customize your MATE desktop with comprehensive settings for appearance, display, keyboard, and more."
[[items]]
desktop = "mate"
icon = "slides/img/mate_applications.png"
title = "Rich Application Suite"
description = "MATE comes with a rich set of classic applications — from text editors to image viewers, all well-integrated."
# ── XFCE ──────────────────────────────────────────────────────────
[[items]]
desktop = "xfce"
icon = "slides/img/xfce.png"
title = "PisiLinux XFCE"
description = "A lightweight, fast, and user-friendly XFCE desktop environment. Low resource consumption, high performance."
[[items]]
desktop = "xfce"
icon = "slides/img/xfce_panel.png"
title = "XFCE Panel"
description = "The traditional panel layout puts the taskbar, application menu, and system tray always within reach."
[[items]]
desktop = "xfce"
icon = "slides/img/file_manager.png"
title = "Thunar File Manager"
description = "Manage your files easily with the fast and lightweight Thunar. Tree view, tabbed navigation, and customizable features."
[[items]]
desktop = "xfce"
icon = "slides/img/xfce_settings.png"
title = "Whisker Menu"
description = "A modern alternative to the classic application menu. Find apps easily and organize your favorites with Whisker Menu."
+240
View File
@@ -0,0 +1,240 @@
# ╔══════════════════════════════════════════════════════════════════╗
# ║ Yali-RS — Slayt İçerikleri (Türkçe) ║
# ╚══════════════════════════════════════════════════════════════════╝
# Slayt geçiş süresi (saniye)
interval_secs = 12
[[items]]
icon = "slides/img/pisilinux-logo.png"
title = "Pisi GNU/Linux'a Hoş Geldiniz"
description = "Pisi GNU/Linux; Türkiye'nin ilk yerli paket yönetim sistemi olan, PiSi tabanlı, özgür yazılım topluluğu tarafından geliştirilen, kolay kurulum, kolay kullanım ve günlük masaüstü gereksinimlerini karşılamaya odaklanan, son kullanıcıya yönelik bir Linux dağıtımıdır."
[[items]]
icon = "slides/img/pisi-software-center.png"
title = "Yerli Yazılım Bileşenleri"
description = "Yerli yazılım bileşenleriyle donatılmış olan Pisi GNU/Linux; kurulum yazılımı YALI, ayar sihirbazı KAPTAN, sistemin hızlı açılmasını sağlayan MÜDÜR ve donanım ayarları için kullanılan ÇOMAR gibi özgün teknolojileriyle öne çıkan yerli bir GNU/Linux dağıtımıdır."
[[items]]
icon = "slides/img/community.png"
title = "Geniş Yazılım Deposu"
description = "Pisi GNU/Linux, geniş yazılım deposu sayesinde kullanıcıların ihtiyaç duyduğu binlerce uygulamayı sunar ve bunları düzenli olarak güncel tutar."
[[items]]
icon = "slides/img/pisi_speed.png"
title = "Modern Masaüstü Deneyimi"
description = "Özgür ve açık kaynaklı Pisi GNU/Linux, varsayılan olarak modern ve kapsamlı özellikler sunan KDE Plasma masaüstü ortamıyla gelir. Daha düşük sistem kaynakları tüketen bir masaüstü tercih eden kullanıcılar için ise hafif, hızlı ve özelleştirilebilir XFCE masaüstü ortamı da alternatif olarak sunulmaktadır."
[[items]]
icon = "slides/img/securety.png"
title = "Çok Yönlü Kullanım"
description = "Pisi GNU/Linux; evde, ofiste ve günlük kullanımda rahatlıkla kullanılabilen çok yönlü bir işletim sistemidir. Müzik, film, 3D modelleme, grafik tasarım ve profesyonel uygulamalar için güçlü bir altyapı sunarken, oyun tutkunları için de kapsamlı bir oyun platformu sağlar."
[[items]]
icon = "slides/img/customization.png"
title = "Özelleştirme"
description = "Masaüstü ortamından tema renklerine, panel düzeninden klavye kısayollarına kadar her şeyi zevkinize göre ayarlayın."
# ── XFCE ──────────────────────────────────────────────────────────
[[items]]
desktop = "xfce"
icon = "slides/img/xfce.png"
title = "PisiLinux XFCE"
description = "Hafif, hızlı ve kullanıcı dostu XFCE masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[items]]
desktop = "xfce"
icon = "slides/img/xfce_panel.png"
title = "XFCE Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama menüsü ve sistem tepsisi her zaman elinizin altında."
[[items]]
desktop = "xfce"
icon = "slides/img/file_manager.png"
title = "Thunar Dosya Yöneticisi"
description = "Hızlı ve hafif Thunar ile dosya işlemlerinizi kolayca yapın. Ağaç görünümü, sekmeli gezinme ve özelleştirilebilir özellikler sunar."
[[items]]
desktop = "xfce"
icon = "slides/img/xfce_settings.png"
title = "Ayarlar Merkezi"
description = "Klasik uygulama menüsüne modern bir alternatif. Whisker Menu ile uygulamaları kolayca bulun, favorilerinizi düzenleyin."
# ── KDE Plasma ────────────────────────────────────────────────────
[[items]]
desktop = "kde"
icon = "slides/img/kde.png"
title = "PisiLinux KDE Plasma"
description = "Modern, özelleştirilebilir ve güçlü KDE Plasma masaüstü ortamıyla tanışın. Her şey elinizin altında."
[[items]]
desktop = "kde"
icon = "slides/img/file_manager.png"
title = "Dolphin Dosya Yöneticisi"
description = "Sekmeli gezinme, ikili panel ve güçlü arama özelliğiyle Dolphin dosyalarınızı yönetmeyi kolaylaştırır."
[[items]]
desktop = "kde"
icon = "slides/img/kde_connect.png"
title = "KDE Bağlan"
description = "Telefonunuzu bilgisayarınıza bağlayın. Bildirimler, dosya aktarımı ve klipboard paylaşımı KDE Connect ile mümkün."
[[items]]
desktop = "kde"
icon = "slides/img/discover.png"
title = "Discover Yazılım Merkezi"
description = "Discover ile uygulamaları görsel arayüzden kolayca bulun, kurun ve güncelleyin."
# ── GNOME ─────────────────────────────────────────────────────────
[[items]]
desktop = "gnome"
icon = "slides/img/gnome.png"
title = "PisiLinux GNOME"
description = "Sade ve odaklı GNOME masaüstü ortamı ile dikkat dağıtıcı unsurları azaltın, işinize konsantre olun."
[[items]]
desktop = "gnome"
icon = "slides/img/gnome_search.png"
title = "GNOME Arama"
description = "Super tuşuna basıp yazmaya başlayın. Uygulama, dosya ve ayarlara anında ulaşın."
[[items]]
desktop = "gnome"
icon = "slides/img/gnome_extensions.png"
title = "GNOME Eklentileri"
description = "extensions.gnome.org adresinden yüzlerce eklentiyle masaüstünüzü ihtiyaçlarınıza göre şekillendirin."
# ── MATE ──────────────────────────────────────────────────────────
[[items]]
desktop = "mate"
icon = "slides/img/mate.png"
title = "PisiLinux MATE"
description = "Geleneksel masaüstü düzenini sevenler için MATE. GTK+ 3 ile geliştirilmiş, modern ve akıcı bir deneyim sunar."
[[items]]
desktop = "mate"
icon = "slides/img/file_manager.png"
title = "Caja Dosya Yöneticisi"
description = "MATE'in güçlü dosya yöneticisi Caja ile dosya işlemlerinizi kolayca yapın. Çift panel, sekmeli gezinme ve geniş özellikler sunar."
[[items]]
desktop = "mate"
icon = "slides/img/mate_settings.png"
title = "MATE Ayarları"
description = "Görünüm, ekran, klavye ve daha fazlası için kapsamlı ayarlarla MATE masaüstünüzü özelleştirin."
[[items]]
desktop = "mate"
icon = "slides/img/customization.png"
title = "Zengin Uygulama Paketi"
description = "MATE; metin editöründen görüntü görüntüleme yazılımına kadar geniş, iyi entegre edilmiş klasik uygulamalar sunar."
# ── Budgie ────────────────────────────────────────────────────────
[[items]]
desktop = "budgie"
icon = "slides/img/budgie.png"
title = "PisiLinux Budgie"
description = "Modern, sade ve şık Budgie masaüstü. GNOME altyapısı üzerine inşa edilmiş, kullanıcı dostudur."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_applets.png"
title = "Budgie Desktop Applets"
description = "Budgie'nin panel appletleri sayesinde hava durumu, sistem izleyici, takvim gibi araçları kolayca ekleyin."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_raven.png"
title = "Raven Bildirim Merkezi"
description = "Raven panelinden ses seviyesi, medya kontrolleri, bildirimler ve hızlı ayarlara erişin."
[[items]]
desktop = "budgie"
icon = "slides/img/budgie_gtk_theme.png"
title = "GTK Tema Desteği"
description = "Budgie, GTK temalarını ve GNOME uygulamalarını sorunsuz çalıştırır, görsel bütünlük sağlar."
# ── Cinnamon ──────────────────────────────────────────────────────
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon.png"
title = "PisiLinux Cinnamon"
description = "Geleneksel masaüstü deneyimini modern özelliklerle birleştiren Cinnamon, güçlü ve esnek bir ortam sunar."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_panel.png"
title = "Cinnamon Paneli"
description = "Panelinizi applet'ler, başlatıcılar ve sistem göstergeleriyle özelleştirin; klasik ama güçlü bir masaüstü deneyimi yaşayın."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_settings.png"
title = "Ayarlar Yöneticisi"
description = "Cinnamon'un kapsamlı Ayarlar Yöneticisi aracılığıyla masaüstünüzün her yönünü özelleştirin."
[[items]]
desktop = "cinnamon"
icon = "slides/img/cinnamon_desklets.png"
title = "Cinnamon Desklets"
description = "Masaüstü widget'ları ile notlar, saatler ve sistem bilgileri her zaman görünür kalsın."
# ── LXQt ──────────────────────────────────────────────────────────
[[items]]
desktop = "lxqt"
icon = "slides/img/lxqt.png"
title = "PisiLinux LXQt"
description = "Hafif, hızlı ve modern LXQt masaüstü ortamı. Kaynak tüketimi düşük, performansı yüksektir."
[[items]]
desktop = "lxqt"
icon = "slides/img/file_manager.png"
title = "LXQt Panel"
description = "Geleneksel panel düzeni ile görev çubuğu, uygulama başlatıcı ve sistem tepsisi her zaman elinizin altında."
[[items]]
desktop = "lxqt"
icon = "slides/img/file_manager.png"
title = "PCManFM-Qt Dosya Yöneticisi"
description = "Hafif ve hızlı PCManFM-Qt ile dosya işlemlerini kolayca yönetin. Sekmeli gezinme ve özelleştirilebilir arayüz sunar."
# ── LXDE ──────────────────────────────────────────────────────────
[[items]]
desktop = "lxde"
icon = "slides/img/lxde.png"
title = "PisiLinux LXDE"
description = "Efsanevi hafif masaüstü LXDE. Çok düşük kaynak tüketimi ve güvenilir yapısıyla tanınır."
[[items]]
desktop = "lxde"
icon = "slides/img/lxde.png"
title = "Openbox Tabanlı"
description = "LXDE, Openbox pencere yöneticisini kullanır. İnce ayarlar ile akıcı bir deneyim sunar."
[[items]]
desktop = "lxde"
icon = "slides/img/file_manager.png"
title = "PCManFM Dosya Yöneticisi"
description = "PCManFM, hızlı ve hafif yapısıyla dosya işlemlerinizi kolaylaştırır, ağaç görünümü ve sekme destekler."
# ── Lumina ────────────────────────────────────────────────────────
[[items]]
desktop = "lumina"
icon = "slides/img/lumina.png"
title = "PisiLinux Lumina"
description = "Hafif ve bağımsız Lumina masa üstü. Qt tabanlı, BSD ve Linux sistemlerde düzgün çalışan minimal bir ortam."
[[items]]
desktop = "lumina"
icon = "slides/img/customization.png"
title = "Tema Özelleştirme"
description = "Lumina'nın tema sistemiyle renk şemaları ve arayüz stilini kolayca özelleştirin."
+83
View File
@@ -0,0 +1,83 @@
//! Slayt gösterisini test etmek için bağımsız GUI binary'si.
//!
//! Gerçek kurulum ekranındaki slideshow boyutlarında ve konumda görüntüler.
//!
//! Kullanım:
//! cargo run --bin slides_test [desktop] [lang]
//!
//! desktop: "default" (varsayılan), "kde", "gnome", "xfce", "mate" vb.
//! lang: "tr", "en" (varsayılan), "de" vb. — branding_{lang}.toml yüklenir
use eframe::egui;
fn main() -> eframe::Result<()> {
let args: Vec<String> = std::env::args().collect();
let desktop = args.get(1).cloned().unwrap_or_else(|| "default".to_string());
let lang = args.get(2).cloned().unwrap_or_else(|| "tr".to_string());
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default()
.with_inner_size([1200.0, 900.0])
.with_min_inner_size([1080.0, 720.0])
.with_title(format!("Slides Test - {} ({})", desktop, lang)),
..Default::default()
};
eframe::run_native(
"Slideshow Test",
options,
Box::new(move |cc| {
egui_extras::install_image_loaders(&cc.egui_ctx);
let branding = yali_rs::branding::BrandingConfig::load_for_lang(&lang);
let icons: std::collections::HashMap<String, String> = branding.slides.icons
.iter()
.map(|(k, v)| (k.clone(), yali_rs::branding::path_to_file_uri(v)))
.collect();
Box::new(SlidesApp {
slideshow: yali_rs::ui::slideshow::Slideshow::new(
&desktop,
icons,
branding.slides.items.clone(),
),
})
}),
)
}
struct SlidesApp {
slideshow: yali_rs::ui::slideshow::Slideshow,
}
impl eframe::App for SlidesApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default()
.frame(egui::Frame::none().fill(yali_rs::ui::theme::c_bg_dark()))
.show(ctx, |ui| {
let available_w = ui.available_width();
let available_h = ui.available_height();
let slide_h = (available_h * 0.45).max(280.0);
ui.allocate_ui(egui::vec2(available_w, slide_h), |ui| {
ui.vertical(|ui| {
ui.add_space(8.0);
yali_rs::ui::theme::section_heading(ui, "Slideshow Test");
ui.label(
egui::RichText::new("Gerçek kurulum boyutlarında slayt gösterisi")
.color(yali_rs::ui::theme::c_text_dim())
.size(13.0),
);
ui.add_space(16.0);
self.slideshow.show(ui);
ui.add_space(10.0);
ui.horizontal(|ui| {
if ui.small_button("").clicked() { self.slideshow.previous(); }
if ui.small_button("").clicked() { self.slideshow.advance(); }
});
});
});
});
}
}
+63 -10
View File
@@ -161,34 +161,87 @@ impl BrandingConfig {
"/usr/share/yali/branding.toml",
"branding.toml",
];
let mut config = BrandingConfig::default();
for path in &paths {
if let Ok(content) = std::fs::read_to_string(path) {
match toml::from_str(&content) {
Ok(cfg) => return cfg,
Ok(cfg) => { config = cfg; break; }
Err(e) => eprintln!("[branding] {}: {}", path, e),
}
}
}
BrandingConfig::default()
// slides/slides.toml varsa onu da yükle (öncelikli)
if let Some(content) = std::fs::read_to_string("slides/slides.toml").ok() {
if let Ok(slides) = toml::from_str::<SlidesConfig>(&content) {
if !slides.icons.is_empty() {
config.slides.icons = slides.icons;
}
if !slides.items.is_empty() {
config.slides.items = slides.items;
}
if slides.interval_secs > 0 {
config.slides.interval_secs = slides.interval_secs;
}
}
}
config
}
/// Belirtilen dile ait `branding_{lang}.toml` dosyasını arar ve yükler.
/// Bulunamazsa varsayılan `branding.toml` dosyasına geri döner.
/// Yükleme sonrası `slides/slides_{lang}.toml` varsa slides verilerini da buradan alır.
pub fn load_for_lang(lang: &str) -> Self {
let lang_paths = [
format!("/etc/yali/branding_{}.toml", lang),
format!("/usr/share/yali/branding_{}.toml", lang),
format!("branding_{}.toml", lang),
let mut config = {
let lang_paths = [
format!("/etc/yali/branding_{}.toml", lang),
format!("/usr/share/yali/branding_{}.toml", lang),
format!("branding_{}.toml", lang),
];
let mut found = None;
for path in &lang_paths {
if let Ok(content) = std::fs::read_to_string(path) {
match toml::from_str(&content) {
Ok(cfg) => { found = Some(cfg); break; }
Err(e) => eprintln!("[branding] {}: {}", path, e),
}
}
}
found.unwrap_or_else(Self::load)
};
// Harici slides dosyasını dene (slides/slides_{lang}.toml)
if let Some(slides) = Self::load_external_slides(lang) {
if !slides.icons.is_empty() {
config.slides.icons = slides.icons;
}
if !slides.items.is_empty() {
config.slides.items = slides.items;
}
if slides.interval_secs > 0 {
config.slides.interval_secs = slides.interval_secs;
}
}
config
}
/// `slides/slides_{lang}.toml` veya `slides/slides.toml` dosyasını yükler.
fn load_external_slides(lang: &str) -> Option<SlidesConfig> {
let paths = [
format!("slides/slides_{}.toml", lang),
"slides/slides.toml".to_string(),
];
for path in &lang_paths {
for path in &paths {
if let Ok(content) = std::fs::read_to_string(path) {
match toml::from_str(&content) {
Ok(cfg) => return cfg,
Err(e) => eprintln!("[branding] {}: {}", path, e),
Ok(cfg) => return Some(cfg),
Err(e) => eprintln!("[slides] {}: {}", path, e),
}
}
}
Self::load()
None
}
/// İkon adına göre dosya yolunu döner.
+2 -2
View File
@@ -25,7 +25,7 @@ pub fn form_input_text(
ui.spacing_mut().button_padding = eframe::egui::vec2(10.0, 10.0);
egui::Frame::none()
.fill(egui::Color32::from_rgb(255, 255, 255))
.stroke(egui::Stroke::new(1.0, egui::Color32::from_gray(200)))
.stroke(egui::Stroke::new(1.0_f32, egui::Color32::from_gray(200)))
.rounding(4.0)
.inner_margin(eframe::egui::Margin::symmetric(2.0, 2.0))
.show(ui, |ui| {
@@ -61,7 +61,7 @@ pub fn form_input_password(
eframe::egui::Frame::none()
.fill(eframe::egui::Color32::WHITE)
.stroke(eframe::egui::Stroke::new(1.0, eframe::egui::Color32::from_rgb(200, 200, 200)))
.stroke(eframe::egui::Stroke::new(1.0_f32, eframe::egui::Color32::from_rgb(200, 200, 200)))
.rounding(6.0)
.inner_margin(eframe::egui::Margin::symmetric(2.0, 2.0))
.show(ui, |ui| {
+140 -37
View File
@@ -13,6 +13,7 @@
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc;
use std::time::Instant;
use tokio::io::{AsyncBufReadExt, BufReader};
use tokio::process::Command;
use rust_i18n::t;
@@ -39,21 +40,43 @@ pub enum InstallMessage {
}
/// `mpsc::Sender<InstallMessage>` ile `egui::Context` birlikte taşır.
/// Her mesaj gönderiminde `request_repaint()` çağrısı UI'yi uyandırır.
#[derive(Clone)]
/// Mesaj gönderiminde `request_repaint()` çağrısı UI'yi uyandırır,
/// ancak en fazla saniyede ~30 kez (33ms aralıkla) olacak şekilde
/// throttle edilir. Bu, özellikle rsync gibi yoğun I/O işlemleri
/// sırasında Intel tümleşik GPU'lu (UMA) sistemlerde GPU belleği
/// rekabetini önler ve karakter bozulmasını engeller.
pub struct UiSender {
tx: mpsc::Sender<InstallMessage>,
ctx: eframe::egui::Context,
last_repaint: std::sync::Arc<std::sync::Mutex<Instant>>,
}
impl Clone for UiSender {
fn clone(&self) -> Self {
Self {
tx: self.tx.clone(),
ctx: self.ctx.clone(),
last_repaint: self.last_repaint.clone(),
}
}
}
impl UiSender {
pub fn new(tx: mpsc::Sender<InstallMessage>, ctx: eframe::egui::Context) -> Self {
Self { tx, ctx }
Self {
tx,
ctx,
last_repaint: std::sync::Arc::new(std::sync::Mutex::new(Instant::now())),
}
}
pub fn send(&self, msg: InstallMessage) {
let _ = self.tx.send(msg);
self.ctx.request_repaint();
let mut last = self.last_repaint.lock().unwrap();
if last.elapsed() >= std::time::Duration::from_millis(33) {
self.ctx.request_repaint();
*last = Instant::now();
}
}
pub fn log(&self, s: impl Into<String>) {
@@ -140,13 +163,81 @@ impl Job for CopyFilesJob {
fn name(&self) -> &str { "job_copy_files" }
async fn run(&self, ui: &UiSender) -> Result<(), String> {
ui.log(format!("[DEBUG] CopyFilesJob başladı"));
ui.log(format!("[DEBUG] Kaynak: '{}'", self.source));
ui.log(format!("[DEBUG] Hedef: '{}'", self.target));
// Kaynak dizini kontrol et
let source_path = std::path::Path::new(&self.source);
let source_exists = source_path.exists();
let source_readable = source_exists && source_path.is_dir();
ui.log(format!("[DEBUG] Kaynak mevcut: {}, dizin: {}", source_exists, source_readable));
if !source_exists {
ui.log(format!("[DEBUG] Kaynak dizin içeriği aranıyor..."));
// Kaynağın bir üst dizinini dene
let parent = source_path.parent();
if let Some(p) = parent {
if p.exists() {
if let Ok(entries) = std::fs::read_dir(p) {
for entry in entries.flatten().take(20) {
ui.log(format!("[DEBUG] /{:?}", entry.path()));
}
}
}
} else {
ui.log("[DEBUG] Kaynağın parent'ı yok (kök dizin olabilir)");
}
} else if source_readable {
// İlk 10 girdiyi listele
if let Ok(entries) = std::fs::read_dir(source_path) {
let mut count = 0;
for entry in entries.flatten().take(10) {
ui.log(format!("[DEBUG] {:?}", entry.path()));
count += 1;
}
ui.log(format!("[DEBUG] (ilk {} girdi listelendi)", count));
}
}
ui.log(format!("rsync {}{}", self.source, self.target));
let is_root_source = self.source.trim_end_matches('/') == "";
// ── Önce find ile toplam dosya sayısını bul ──────────
let find_path = self.source.trim_end_matches('/');
let find_path = if find_path.is_empty() { "/" } else { find_path };
let total_files = {
let mut cmd = Command::new("find");
cmd.arg(find_path).arg("-type").arg("f");
if is_root_source {
cmd.arg("-xdev");
}
cmd.stdout(std::process::Stdio::piped());
cmd.stderr(std::process::Stdio::null());
match cmd.spawn() {
Ok(mut c) => {
let stdout = c.stdout.take()
.ok_or_else(|| "find stdout alınamadı".to_string())?;
let r = BufReader::new(stdout);
let mut lines = r.lines();
let mut n: u64 = 0;
while let Ok(Some(_)) = lines.next_line().await {
n += 1;
}
let _ = c.wait().await;
// if n > 0 {
// ui.log(format!("{} dosya bulundu", n));
// }
n
}
Err(_) => 0
}
};
let mut args: Vec<String> = vec![
"-aAXH".to_string(),
"--info=progress2".to_string(),
"--out-format=%n".to_string(),
"--exclude=/proc/**".to_string(),
"--exclude=/sys/**".to_string(),
"--exclude=/dev/**".to_string(),
@@ -211,46 +302,53 @@ impl Job for CopyFilesJob {
.spawn()
.map_err(|e| format!("rsync çalıştırılamadı: {}", e))?;
let stdout = child.stdout.take()
.ok_or_else(|| "rsync stdout alınamadı".to_string())?;
let stderr = child.stderr.take()
.ok_or_else(|| "rsync stderr alınamadı".to_string())?;
let reader = BufReader::new(stderr);
// Stderr'i arka planda oku (hata birikimi ve tampon taşmasını engelle)
let stderr_buf = std::sync::Arc::new(tokio::sync::Mutex::new(String::new()));
let stderr_buf_clone = stderr_buf.clone();
tokio::spawn(async move {
let r = BufReader::new(stderr);
let mut lines = r.lines();
while let Ok(Some(l)) = lines.next_line().await {
let mut b = stderr_buf_clone.lock().await;
b.push_str(&l);
b.push('\n');
}
});
// Stdout: --out-format=%n ile her satır bir dosya adı
let reader = BufReader::new(stdout);
let mut lines = reader.lines();
let mut file_count: u64 = 0;
// Son UI güncellemesi — çok sık güncelleme GPU (özellikle Intel UMA) baskısını azaltır
let mut last_update = Instant::now();
while let Some(line) = lines.next_line().await
.map_err(|e| format!("rsync çıktısı okunamadı: {}", e))?
{
let trimmed = line.trim();
// rsync --info=progress2 format (newlines when piped):
// 1,024 100% 512.00kB/s 0:00:00 (xfr#5, to-chk=99/105)
// Extract xfr# and to-chk for sub-progress
if let Some(xfr_pos) = trimmed.find("xfr#") {
let after_xfr = &trimmed[xfr_pos + 4..];
let xfr_end = after_xfr.find(|c: char| !c.is_ascii_digit()).unwrap_or(after_xfr.len());
let xfr: u64 = after_xfr[..xfr_end].parse().unwrap_or(0);
if let Some(to_chk_pos) = trimmed.find("to-chk=") {
let after_to = &trimmed[to_chk_pos + 7..];
let slash_pos = after_to.find('/').unwrap_or(after_to.len());
let total_end = after_to[slash_pos + 1..]
.find(|c: char| !c.is_ascii_digit())
.unwrap_or(after_to[slash_pos + 1..].len());
let total: u64 = after_to[slash_pos + 1..][..total_end].parse().unwrap_or(1);
let p = if total > 0 {
(xfr as f32) / (total as f32)
} else {
0.0
};
ui.sub_progress(p.min(1.0));
}
let trimmed = line.trim().to_string();
if trimmed.is_empty() {
continue;
}
// Extract filename: lines starting with a path (not a number/space)
let first_char = trimmed.chars().next();
if let Some('/') = first_char {
ui.current_file(trimmed.to_string());
} else if trimmed.starts_with("./") || trimmed.starts_with("..") {
ui.current_file(trimmed.to_string());
file_count += 1;
let now = Instant::now();
if now.duration_since(last_update) >= std::time::Duration::from_millis(50)
|| file_count == 1
|| trimmed.contains("Packages") || trimmed.contains("package")
{
ui.current_file(trimmed);
last_update = now;
}
if total_files > 0 {
let p = (file_count as f32) / (total_files as f32);
ui.sub_progress(p.min(1.0));
}
}
@@ -258,7 +356,12 @@ impl Job for CopyFilesJob {
.map_err(|e| format!("rsync beklenemedi: {}", e))?;
if !status.success() {
return Err(format!("rsync çıkış kodu: {:?}", status.code()));
let err = stderr_buf.lock().await.clone();
return Err(format!(
"rsync çıkış kodu: {:?}. Hata: {}",
status.code(),
err.trim()
));
}
Ok(())
+9
View File
@@ -0,0 +1,9 @@
pub mod installer;
pub mod steps;
pub mod jobs;
pub mod ui;
pub mod autoinstall;
pub mod branding;
pub mod funct;
rust_i18n::i18n!("locales");
+9 -3
View File
@@ -188,8 +188,14 @@ fn run_auto_install(path: &str, demo_mode: bool) -> eframe::Result<()> {
print!("\r {}: [{:50}] {:.0}%", t!("progress"), "=".repeat((p * 50.0) as usize), p * 100.0);
let _ = std::io::Write::flush(&mut std::io::stdout());
}
Ok(InstallMessage::SubProgress(_)) => {}
Ok(InstallMessage::CurrentFile(_)) => {}
Ok(InstallMessage::SubProgress(p)) => {
print!("\r {}: [{:50}] {:.0}% ", t!("progress"), "=".repeat((p * 50.0) as usize), p * 100.0);
let _ = std::io::Write::flush(&mut std::io::stdout());
}
Ok(InstallMessage::CurrentFile(f)) => {
print!("\r {}: {} ", t!("install_current_file"), f);
let _ = std::io::Write::flush(&mut std::io::stdout());
}
Ok(InstallMessage::Done) => {
println!("\n\n{}: {}", t!("installation_done"), t!("installation_done_description"));
break;
@@ -432,7 +438,7 @@ impl eframe::App for YaliApp {
egui::TopBottomPanel::bottom("footer")
.frame(egui::Frame::none()
.fill(ui::theme::c_footer_bg())
.stroke(egui::Stroke::new(1.0, ui::theme::c_footer_bg())))
.stroke(egui::Stroke::new(1.0_f32, ui::theme::c_footer_bg())))
.show(ctx, |ui| {
ui.add_space(10.0);
ui.horizontal(|ui| {
+35 -31
View File
@@ -277,25 +277,46 @@ impl InstallerStep for ExecutionStep {
.inner_margin(egui::Margin::same(12.0))
.show(ui, |ui| {
ui.set_width(available_w - 4.0);
// Yüzde + adım etiketi
let step_label = state.install_log.last()
.cloned()
.unwrap_or_default();
ui.horizontal(|ui| {
ui.label(
egui::RichText::new(
format!("{:.0}%", state.install_progress * 100.0)
)
.strong()
.color(theme::c_accent()),
ui.label(
egui::RichText::new(&step_label)
.size(12.0)
.color(theme::c_text_dim()),
);
let pct = format!("{:.0}%", state.install_progress * 100.0);
let bar = ui.add(
egui::ProgressBar::new(state.install_progress)
.animate(running)
.desired_height(20.0),
);
ui.painter().text(
bar.rect.center(),
egui::Align2::CENTER_CENTER,
pct,
egui::FontId::proportional(14.0),
theme::c_text(),
);
if state.install_sub_progress > 0.0 {
let sub_pct = format!("{:.0}%", state.install_sub_progress * 100.0);
ui.add_space(4.0);
let sub_bar = ui.add(
egui::ProgressBar::new(state.install_sub_progress)
.animate(running)
.desired_height(20.0)
.fill(theme::c_accent_dim()),
);
ui.label(
egui::RichText::new(&step_label)
.size(12.0)
.color(theme::c_text_dim()),
ui.painter().text(
sub_bar.rect.center(),
egui::Align2::CENTER_CENTER,
sub_pct,
egui::FontId::proportional(12.0),
theme::c_text(),
);
});
}
if let Some(ref current_file) = state.install_current_file {
ui.add_space(4.0);
@@ -305,23 +326,6 @@ impl InstallerStep for ExecutionStep {
.color(theme::c_text_dim()),
);
}
ui.add_space(4.0);
ui.add(
egui::ProgressBar::new(state.install_progress)
.animate(running)
.desired_height(10.0),
);
if state.install_sub_progress > 0.0 {
ui.add_space(4.0);
ui.add(
egui::ProgressBar::new(state.install_sub_progress)
.animate(running)
.desired_height(6.0)
.fill(theme::c_accent_dim()),
);
}
});
// Durum etiketi
+236 -194
View File
@@ -3,7 +3,7 @@
use eframe::egui;
use rust_i18n::t;
use crate::ui::theme;
use crate::funct::{form_label, form_input_text};
use crate::funct::form_label;
// sysinfo::Disks mount point başına bir kayıt döndürür (partition'lar),
// ham disk listesi için lsblk kullanıyoruz.
@@ -438,7 +438,7 @@ impl PartitionStep {
egui::Color32::from_rgba_unmultiplied(237, 237, 224, 1)
})
.stroke(egui::Stroke::new(
if selected { 2.0 } else { 1.0 },
if selected { 2.0_f32 } else { 1.0_f32 },
if selected { crate::ui::theme::c_accent() } else { crate::ui::theme::c_border() },
))
.rounding(egui::Rounding::same(8.0))
@@ -503,96 +503,96 @@ impl PartitionStep {
partition_bar(ui, plan);
ui.add_space(8.0);
// Bootstrap 5 tarzı tablo
// Bootstrap 5 tarzı çizgili tablo
let col_widths = [0.40, 0.25, 0.35];
let tam_genislik = ui.available_width();
let header_color = egui::Color32::from_rgb(33, 37, 41); // dark bg
let header_color = egui::Color32::from_rgb(33, 37, 41);
let header_text = egui::Color32::WHITE;
let _border_stroke = egui::Stroke::new(1.0, crate::ui::theme::c_border());
let baslik_yukseklik = 36.0;
let satir_yukseklik = 34.0;
let headers = [t!("plan_col_part"), t!("plan_col_fs"), t!("plan_col_size")];
let grid = egui::Grid::new("plan_grid")
.num_columns(3)
.spacing([0.0, 0.0])
.min_col_width(0.0);
grid.show(ui, |ui| {
// ── Başlık satırı ─────────────────────────────────
let headers = [t!("plan_col_part"), t!("plan_col_fs"), t!("plan_col_size")];
for (j, h) in headers.into_iter().enumerate() {
let (rect, _) = ui.allocate_exact_size(
egui::vec2(tam_genislik * col_widths[j], 30.0),
egui::Sense::hover(),
);
let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::LEFT));
egui::Frame::none()
.fill(header_color)
.inner_margin(egui::Margin::symmetric(8.0, 4.0))
.show(child_ui, |ui| {
ui.label(egui::RichText::new(h)
.strong()
.color(header_text)
.size(13.0));
});
}
ui.end_row();
// ── Veri satırları ────────────────────────────────
struct Satir {
part: String,
fs: &'static str,
size: String,
}
let mut satirlar = Vec::new();
if plan.efi_mb > 0 {
satirlar.push(Satir {
part: format!("{}1 (EFI)", plan.disk),
fs: "FAT32",
size: format!("{} MB", plan.efi_mb),
});
}
let swap_part = if plan.efi_mb > 0 { 2 } else { 1 };
struct Satir {
part: String,
fs: &'static str,
size: String,
}
let mut satirlar = Vec::new();
if plan.efi_mb > 0 {
satirlar.push(Satir {
part: format!("{}{} (swap)", plan.disk, swap_part),
fs: "swap",
size: format!("{} MB", plan.swap_mb),
part: format!("{}1 (EFI)", plan.disk),
fs: "FAT32",
size: format!("{} MB", plan.efi_mb),
});
let root_part = swap_part + 1;
satirlar.push(Satir {
part: format!("{}{}{}", plan.disk, root_part, t!("plan_root_suffix")),
fs: "ext4",
size: format!("{:.1} GB", plan.root_mb as f64 / 1024.0),
});
for (row_idx, satir) in satirlar.iter().enumerate() {
let row_bg = if row_idx % 2 == 0 {
egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60)
} else {
egui::Color32::TRANSPARENT
};
let hucreler: [&str; 3] = [&satir.part, satir.fs, &satir.size];
for (j, deger) in hucreler.iter().enumerate() {
let (rect, _) = ui.allocate_exact_size(
egui::vec2(tam_genislik * col_widths[j], 34.0),
egui::Sense::hover(),
);
let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center));
egui::Frame::none()
.fill(row_bg)
.stroke(egui::Stroke::new(0.0, egui::Color32::TRANSPARENT))
.inner_margin(egui::Margin::symmetric(8.0, 4.0))
.show(child_ui, |ui| {
ui.vertical_centered(|ui| {
ui.label(egui::RichText::new(*deger).size(13.0).color(crate::ui::theme::c_text()));
});
});
}
// satır alt çizgisi
if row_idx < satirlar.len() - 1 {
ui.separator();
}
ui.end_row();
}
}
let swap_part = if plan.efi_mb > 0 { 2 } else { 1 };
satirlar.push(Satir {
part: format!("{}{} (swap)", plan.disk, swap_part),
fs: "swap",
size: format!("{} MB", plan.swap_mb),
});
let root_part = swap_part + 1;
satirlar.push(Satir {
part: format!("{}{}{}", plan.disk, root_part, t!("plan_root_suffix")),
fs: "ext4",
size: format!("{:.1} GB", plan.root_mb as f64 / 1024.0),
});
egui::Frame::none()
.stroke(egui::Stroke::new(1.0_f32, crate::ui::theme::c_border()))
.rounding(egui::Rounding::same(6.0))
.show(ui, |ui| {
let tam = ui.available_width();
ui.horizontal(|ui| {
ui.set_height(baslik_yukseklik);
ui.spacing_mut().item_spacing.x = 0.0;
for (j, h) in headers.iter().enumerate() {
let w = tam * col_widths[j];
let (rect, _) = ui.allocate_exact_size(
egui::vec2(w, baslik_yukseklik),
egui::Sense::hover(),
);
let mut cell_ui = ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center));
egui::Frame::none()
.fill(header_color)
.inner_margin(egui::Margin::symmetric(10.0, 6.0))
.show(&mut cell_ui, |ui| {
ui.vertical_centered(|ui| {
ui.label(egui::RichText::new(h.as_ref()).strong().color(header_text).size(14.0));
});
});
}
});
for (row_idx, satir) in satirlar.iter().enumerate() {
let row_bg = if row_idx % 2 == 0 {
egui::Color32::from_rgba_unmultiplied(60, 60, 80, 40)
} else {
egui::Color32::TRANSPARENT
};
let hucreler: [&str; 3] = [&satir.part, satir.fs, &satir.size];
ui.horizontal(|ui| {
ui.set_height(satir_yukseklik);
ui.spacing_mut().item_spacing.x = 0.0;
for (j, deger) in hucreler.iter().enumerate() {
let w = tam * col_widths[j];
let (rect, _) = ui.allocate_exact_size(
egui::vec2(w, satir_yukseklik),
egui::Sense::hover(),
);
let mut cell_ui = ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center));
egui::Frame::none()
.fill(row_bg)
.inner_margin(egui::Margin::symmetric(10.0, 4.0))
.show(&mut cell_ui, |ui| {
ui.vertical_centered(|ui| {
ui.label(egui::RichText::new(*deger).size(13.0).color(crate::ui::theme::c_text()));
});
});
}
});
}
});
ui.add_space(8.0);
ui.label(format!("{}: {}", t!("partition_table_type"), plan.table_type));
@@ -673,7 +673,7 @@ impl PartitionStep {
egui::Color32::from_rgba_unmultiplied(237, 237, 224, 1)
})
.stroke(egui::Stroke::new(
if selected { 2.0 } else { 1.0 },
if selected { 2.0_f32 } else { 1.0_f32 },
if selected { crate::ui::theme::c_accent() } else { crate::ui::theme::c_border() },
))
.rounding(egui::Rounding::same(8.0))
@@ -747,21 +747,18 @@ impl PartitionStep {
let tam_genislik = ui.available_width();
let header_color = egui::Color32::from_rgb(33, 37, 41);
let header_text = egui::Color32::WHITE;
let _border_stroke = egui::Stroke::new(1.0, crate::ui::theme::c_border());
let _border_stroke = egui::Stroke::new(1.0_f32, crate::ui::theme::c_border());
let grid = egui::Grid::new("manual_parts_grid")
.num_columns(5)
.spacing([0.0, 0.0])
.min_col_width(0.0);
grid.show(ui, |ui| {
// ── Başlık satırı ─────────────────────────────────
let headers: [String; 4] = [
t!("mp_device").to_string(),
t!("mp_size").to_string(),
t!("mp_fstype").to_string(),
t!("mp_mountpoint").to_string(),
];
// ── Başlık satırı ─────────────────────────────────
let headers: [String; 4] = [
t!("mp_device").to_string(),
t!("mp_size").to_string(),
t!("mp_fstype").to_string(),
t!("mp_mountpoint").to_string(),
];
ui.horizontal(|ui| {
ui.set_height(30.0);
ui.spacing_mut().item_spacing.x = 0.0;
for (j, h) in headers.into_iter().enumerate() {
let (rect, _) = ui.allocate_exact_size(
egui::vec2(tam_genislik * col_widths[j], 30.0),
@@ -770,94 +767,83 @@ impl PartitionStep {
let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center));
egui::Frame::none()
.fill(header_color)
.stroke(egui::Stroke::new(1.0, header_color))
.stroke(egui::Stroke::new(1.0_f32, header_color))
.inner_margin(egui::Margin::symmetric(8.0, 4.0))
.show(child_ui, |ui| {
ui.label(egui::RichText::new(h).strong().color(header_text).size(13.0));
});
}
ui.end_row();
// ── Veri satırları ────────────────────────────────
for (row_idx, part) in state.custom_partitions.iter().enumerate() {
let is_selected = self.manual.selected_idx == Some(row_idx);
let row_bg = if is_selected {
egui::Color32::from_rgba_unmultiplied(80, 100, 180, 80)
} else if row_idx % 2 == 0 {
egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60)
} else {
egui::Color32::TRANSPARENT
};
let size_str = if part.size_mb == 0 {
t!("mp_size_remaining").to_string()
} else if part.size_mb >= 1024 {
format!("{:.1} GB", part.size_mb as f64 / 1024.0)
} else {
format!("{} MB", part.size_mb)
};
let mut fstype_label = part.fstype.label().to_string();
if part.encrypt {
fstype_label = format!("🔐 {}", fstype_label);
}
let hucreler: [(String, bool); 5] = [
(part.device.clone(), false),
(size_str, false),
(fstype_label, false),
(part.mountpoint.clone(), false),
(String::new(), true), // action column - button
];
for (j, (deger, is_action)) in hucreler.iter().enumerate() {
let sense = if *is_action {
egui::Sense::click()
} else {
egui::Sense::click()
};
let (rect, response) = ui.allocate_exact_size(
egui::vec2(tam_genislik * col_widths[j], 34.0),
sense,
);
if !*is_action {
if response.clicked() {
self.manual.selected_idx = Some(row_idx);
}
response.on_hover_cursor(egui::CursorIcon::PointingHand);
}
let child_ui = &mut ui.child_ui(rect, egui::Layout::top_down(egui::Align::Center));
if *is_action {
egui::Frame::none()
.fill(egui::Color32::TRANSPARENT)
.inner_margin(egui::Margin::symmetric(8.0, 4.0))
.show(child_ui, |ui| {
ui.vertical_centered(|ui| {
ui.label(egui::RichText::new(deger).size(13.0).color(crate::ui::theme::c_text()));
});
});
} else {
egui::Frame::none()
.fill(row_bg)
.stroke(egui::Stroke::new(0.0, egui::Color32::TRANSPARENT))
.inner_margin(egui::Margin::symmetric(8.0, 4.0))
.show(child_ui, |ui| {
ui.vertical_centered(|ui| {
ui.label(egui::RichText::new(deger).size(13.0).color(crate::ui::theme::c_text()));
});
});
}
}
if row_idx < state.custom_partitions.len() - 1 {
ui.separator();
}
ui.end_row();
}
});
// ── Veri satırları ────────────────────────────────
for (row_idx, part) in state.custom_partitions.iter().enumerate() {
let is_selected = self.manual.selected_idx == Some(row_idx);
let row_bg = if is_selected {
egui::Color32::from_rgba_unmultiplied(80, 100, 180, 80)
} else if row_idx % 2 == 0 {
egui::Color32::from_rgba_unmultiplied(60, 60, 80, 60)
} else {
egui::Color32::TRANSPARENT
};
let size_str = if part.size_mb == 0 {
t!("mp_size_remaining").to_string()
} else if part.size_mb >= 1024 {
format!("{:.1} GB", part.size_mb as f64 / 1024.0)
} else {
format!("{} MB", part.size_mb)
};
let mut fstype_label = part.fstype.label().to_string();
if part.encrypt {
fstype_label = format!("🔐 {}", fstype_label);
}
// Entire row as a single clickable target (painter-based, no widget nesting)
let (row_rect, row_response) = ui.allocate_exact_size(
egui::vec2(tam_genislik, 34.0),
egui::Sense::click(),
);
if row_response.clicked() {
self.manual.selected_idx = Some(row_idx);
}
row_response.on_hover_cursor(egui::CursorIcon::PointingHand);
// Paint row background
let painter = ui.painter();
painter.rect_filled(row_rect, egui::Rounding::ZERO, row_bg);
// Paint cell texts directly (no child_ui/label widgets that steal clicks)
let cell_texts = [
part.device.as_str(),
size_str.as_str(),
fstype_label.as_str(),
part.mountpoint.as_str(),
"",
];
let mut x = row_rect.left();
for (j, text) in cell_texts.iter().enumerate() {
let cell_w = tam_genislik * col_widths[j];
let text_rect = egui::Rect::from_min_size(
egui::pos2(x + 8.0, row_rect.top() + 4.0),
egui::vec2(cell_w - 16.0, 26.0),
);
painter.text(
text_rect.center(),
egui::Align2::CENTER_CENTER,
*text,
egui::FontId::proportional(13.0),
crate::ui::theme::c_text(),
);
x += cell_w;
}
if row_idx < state.custom_partitions.len() - 1 {
ui.separator();
}
}
// ── Bölümleme Planı (manuel) ──────────────────────────
if !state.custom_partitions.is_empty() {
ui.add_space(12.0);
@@ -914,7 +900,6 @@ impl PartitionStep {
let next_num = state.custom_partitions.len() + 1;
self.manual.add_size_str.clear();
self.manual.add_mountpoint.clear();
self.manual.add_fstype = 0;
self.manual.add_encrypt = false;
self.manual.add_luks_password.clear();
self.manual.add_mountpoint = match next_num {
@@ -925,6 +910,11 @@ impl PartitionStep {
3 => "/".to_string(),
_ => String::new(),
};
self.manual.add_fstype = match self.manual.add_mountpoint.as_str() {
"swap" => FS_OPTIONS.iter().position(|(_, t)| *t == FsType::Swap).unwrap_or(0),
"/boot/efi" => FS_OPTIONS.iter().position(|(_, t)| *t == FsType::Fat32).unwrap_or(0),
_ => 0,
};
}
// Düzenle
@@ -965,8 +955,12 @@ impl PartitionStep {
egui::Window::new(title)
.collapsible(false)
.resizable(false)
.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
.default_size(egui::vec2(420.0, 300.0))
//.anchor(egui::Align2::CENTER_CENTER, [0.0, 0.0])
.default_pos(ui.ctx().screen_rect().center() - egui::vec2(210.0, 150.0))
.show(ui.ctx(), |ui| {
ui.set_min_width(420.0);
ui.set_max_width(420.0);
ui.label(t!("mp_fstype"));
let prev_fs = self.manual.add_fstype;
let fs_label = FS_OPTIONS.get(self.manual.add_fstype).map(|x| x.0).unwrap_or("?");
@@ -988,10 +982,22 @@ impl PartitionStep {
ui.add_space(6.0);
form_label(ui, &t!("mp_size_hint"));
ui.horizontal(|ui| {
form_input_text(ui, &mut self.manual.add_size_str);
ui.add_sized(
[160.0, 32.0], // Genişlik 160.0, Yükseklik 40.0 piksel
egui::TextEdit::singleline(&mut self.manual.add_size_str)
.text_color(egui::Color32::from_rgb(230, 230, 230))
.vertical_align(egui::Align::Center)
);
// ui.add(egui::TextEdit::singleline(&mut self.manual.add_size_str)
// .desired_width(120.0)
// .text_color(egui::Color32::from_rgb(230, 230, 230)));
let parsed: u64 = self.manual.add_size_str.trim().parse().unwrap_or(0);
if parsed > 0 {
let gb = parsed as f64 / 1024.0;
ui.label(format!("{} MB", format_number_thousands(parsed)));
ui.label(egui::RichText::new(format!("(≈ {:.1} GB)", gb))
.color(crate::ui::theme::c_text_dim())
.size(11.0));
} else {
ui.label("MB");
}
@@ -1017,6 +1023,8 @@ impl PartitionStep {
}
ui.add_space(6.0);
ui.separator();
ui.label(t!("mp_mountpoint"));
ui.horizontal(|ui| {
let current_mp = if self.manual.add_mountpoint.is_empty() {
@@ -1029,15 +1037,40 @@ impl PartitionStep {
theme::selectable_value(ui, &mut self.manual.add_mountpoint, mp.to_string(), *mp, w);
}
});
form_input_text(ui, &mut self.manual.add_mountpoint);
// ui.add(egui::TextEdit::singleline(&mut self.manual.add_mountpoint)
// .desired_width(160.0)
// .text_color(egui::Color32::from_rgb(230, 230, 230)));
ui.add_sized(
[160.0, 32.0], // Genişlik 160.0, Yükseklik 40.0 piksel
egui::TextEdit::singleline(&mut self.manual.add_mountpoint)
.text_color(egui::Color32::from_rgb(230, 230, 230))
.vertical_align(egui::Align::Center)
);
});
// mountpoint "swap" seçildiğinde FS tipini otomatik swap yap
let mp = self.manual.add_mountpoint.trim().to_lowercase();
let current_fs = FS_OPTIONS.get(self.manual.add_fstype).map(|x| &x.1);
let idx = |fs: FsType| FS_OPTIONS.iter().position(|(_, t)| *t == fs).unwrap_or(0);
if mp == "swap" && current_fs != Some(&FsType::Swap) {
self.manual.add_fstype = idx(FsType::Swap);
} else if mp == "/boot/efi" && current_fs != Some(&FsType::Fat32) {
self.manual.add_fstype = idx(FsType::Fat32);
}
ui.add_space(6.0);
ui.label(t!("luks_enable_root"));
ui.separator();
let fstype = FS_OPTIONS.get(self.manual.add_fstype).map(|x| x.1.clone()).unwrap_or(FsType::Ext4);
let can_encrypt = matches!(fstype, FsType::Ext4 | FsType::Ext3 | FsType::Btrfs | FsType::Xfs);
// ui.label(t!("luks_enable_root"));
// ui.add_enabled_ui(can_encrypt, |ui| {
// ui.checkbox(&mut self.manual.add_encrypt, "");
// });
ui.add_enabled_ui(can_encrypt, |ui| {
ui.checkbox(&mut self.manual.add_encrypt, "");
// Checkbox'ı yazısıyla birlikte tek bir bileşen olarak ekliyoruz:
ui.checkbox(&mut self.manual.add_encrypt, t!("luks_enable_root"));
});
if !can_encrypt { self.manual.add_encrypt = false; }
@@ -1047,18 +1080,27 @@ impl PartitionStep {
let pw = &mut self.manual.add_luks_password;
ui.horizontal(|ui| {
if self.show_luks_password {
ui.text_edit_singleline(pw);
ui.add_sized(
[200.0, 32.0], // Genişlik 200.0, Yükseklik 32.0 piksel
egui::TextEdit::singleline(pw)
);
} else {
ui.add(egui::TextEdit::singleline(pw).password(true));
}
let eye = if self.show_luks_password { "🙈" } else { "👁" };
if ui.small_button(eye).clicked() {
self.show_luks_password = !self.show_luks_password;
ui.add_sized(
[200.0, 32.0], // Genişlik 200.0, Yükseklik 32.0 piksel
egui::TextEdit::singleline(pw).password(true)
.text_color(egui::Color32::from_rgb(230, 230, 230))
.vertical_align(egui::Align::Center)
);
let eye = if self.show_luks_password { "🙈" } else { "👁" };
if ui.small_button(eye).clicked() {
self.show_luks_password = !self.show_luks_password;
}
}
});
}
ui.add_space(8.0);
ui.separator();
ui.horizontal(|ui| {
let ok_label = if is_edit { t!("mp_save") } else { t!("mp_add_btn") };
if theme::primary_button(ui, &ok_label).clicked() {
+1 -1
View File
@@ -56,7 +56,7 @@ fn gradient_button(ui: &mut egui::Ui, text: &str, top_color: Color32, bottom_col
ui.painter().rect(strip_rect, Rounding::ZERO, c, Stroke::NONE);
}
ui.painter().rect(rect, rounding, Color32::TRANSPARENT, Stroke::new(1.0, actual_border));
ui.painter().rect(rect, rounding, Color32::TRANSPARENT, Stroke::new(1.0_f32, actual_border));
ui.painter().galley(
egui::pos2(rect.center().x - galley.size().x / 2.0, rect.center().y - galley.size().y / 2.0),
+6 -6
View File
@@ -7,13 +7,13 @@ pub fn apply_visuals(v: &mut egui::Visuals) {
v.widgets.hovered.weak_bg_fill = Color32::from_rgb(200, 200, 200);
v.widgets.active.weak_bg_fill = Color32::from_rgb(180, 180, 180);
v.widgets.inactive.fg_stroke = Stroke::new(1.0, Color32::from_rgb(50, 50, 50));
v.widgets.hovered.fg_stroke = Stroke::new(1.5, Color32::WHITE);
v.widgets.active.fg_stroke = Stroke::new(2.0, Color32::WHITE);
v.widgets.inactive.fg_stroke = Stroke::new(1.0_f32, Color32::from_rgb(50, 50, 50));
v.widgets.hovered.fg_stroke = Stroke::new(1.5_f32, Color32::WHITE);
v.widgets.active.fg_stroke = Stroke::new(2.0_f32, Color32::WHITE);
v.widgets.inactive.bg_stroke = Stroke::new(1.0, Color32::from_rgb(155, 155, 155));
v.widgets.hovered.bg_stroke = Stroke::new(1.0, Color32::from_rgb(155, 155, 155));
v.widgets.active.bg_stroke = Stroke::new(1.0, Color32::from_rgb(155, 155, 155));
v.widgets.inactive.bg_stroke = Stroke::new(1.0_f32, Color32::from_rgb(155, 155, 155));
v.widgets.hovered.bg_stroke = Stroke::new(1.0_f32, Color32::from_rgb(155, 155, 155));
v.widgets.active.bg_stroke = Stroke::new(1.0_f32, Color32::from_rgb(155, 155, 155));
}
fn is_dark_ui(ui: &egui::Ui) -> bool {
+1 -1
View File
@@ -68,7 +68,7 @@ impl ErrorScreen {
// ── Hata mesajı ───────────────────────────────
egui::Frame::none()
.fill(egui::Color32::from_rgba_unmultiplied(0xF4, 0x43, 0x36, 18))
.stroke(egui::Stroke::new(1.0, theme::c_error()))
.stroke(egui::Stroke::new(1.0_f32, theme::c_error()))
.rounding(egui::Rounding::same(8.0))
.inner_margin(egui::Margin::same(12.0))
.show(ui, |ui| {
+52 -3
View File
@@ -338,8 +338,15 @@ impl Slideshow {
let slide = &self.slides[self.current];
// İkona karşılık gelen URI'yi branding haritasından al
let resolved_uri = self.icons.get(slide.icon).cloned();
// İkona karşılık gelen URI: önce branding haritasından, yoksa doğrudan dosya yolu olarak dene
let resolved_uri = self.icons.get(slide.icon).cloned()
.or_else(|| {
if slide.icon.contains('/') || slide.icon.contains('\\') {
Some(crate::branding::path_to_file_uri(slide.icon))
} else {
None
}
});
egui::Frame::none()
.fill(crate::ui::theme::c_bg_widget())
@@ -356,8 +363,50 @@ impl Slideshow {
.rounding(egui::Rounding::same(8.0)),
);
} else {
let emoji = match slide.icon {
"pisilogo" | "pisi" => "\u{1f427}",
"community" => "\u{1f465}",
"pisi_speed" => "\u{26a1}",
"securety" => "\u{1f512}",
"customization" => "\u{1f3a8}",
"budgie" => "\u{1f98e}",
"budgie_applets" => "\u{1f9e9}",
"budgie_raven" => "\u{1f426}",
"budgie_gtk_theme" => "\u{1f3ad}",
"cinnamon" => "\u{1f36e}",
"cinnamon_panel" => "\u{1f4cb}",
"cinnamon_settings" => "\u{2699}\u{fe0f}",
"cinnamon_desklets" => "\u{1f4cc}",
"gnome" => "\u{1f9d1}\u{200d}\u{1f4bb}",
"gnome_search" => "\u{1f50d}",
"gnome_extensions" => "\u{1f9e9}",
"kde" => "\u{1f48e}",
"file_manager" => "\u{1f4c1}",
"kde_connect" => "\u{1f4f1}",
"discover" => "\u{1f6cd}\u{fe0f}",
"lxde" => "\u{1f5a5}\u{fe0f}",
"lxde_openbox" => "\u{1f4e6}",
"lxde_lxpanel" => "\u{1f4ca}",
"lxde_pcmanfm" => "\u{1f4c2}",
"lxqt" => "\u{1f5a5}\u{fe0f}",
"lxqt_panel" => "\u{1f4cb}",
"lxqt_pcmanfm_qt" => "\u{1f4c2}",
"lumina" => "\u{1f31f}",
"lumina_applications" => "\u{1f4f1}",
"lumina_theme" => "\u{1f3a8}",
"lumina_panel" => "\u{1f4cb}",
"mate" => "\u{1f9c9}",
"mate_caja" => "\u{1f4c2}",
"mate_settings" => "\u{2699}\u{fe0f}",
"mate_applications" => "\u{1f4f1}",
"xfce" => "\u{1f42d}",
"xfce_panel" => "\u{1f4cb}",
"xfce_thunar" => "\u{1f4c2}",
"xfce_settings" => "\u{2699}\u{fe0f}",
_ => "\u{1f5bc}\u{fe0f}",
};
ui.label(
egui::RichText::new(slide.icon)
egui::RichText::new(emoji)
.size(48.0),
);
}
+8 -8
View File
@@ -187,7 +187,7 @@ fn build_visuals(is_dark: bool) -> Visuals {
v.override_text_color = None;
// ─── KENARLIKLAR (Calamares Uyumu için İnce İnce Yumuşatıldı) ───────────────────
v.widgets.noninteractive.bg_stroke = Stroke::new(1.0, c_border());
v.widgets.noninteractive.bg_stroke = Stroke::new(1.0_f32, c_border());
// ─── WIDGET DOLGULARI (Burası ComboBox ve Butonların Kaderini Belirliyor) ───────
v.widgets.noninteractive.bg_fill = c_bg_widget();
@@ -205,7 +205,7 @@ fn build_visuals(is_dark: bool) -> Visuals {
crate::ui::combobox_stil::apply_visuals(&mut v);
// ─── METİN RENKLERİ ────────────────────────────────────────────────────────────
v.widgets.noninteractive.fg_stroke = Stroke::new(1.0, c_text());
v.widgets.noninteractive.fg_stroke = Stroke::new(1.0_f32, c_text());
// ─── YUVARLAK KÖŞELER (Zaten 6.0'dı, Tam İstediğin Calamares Kıvamında) ─────────
v.widgets.noninteractive.rounding = Rounding::same(6.0);
@@ -215,13 +215,13 @@ fn build_visuals(is_dark: bool) -> Visuals {
// Seçim rengi
v.selection.bg_fill = c_accent_dim();
v.selection.stroke = Stroke::new(1.0, c_accent());
v.selection.stroke = Stroke::new(1.0_f32, c_accent());
// Hyperlink
v.hyperlink_color = c_accent();
// Pencere kenarlığı
v.window_stroke = Stroke::new(1.0, c_border());
v.window_stroke = Stroke::new(1.0_f32, c_border());
v.window_rounding = Rounding::same(8.0);
v.interact_cursor = Some(egui::CursorIcon::PointingHand);
@@ -268,7 +268,7 @@ pub fn section_heading(ui: &mut egui::Ui, text: &str) {
let (rect, _) = ui.allocate_exact_size(Vec2::new(ui.available_width(), 1.0), egui::Sense::hover());
ui.painter().line_segment(
[rect.left_center(), rect.right_center()],
Stroke::new(1.0, c_accent_dim()),
Stroke::new(1.0_f32, c_accent_dim()),
);
ui.add_space(8.0);
}
@@ -277,7 +277,7 @@ pub fn section_heading(ui: &mut egui::Ui, text: &str) {
pub fn error_box(ui: &mut egui::Ui, msg: &str) {
egui::Frame::none()
.fill(Color32::from_rgba_unmultiplied(0xF4, 0x43, 0x36, 20))
.stroke(Stroke::new(1.0, c_error()))
.stroke(Stroke::new(1.0_f32, c_error()))
.rounding(Rounding::same(6.0))
.inner_margin(egui::Margin::same(10.0))
.show(ui, |ui| {
@@ -294,7 +294,7 @@ pub fn error_box(ui: &mut egui::Ui, msg: &str) {
pub fn warning_box(ui: &mut egui::Ui, msg: &str) {
egui::Frame::none()
.fill(Color32::from_rgba_unmultiplied(0xFF, 0x98, 0x00, 20))
.stroke(Stroke::new(1.0, c_warning()))
.stroke(Stroke::new(1.0_f32, c_warning()))
.rounding(Rounding::same(6.0))
.inner_margin(egui::Margin::same(10.0))
.show(ui, |ui| {
@@ -311,7 +311,7 @@ pub fn warning_box(ui: &mut egui::Ui, msg: &str) {
pub fn success_box(ui: &mut egui::Ui, msg: &str) {
egui::Frame::none()
.fill(Color32::from_rgba_unmultiplied(0x4C, 0xAF, 0x50, 20))
.stroke(Stroke::new(1.0, c_success()))
.stroke(Stroke::new(1.0_f32, c_success()))
.rounding(Rounding::same(6.0))
.inner_margin(egui::Margin::same(10.0))
.show(ui, |ui| {