nevaforget e37b273913 fix: Display-Null-Check und File-Logging in main.py
Gdk.Display.get_default() kann None zurueckgeben wenn der Compositor
noch nicht bereit ist. Vorher crashte moongreet mit TypeError, ohne
dass der Fehler irgendwo geloggt wurde. Display wird jetzt einmal
geholt, geprueft und an _register_icons/_load_css durchgereicht.
Logging geht nach /var/cache/moongreet/moongreet.log und stderr.
2026-03-26 14:16:38 +01:00
2026-03-26 14:02:38 +01:00

Moongreet

A greetd greeter for Wayland, built with Python + 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
  • Sessions — Discovered from /usr/share/wayland-sessions/ and /usr/share/xsessions/
  • Last user — Remembered in /var/cache/moongreet/last-user
  • Power actions — Reboot / Shutdown via loginctl
  • Layer Shell — Fullscreen via gtk4-layer-shell

Requirements

  • Python 3.11+
  • GTK 4, PyGObject
  • gtk4-layer-shell (for Wayland fullscreen)
  • greetd

Installation

uv pip install .

System Setup

  1. Copy configuration:

    sudo mkdir -p /etc/moongreet
    sudo cp config/moongreet.toml /etc/moongreet/moongreet.toml
    
  2. Edit /etc/moongreet/moongreet.toml — set an absolute path for the wallpaper.

  3. Create cache directory:

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

    [default_session]
    command = "moongreet"
    user = "greeter"
    

Development

# Run tests
uv run pytest tests/ -v

# Type checking
uv run pyright src/

# Run locally (without greetd)
uv run moongreet

License

MIT

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