Files
moonset/CLAUDE.md
T
nevaforget 7dae48f6cc feat(power): logout via loginctl, not Niri-locked
Default `loginctl terminate-session $XDG_SESSION_ID`; `logout_command`
TOML override for other compositors.
2026-06-17 12:40:24 +02:00

1.1 KiB

Moonset

Wayland session power menu, part of the Moonarch ecosystem. Keybind-invoked overlay with 5 actions: Lock, Logout, Hibernate, Reboot, Shutdown.

Stack: Rust / gtk4-rs / gtk4-layer-shell (OVERLAY layer). Versions live in Cargo.toml.

Commands

cargo test                  # unit tests
cargo build --release       # release build
LD_PRELOAD=/usr/lib/libgtk4-layer-shell.so ./target/release/moonset   # run (in Niri)

Source (src/)

  • main.rs — entry point, GTK app, Layer Shell, multi-monitor, journal logging (MOONSET_DEBUG), GRESOURCE_PREFIX
  • power.rs — 5 power-action wrappers (absolute paths, 30s timeout)
  • panel.rs — GTK4 UI (action buttons, inline confirmation, WallpaperWindow)
  • users.rs — user detection, avatar loading (AccountsService, ~/.face, GResource fallback)
  • config.rs — TOML config + wallpaper fallback
  • i18n.rs — locale detection, DE/EN string tables

resources/ holds the GResource bundle (style.css, default-avatar.svg); config/ holds example configs.

Decisions

See DECISIONS.md for the full decision log (layer choice, Niri logout, async power actions, journal logging, …).