nevaforget 448e4212e3 docs: drop Selene persona, unify attribution on ClaudeCode
Remove the Selene persona block from CLAUDE.md and rewrite prior
DECISIONS entries from Selene to ClaudeCode for consistency with
the rest of the Moonarch ecosystem.
2026-04-21 09:03:21 +02:00

Moongreet

A greetd greeter for Wayland, built with Rust + GTK4 + gtk4-layer-shell. Part of the Moonarch ecosystem.

Features

  • greetd IPC — Communicates via $GREETD_SOCK (length-prefixed JSON)
  • User list — Parsed from /etc/passwd (UID 100065533)
  • Avatars — AccountsService icons, ~/.face fallback, default SVG with theme tinting
  • Sessions — Discovered from /usr/share/wayland-sessions/ and /usr/share/xsessions/
  • Last user/session — Remembered in /var/cache/moongreet/
  • Power actions — Reboot / Shutdown via loginctl
  • Layer Shell — Fullscreen via gtk4-layer-shell (TOP layer)
  • Multi-monitor + hotplug — Full greeter UI on all monitors (keyboard input on first), hotplugged monitors get windows automatically
  • GPU blur — Background blur via GskBlurNode (shared cache across monitors)
  • i18n — German and English (auto-detected from system locale)
  • Faillock warning — Warns after 2 failed attempts, locked message after 3
  • Fingerprint — fprintd support via greetd multi-stage PAM (configurable)
  • Journal loggingjournalctl -t moongreet, debug level via MOONGREET_DEBUG env var
  • Password wiping — Zeroize on drop

Requirements

  • GTK 4
  • gtk4-layer-shell (for Wayland fullscreen)
  • greetd

Building

cargo build --release

Installation

# Install binary
sudo install -Dm755 target/release/moongreet /usr/bin/moongreet

# Install config
sudo mkdir -p /etc/moongreet
sudo cp config/moongreet.toml /etc/moongreet/moongreet.toml

System Setup

  1. Edit /etc/moongreet/moongreet.toml — set an absolute path for the wallpaper.

  2. Create cache directory:

    sudo mkdir -p /var/cache/moongreet/last-session
    sudo chown greeter:greeter /var/cache/moongreet
    
  3. Configure greetd (/etc/greetd/config.toml):

    [default_session]
    command = "niri -c /etc/greetd/niri-greeter.kdl"
    user = "greeter"
    

Development

# Run tests
cargo test

# Build release
cargo build --release

# Run locally (without greetd, disables layer-shell)
MOONGREET_NO_LAYER_SHELL=1 ./target/release/moongreet

License

MIT

Description
No description provided
Readme 5.9 MiB
Languages
Rust 97.8%
CSS 1.4%
Shell 0.8%