Replace env_logger with systemd-journal-logger for consistent logging across moonset/moonlock/moongreet. Add MOONSET_DEBUG env var and debug statements across all modules. Also includes shared blur cache for multi-monitor and detached moonlock spawn for lock action.
2.6 KiB
2.6 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, systemd-Journal-Logging, Debug-Level perMOONSET_DEBUGEnv-Var, 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 - Journal-Logging:
systemd-journal-loggerstatt File-Logging —journalctl -t moonset, Debug-Level perMOONSET_DEBUGEnv-Var