# 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 1000–65533) - **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** — Greeter on primary, wallpaper on all 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) ## Requirements - GTK 4 - gtk4-layer-shell (for Wayland fullscreen) - greetd ## Building ```bash cargo build --release ``` ## Installation ```bash # 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: ```bash sudo mkdir -p /var/cache/moongreet/last-session sudo chown greeter:greeter /var/cache/moongreet ``` 3. Configure greetd (`/etc/greetd/config.toml`): ```ini [default_session] command = "niri -c /etc/greetd/niri-greeter.kdl" user = "greeter" ``` ## Development ```bash # Run tests cargo test # Build release cargo build --release # Run locally (without greetd, needs LD_PRELOAD for layer-shell) LD_PRELOAD=/usr/lib/libgtk4-layer-shell.so ./target/release/moongreet ``` ## License MIT