Add CHANGELOG documenting all changes since 0.1.0 and the initial release. Add DECISIONS.md as an architectural decision log. Update CLAUDE.md to reflect current architecture. Bump to 0.1.1 for the security and correctness fixes in the previous commit.
2.4 KiB
2.4 KiB
Moonset
Name: Hekate (Göttin der Wegkreuzungen — passend zum Power-Menu, das den Weg der Session bestimmt)
Projekt
Moonset ist ein Wayland Session Power Menu, gebaut mit Rust + gtk4-rs + gtk4-layer-shell. Teil des Moonarch-Ökosystems. Per Keybind aufrufbares Overlay mit 5 Aktionen: Lock, Logout, Hibernate, Reboot, Shutdown.
Tech-Stack
- Rust (Edition 2024), gtk4-rs 0.11, glib 0.22
- gtk4-layer-shell 0.8 für Wayland Layer Shell (OVERLAY Layer)
cargo testfür Unit-Tests
Projektstruktur
src/— Rust-Quellcode (main.rs, power.rs, i18n.rs, config.rs, users.rs, panel.rs)resources/— GResource-Assets (style.css, wallpaper.jpg komprimiert, default-avatar.svg)config/— Beispiel-Konfigurationsdateien
Kommandos
# Tests ausführen
cargo test
# Release-Build
cargo build --release
# Power-Menu starten (in Niri-Session)
LD_PRELOAD=/usr/lib/libgtk4-layer-shell.so ./target/release/moonset
Architektur
main.rs— Entry Point, GTK App, Layer Shell Setup, Multi-Monitor, zentraleGRESOURCE_PREFIX-Konstantepower.rs— 5 Power-Action-Wrapper mit absoluten Pfaden und 30s Timeout (lock, logout, hibernate, reboot, shutdown)i18n.rs— Locale-Erkennung und String-Tabellen (DE/EN)config.rs— TOML-Config + Wallpaper-Fallbackpanel.rs— GTK4 UI (Action-Buttons, Inline-Confirmation, WallpaperWindow)users.rs— User-Erkennung, Avatar-Loading (AccountsService, ~/.face, GResource-Fallback)resources/style.css— GTK-Theme-Colors für Konsistenz mit dem aktiven Desktop-Theme
Design Decisions
Siehe DECISIONS.md für das vollständige Entscheidungsprotokoll.
Kurzfassung der wichtigsten Entscheidungen:
- OVERLAY statt TOP Layer: Waybar liegt auf TOP, moonset muss darüber
- Niri-spezifischer Logout (
niri msg action quit): Moonarch setzt fest auf Niri - Einmal-Start per Keybind: Kein Daemon, GTK
application_idverhindert Doppelstart - System-Icons: Adwaita/Catppuccin liefern alle benötigten symbolischen Icons
- Lock ohne Confirmation: Lock ist sofort reversibel, braucht kein Confirm
- Absolute Pfade für Binaries:
/usr/bin/systemctletc. statt relativer Pfade (Security) - GResource-Bundle: CSS, Wallpaper (komprimiert) und Default-Avatar sind in die Binary kompiliert
- Async Power Actions:
glib::spawn_future_local+gio::spawn_blockingmit 30s Timeout