libLuna O projekcie
Kolor akcentu tak jak w Ustawieniach Luny

Wygląd to tokeny, nie stałe rozsiane po kodzie. Zmiana akcentu tutaj działa tak samo jak w Lunie — tylko na tej stronie.

PL EN

Projekt libLuna

Pulpit, który
piszemy sami.

libLuna to mały toolkit GUI w czystym Rust. Razem ze środowiskiem Luna i kompozytorem Selene tworzy jeden spójny pulpit — od narysowania przycisku po wyświetlenie okna na ekranie. Bez GTK, bez Qt i bez GObject. Po ludzku: mniej warstw, które trzeba omijać.

Czysty Rust · Wayland · MPL-2.0 · bez fontów z CDN i bez trackerów

Okno Ustawień Luny w jasnym motywie: pasek boczny, karty i przełączniki narysowane przez libLunę.
Podgląd offline — bez kompozytora

Trzy warstwy

Jedna układanka, trzy nazwy

GTK / GNOME / Mutter. Qt / KDE Plasma / KWin. U nas: libLuna / Luna / Selene. Każda warstwa robi jedną rzecz i nie udaje, że robi wszystkie.

Toolkit

libLuna

Biblioteka, na której stoją okna Luny. Rysuje scenę, składa tekst, obsługuje wejście i tłumaczenia. Nie potrzebuje GTK, Qt ani GObject — tylko Rusta i Waylanda.

Odpowiednik: GTK albo Qt.

Rust tiny-skia Wayland
Środowisko

Luna

To, co widzisz po zalogowaniu: panel, launcher, ustawienia, pliki, terminal, ekran blokady. Spójna powłoka, w której każdy element mówi tym samym językiem.

Odpowiednik: GNOME albo KDE Plasma.

powłoka aplikacje greeter
Kompozytor

Selene

Kompozytor Wayland. Przyjmuje okna, układa je, rozdaje klawiaturę i mysz, obsługuje monitory i okna X11. Napisany bez smithay — na własnej, cienkiej warstwie.

Odpowiednik: Mutter albo KWin.

Wayland DRM/KMS XWayland

Powód

Dlaczego nie po prostu GTK?

Pomysł nie wziął się z niechęci do GTK. Wziął się z pytania: co, jeśli chcemy pulpit, który jest mały, szybki i w całości nasz?

01

GTK robi robotę, ale waży.

GTK4 z libadwaitą ciągnie GObject, glib i ręczne liczenie referencji. Dla małego pulpitu to więcej maszynerii, niż naprawdę trzeba.

02

Qt jest świetne, ale ogromne.

Wiązania do Rusta dokładają jeszcze jeden mostek, którego trzeba pilnować. My chcieliśmy mniej ruchomych części, nie więcej.

03

egui i iced myślą inaczej.

Świetnie nadają się do narzędzi, ale nie modelują powłoki: pasków tytułu z CSD, sidebarów, okruszków ścieżki i popoverów.

04

Chcemy jednego stosu.

Rust od widgetu po kompozytor. Bez dwóch systemów pamięci, bez FFI w środku i bez niespodzianek przy pakowaniu.

05

Chcemy wymienny wygląd.

Kolory i geometria kontrolek to tokeny, nie stałe rozsiane po widgetach. Motyw zmienia UI bez dotykania kodu.

06

Chcemy wiedzieć, co mamy.

Mały kod, mały binarny, przewidywalna wydajność. Łatwiej naprawić coś, co da się objąć wzrokiem — i co sami napisaliśmy.

„libLuna nie próbuje być GTK. Próbuje być wystarczająco dobra dla Luny — i tylko tyle.”

Architektura

Jak to leży

Cztery poziomy, jeden kierunek zależności. Górne warstwy nie muszą wiedzieć, co robią dolne — i w tym cała sztuczka.

Selene nie musi wiedzieć, że aplikacja używa libLuny. A libLuna nie musi wiedzieć, jak działa DRM. Każda warstwa zna tylko swoją robotę.

Bez ściemy

Co już działa, a czego jeszcze nie ma

Projekt jest w ruchu. Wolimy pokazać prawdziwy stan niż obiecywać pulpit, którego jeszcze nie ma.

Działa

  • libLuna: widgety, motyw jasny/ciemny/auto i 9 kolorów akcentu.
  • Wielojęzyczność pl/en/de bez gettext — każdy język w osobnym pliku.
  • Luna: panel, launcher (lista, siatka, karuzela), ustawienia, pliki, terminal.
  • Luna: OSD, powiadomienia, ekran blokady i ekran logowania.
  • Selene: xdg-shell, wlr-layer-shell, schowek, drag & drop i multi-monitor.
  • Selene: DRM/KMS, wejście evdev, okna X11 przez XWayland i XWM.

Jeszcze nie

  • GPU i dmabuf — zero-copy dla klientów Vulkan/EGL. Dziś render jest CPU.
  • Własne kursory klientów i wklejanie środkowym przyciskiem.
  • IME / text-input-v3, czyli wygodne wpisywanie znaków CJK.
  • Fractional scaling i pełne HiDPI bez rozmycia.
  • xdg_activation — nowe okno czasem trzeba znaleźć za innym.
  • Dostępność AT-SPI — ważna, ale zaplanowana później.

Pełna, żywa lista protokołów: docs/compositor.md.

Zrzuty

Tak to wygląda

Wszystkie zrzuty pochodzą z działającego kodu — z podglądu offline albo z sesji Selene.

Spróbuj

Uruchom to u siebie

Potrzebujesz Linuksa, stabilnego Rusta i kompozytora Wayland. Selene możesz uruchomić obok obecnej sesji, bez przejmowania ekranu.

bash · demo
# zbuduj cały workspace i uruchom demo
git clone https://git.paganlinux.eu/luna.git
# albo z mirrora: git clone https://github.com/mijsys/libLuna.git
cd libLuna
cargo build --workspace
cargo run -p luna-demo

# bez kompozytora: wyrenderuj podgląd do PNG
cargo run -p luna-demo --bin render -- docs/images/out.png

Co będzie potrzebne

  • Linux z Waylandem — Selene albo inny kompozytor.
  • Stabilny toolchain Rust (rustup wystarczy).
  • Do sesji DRM: wolny master DRM i dostęp do /dev/input.

Testowo, obok działającej sesji: SELENE_BACKEND=nested selene. Szczegóły są w de/README.md.

bash · instalacja testowa
# instalacja do katalogu — nic nie rusza systemu
./scripts/install.sh --destdir /tmp/luna-test --prefix /usr

# najpierw zobacz plan, potem zainstaluj na stałe
./scripts/install.sh --dry-run
sudo ./scripts/install.sh --prefix /usr