Nowoczesne, lekkie, mocno personalizowalne środowisko graficzne dla
HackerOS / Debiana, napisane w Rust, z kompozytorem na bazie
Smithay 0.7 (+ XWayland) i powłoką w Vizia 0.4. Konfiguracja w
autorskim formacie .hk (hk-parser). Całość — kompozytor, powłoka,
pasek, WM, demony systemowe oraz wbudowane aplikacje — jest kompilowana
jako zestaw rlib i statycznie linkowana w jedną binarkę: starthwde.
W poprzedniej iteracji każda aplikacja (settings, files, editor,
...) tylko logowała informacje do konsoli — żadna nie rysowała
niczego na ekranie. To zostało naprawione: powstał hwde-miniui
(winit + softbuffer + fontdue), lekki natywny renderer okien, i
wszystkie 7 wbudowanych aplikacji renderują teraz prawdziwe, widoczne
okna z realną treścią (listy katalogów z dysku, zawartość plików,
piksele wczytanych obrazów, żywe wartości z konfiguracji .hk).
Zweryfikowane zrzutami ekranu z rzeczywistego uruchomienia — patrz
sekcja "Co zostało przetestowane" poniżej.
- Smithay 0.7 + XWayland (
hwde-compositor) — prawdziwywayland_server::Display, prawdziwe globalne obiektywl_compositor/xdg_wm_base/wl_shm/wl_seat/xwayland_shell_v1, pełny stos handlerów (CompositorHandler,XdgShellHandler,ShmHandler,SeatHandler,XWaylandShellHandler,XwmHandler) zdesktop::Spacezarządzającym oknami Wayland i X11 w jednej wspólnej przestrzeni, prawdziwy kontekst EGL/GLES (smithay::backend::winit) z realnym renderowaniem, oraz prawdziwy serwer XWayland (XWayland::spawn+X11Wm::start_wm) — aplikacje X11-only mogą się uruchamiać pod HWDE. Sesja standalone realnie korzysta zlibseat(zastąpiłlogind/dbus z poprzedniej wersji — działa zseatd,systemd-logindlub bezpośrednim TTY). hwde-miniui— realne okna aplikacji (winit 0.30 + softbuffer + fontdue): panel boczny z sekcjami, kliknięcia faktycznie przełączają sekcję (hit-testing zsynchronizowany z rysowaniem), tekst renderowany prawdziwą czcionką TTF systemu, a Przeglądarka Obrazów rysuje rzeczywiste piksele wczytanego obrazu (skalowane najbliższym sąsiadem)..hk(hwde-common::config) —HwdeConfig/Themew pełni serializowane/deserializowane do/z.hkprzy użyciu prawdziwego crate'ahk-parser = "0.3.0", bez TOML.- Vizia 0.4.0 (
hwde-shell::ui, cechavizia-ui) — kod napisany względem potwierdzonego, realnego API z tagu0.4.0(nie niepinowanegomain). Domyślnie wyłączona w tym repo — patrz "Dlaczego Vizia jest domyślnie wyłączona" poniżej. Bez tej cechyhwde-shellrenderuje ten sam stan jako diagram ASCII (starthwde shell-preview).
Budowanie tego repo napotkało twardy limit toolchaina: domyślny rustc
z apt na Debianie/Ubuntu to 1.75, a zarówno Smithay 0.7
(MSRV 1.80.1) jak i Vizia 0.4 (edycja 2024, wymaga 1.85) potrzebują
nowszego kompilatora. rustup/static.rust-lang.org bywają zablokowane
w niektórych środowiskach z restrykcyjną listą dozwolonych domen
sieciowych (tak było w środowisku, w którym powstało to repo) — w takim
wypadku zadziałał obejściowy, ale w pełni legalny sposób: pakiety npm
@rusttonpm/{rustc,cargo,rust-std}-linux-x64 to prawdziwa, kompletna
dystrybucja toolchaina Rust (tu: 1.92.0-nightly), zmirrorowana na
rejestrze npm. Jeśli budujesz HWDE na normalnym Debianie z dostępem do
rustup, po prostu użyj rustup — to najprostsza droga.
Z rustc 1.92 Smithay 0.7 kompiluje się bez problemu (zweryfikowane
uruchomieniem, patrz niżej). Vizia 0.4 też się rozwiązuje poprawnie
względem toolchaina — ale jej zależność skia-bindings kompiluje
Skia ze źródeł i synchronizuje dziesiątki pod-zależności
(git-sync-deps) z skia.googlesource.com i chromium.googlesource.com.
W środowisku, w którym powstało to repo, te dwa hosty były strukturalnie
zablokowane (zwracały HTTP 403 z allowlisty sieciowej) — co zweryfikowano
bezpośrednio, więc Vizia 0.4 nie mogła zostać skompilowana w tym
konkretnym sandboksie, niezależnie od wersji Rust. Na zwykłej maszynie
z pełnym dostępem do internetu (lub w typowym CI) tego ograniczenia nie
ma — odkomentowanie zależności i cargo build --features hwde-shell/vizia-ui powinno po prostu zadziałać.
| Komponent | Minimalny rustc | Uwaga |
|---|---|---|
Cały workspace bez vizia-ui |
1.80.1 (Smithay 0.7 MSRV) | W tym repo budowane i testowane na rustc 1.92.0-nightly. |
hwde-shell z cechą vizia-ui |
1.85+ | Wymaga też dostępu do skia.googlesource.com/chromium.googlesource.com przy pierwszym budowaniu (patrz wyżej). |
HWDE/
├── Cargo.toml # workspace root, wersja 0.0.1
├── Cargo.lock # commitowany świadomie (reprodukowalność)
├── bin/starthwde # skompilowana binarka (jedyna!)
├── compositor/ # hwde-compositor — Smithay 0.7 + XWayland
│ └── src/
│ ├── state.rs # CompositorHandler/XdgShellHandler/SeatHandler/
│ │ # XWaylandShellHandler/XwmHandler + desktop::Space
│ ├── nested.rs # tryb --in: winit+GLES, prawdziwy XWayland, calloop
│ ├── standalone.rs # tryb pełny: libseat + udev + DrmDevice + libinput
│ └── compositor.rs # dispatch Standalone/Nested
├── core/
│ ├── common/ # hwde-common — Theme, HwdeConfig (.hk!), AppEntry
│ ├── miniui/ # hwde-miniui — realne okna (winit+softbuffer+fontdue)
│ ├── source-code/{bar,wm,de,sd}/
│ └── apps/ # 7 aplikacji wbudowanych, każda z realnym oknem hwde-miniui
│ ├── system-settings/ # (NIEUSUWALNE)
│ ├── control-center/ # (NIEUSUWALNE)
│ ├── file-manager/ # + HackerOS Package Manager (HPM)
│ ├── archive-manager/, document-viewer/, image-viewer/, text-editor/
├── shell/ # hwde-shell — Vizia 0.4.0 (cecha vizia-ui) + fallback ASCII
├── launcher/ # crate binarny "starthwde" — CLI
├── assets/themes/, config/hwde.hk # motywy i konfiguracja (.hk)
├── packaging/ # SDDM session + pliki .desktop
└── scripts/{build-deps-debian.sh, install.sh}
sudo ./scripts/build-deps-debian.sh # libwayland-dev, libseat-dev, libpixman-1-dev, ...
rustc --version # sprawdź >= 1.80.1 (zainstaluj rustup jeśli trzeba)
cargo build --release
cp target/release/starthwde bin/starthwdestarthwde [OPTIONS] [COMMAND]
| Flaga | Opis |
|---|---|
--in <wayland|x11> |
Tryb zagnieżdżony (smithay::backend::winit, prawdziwy EGL/GLES + XWayland). |
--renderer <auto|opengl|vulkan> |
Backend renderujący (domyślnie auto). |
--config <PATH> |
Własny plik .hk. |
| Podkomenda | Opis |
|---|---|
settings |
System Settings — prawdziwe okno, panel boczny 12 sekcji, NIEUSUWALNE |
control-center |
Control Center — prawdziwe okno, przełączniki Wi-Fi/Bluetooth/itd., NIEUSUWALNE |
files [PATH] |
File Manager — prawdziwe okno, realna lista katalogu z dysku + HPM |
archive [FILE] |
Manager Archiwów — prawdziwe okno, realna zawartość ZIP/TAR/TAR.GZ |
docs [FILE] |
Przeglądarka Dokumentów — prawdziwe okno, realna treść tekstu/Markdown |
images [FILE] |
Przeglądarka Obrazów — prawdziwe okno, realne piksele wczytanego obrazu |
editor [FILE] |
Edytor Tekstu — prawdziwe okno, realna treść pliku, karty |
theme list|show|reset |
Zarządzanie motywami (.hk) |
session status |
Integracja z SDDM/.desktop |
shell-preview [--app-drawer] |
Diagram ASCII layoutu powłoki (bez Vizii) |
info |
Wersja (0.0.1), motyw, renderer, lista komponentów |
starthwde settingsprzeciw prawdziwemu X serwerowi (Xvfb) — zrzut ekranu potwierdza: prawdziwy panel boczny z 12 sekcjami, realne wartości zHwdeConfig(#2D3741,#15191C,14px, ...), realny toggle. Kliknięcie na inną sekcję faktycznie przełącza widok (zweryfikowane przezxdotool+ zrzut ekranu przed/po: aktywna sekcja i treść strony zmieniły się z "Wygląd i motywy" na "Sieć").starthwde files <katalog>— zrzut ekranu pokazuje prawdziwą, żywą listę plików rzeczywistego katalogu projektu (z rozmiarami w bajtach).starthwde editor <plik>istarthwde control-center— zrzuty ekranu potwierdzają realne karty/treść pliku i realne stany przełączników (Wi-Fi/Bluetooth/Tryb ciemny = ON, inne = OFF).starthwde --in x11(kompozytor) — log potwierdza: prawdziwą inicjalizację EGL/GLES (Mesa llvmpipe), prawdziwy plik socketuwayland-N, prawdziwy spawn serweraXwaylandz komunikatemxwayland: ready on display :N, oraz żeX11Wm::start_wmprzejął rolę menadżera okien X11.cargo test— wszystkie testy jednostkowe przechodzą w całym workspace (hwde-compositor, hwde-shell: parsowanie kolorów, generator CSS, podgląd ASCII).
Bez zmian względem poprzedniej wersji — packaging/sddm/wayland-sessions/hwde.desktop
oraz pliki .desktop dla Hacker Term / Sklep / Hacker Launcher /
HackerOS Welcome. starthwde session status sprawdza ich obecność.
hwde-shell::ui(Vizia) — kod gotowy, zablokowany lokalnie przez sieć (patrz wyżej); powinien po prostu zadziałać na hoście z pełnym dostępem do internetu.hwde-compositor::standalone— wybórcrtc/connector/ModeiDrmDevice::create_surfaceper wyjście, oraz pętla renderowania napędzanaDrmEvent::VBlank(wymaga rzeczywistego GPU/roota - nie do zweryfikowania w sandboksie bez sprzętu).- Integracja kompozytor ↔ aplikacje — aplikacje
hwde-miniuiotwierają własne oknawinitniezależnie odhwde-compositor; docelowo okna klientów aplikacji HWDE powinny renderować się jako prawdziwexdg_toplevelwewnątrz sesji kompozytora, a nie jako osobne okna najwyższego poziomu w systemie hosta. hwde-miniui— brak przewijania długich list, brak edycji tekstu w Edytorze (tylko podgląd), brak fontu emoji (glify ikon typu 🎨/🔔 renderują się jako puste prostokąty — DejaVu/Liberation to fonty tekstowe, nie emoji).hwde-sd— Notification Daemon/Polkit/XDG Portals nadal tylko logują, brak realnej rejestracji na D-Bus (zbus).- Edytor: brak podświetlania składni (
syntect). Przeglądarka Dokumentów: brak renderowania PDF/ODT/DOCX.
Bez zmian: accent=#2D3741, background=#15191C, surface=#1E242A,
foreground=#FFFFFF, foreground_dim=#C8CDD2, radius=14px. Pełny
plik: config/hwde.hk.