Remove the Hekate persona block from CLAUDE.md and rewrite prior DECISIONS entries from Hekate and leftover Ragnar to ClaudeCode for consistency with the rest of the ecosystem.
2.4 KiB
2.4 KiB
Moonset
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, 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 und Default-Avatar sind in die Binary kompiliert (Wallpaper kommt vom Dateisystem)
- 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