Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
R

ReGreet

> 编程语言
Open source

Clean and customizable greeter for greetd

790 stars0 likes1 views
WebsiteGitHub

About

Clean and customizable greeter for greetd

ReGreet

A clean and customizable GTK-based greetd greeter written in Rust using Relm4. This is meant to be run under a Wayland compositor (like Sway).

It is based on Max Moser's LightDM Elephant greeter, which is based on Matt Shultz's Fischer's example LightDM greeter.

Screenshots

These screenshots use the Canta GTK theme in dark mode with the Roboto font. All screenshots are provided under the CC-BY-SA-4.0 license.

Features

  • Shows a dropdown list of existing users and X11/Wayland sessions
  • Allows manual entry of username and session command
  • Remembers the last authenticated user
  • Automatically selects the last used session per user
  • Can also skip selecting the user/session and choose the last user and their last used session.
  • Allows setting environment variables for created sessions
  • Supports customizing:
    • Background image
    • Clock
    • GTK theme
    • Dark mode
    • Icon theme
    • Cursor theme
    • Cursor blink on/off
    • Font
  • Allows changing reboot & poweroff commands for different init systems
  • Supports custom CSS files for further customizations
  • Respects XDG_DATA_DIRS environment variable
  • Respects fields Hidden and NoDisplay in session files
  • Picks up the first found session with the same name and in the same type (X11/Wayland). This allows for overriding system-provided session files.
  • Demo mode to run ReGreet without greetd for easier development.

Requirements

  • Rust 1.85.0+ (for compilation only)
  • greetd
  • GTK 4.16+
  • D-Bus
  • AccountsService
  • Glycin (for background images; supported formats depend on installed plugins)
  • GStreamer (for background animated images & video; supported formats depend on installed plugins)
  • A Wayland compositor (such as Cage or Sway or Hyprland)

Note: Please make sure you have all requirements installed, as having a greetd greeter constantly failing isn't as much fun as it sounds.

Installation

Arch Linux

ReGreet is available as greetd-regreet in the official Arch Linux repositories, and as greetd-regreet-git in the AUR. Note that I only maintain the AUR package, and the package in the Arch repos is maintained by someone else.

Install the AUR package either by cloning the AUR repository and running makepkg, or by using your favourite AUR helper:

bash
paru -S greetd-regreet-git

Install the package in the Arch repos as follows:

bash
pacman -S greetd-regreet

Unofficial Packages

NixOS

For a minimal config, add programs.regreet.enable = true; in your NixOS configuration file. For users who want to configure more, they can see all the options of the module by searching for regreet on NixOS Search.

Manual

First, the greeter must be compiled using Cargo:

bash
cargo build --release

The compilation process also configures the greeter to look for or use certain directories. These can be changed by setting the values of certain environment variables. These are:

Environment Variable Default Use
GREETD_CONFIG_DIR /etc/greetd The configuration directory used by greetd
STATE_DIR /var/lib/regreet The directory used to store the ReGreet state/cache
LOG_DIR /var/log/regreet The directory used to store logs
SESSION_DIRS /usr/share/xsessions:/usr/share/wayland-sessions A colon (:) separated list of directories where the greeter looks for session files
X11_CMD_PREFIX startx /usr/bin/env The default command prefix for X11 sessions to launch the X server (see this explanation on Reddit)
REBOOT_CMD reboot The default command used to reboot the system
POWEROFF_CMD poweroff The default command used to shut down the system

The greeter can be installed by copying the file target/release/regreet to /usr/bin (or similar directories like /bin).

Optionally, to set up the log and state directories using systemd-tmpfiles, do either of the following:

  • Copy the configuration given in systemd-tmpfiles.conf to /etc/tmpfiles.d/regreet.conf or /usr/lib/tmpfiles.d/regreet.conf.
  • Run the systemd-tmpfiles CLI:
    bash
    systemd-tmpfiles --create "$PWD/systemd-tmpfiles.conf"

Usage

Set as Default Session

Edit the greetd config file (/etc/greetd/config.toml) to set ReGreet with a Wayland compositor as the default session, and then restart greetd to use the new config. Below you will find some examples of different Wayland compositors.

Cage

Set the greetd config file to:

toml
[default_session]
command = "dbus-run-session cage -s -mlast -d -- regreet"
user = "greeter"

The -s argument enables VT switching in cage (0.1.2 and newer only), which is highly recommended to prevent locking yourself out. The -mlast argument tells Cage to use the last-connected monitor only, which is useful since ReGreet is a single-monitor application. The -d argument tells Cage to avoid using client-side decorations for ReGreet's application window. The dbus-run-session command as a prefix is optional, but multiple users report that it helps solve startup delays.

Sway

Create a Sway config file (in a path such as /etc/greetd/sway-config) as follows:

exec "regreet; swaymsg exit"
include /etc/sway/config.d/*

Then, set Sway to use this config (whose path is shown here as /path/to/custom/sway/config) as the default greetd session:

toml
[default_session]
command = "dbus-run-session sway --config /path/to/custom/sway/config"
user = "greeter"

Hyprland

Create a Hyprland config file (in a path such as /etc/greetd/hyprland.lua) as follows:

lua
hl.on("hyprland.start", function()
	hl.exec_cmd("regreet; hyprctl dispatch 'hl.dsp.exit()'")
end)
hl.config({
	misc = {
		disable_hyprland_logo = true,
		disable_splash_rendering = true,
        disable_hyprland_guiutils_check = true,
	},
})

If your Hyprland version doesn't support Lua configs, create instead a legacy Hyprlang config file (in a path such as /etc/greetd/hyprland.conf) as follows:

exec-once = regreet; hyprctl dispatch exit
misc {
    disable_hyprland_logo = true
    disable_splash_rendering = true
    disable_hyprland_guiutils_check = true
}

Then, set Hyprland to use this config (whose path is shown here as /path/to/custom/hyprland/config) as the default greetd session:

toml
[default_session]
command = "dbus-run-session start-hyprland -- -c /path/to/custom/hyprland/config"
user = "greeter"

Niri

Create a KDL config file (in a path such as /etc/greetd/niri.kdl) as follows:

kdl
spawn-sh-at-startup "regreet; niri msg action quit --skip-confirmation"
hotkey-overlay {
    skip-at-startup
}
cursor {
    // Change the theme and size of the cursor as well as set the
    // `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
    xcursor-theme "catppuccin-mocha-red-cursors"
}

Then, set Niri to use this config (whose path is shown here as /path/to/custom/niri/config) as the default greetd session:

toml
[default_session]
command = "dbus-run-session niri --config /path/to/custom/niri/config"
user = "greeter"

Gamescope

Set the greetd config file to:

toml
[default_session]
command = "dbus-run-session gamescope --backend drm --force-windows-fullscreen -- regreet"
user = "greeter"

Configuration

The configuration file must be in the TOML format. By default, it is named regreet.toml, and located in the greetd configuration directory specified during compilation (/etc/greetd/ by default). You can use a config file in a different location with the --config argument as follows:

bash
regreet --config /path/to/custom/regreet/config.toml

A sample configuration is provided along with sample values for all available options in regreet.sample.toml. Currently, the following can be configured:

  • Background image (supported formats depend on your installed GStreamer plugins)
  • How the background image fits the screen
  • Environment variables for created sessions
  • Greeting message
  • Clock
  • GTK theme
  • Dark mode
  • Icon theme
  • Cursor theme
  • Cursor blink on/off
  • Font
  • Reboot command
  • Shut down command
  • X11 command prefix (see this explanation on Reddit)

NOTE: For configuring other essential features, such as the keyboard layout/mapping, the choice of monitor to use, etc., please check out the configuration options for the wayland compositor that you are using to run ReGreet. For example, if you use Cage, check out the Cage wiki. If you use Sway, check out the Sway wiki. If you use Hyprland, check out the Hyprland wiki.

Custom CSS

ReGreet supports loading CSS files to act as a custom global stylesheet. This enables one to do further customizations above what ReGreet supports through the config file.

By default, the custom CSS file is named regreet.css, and located in the greetd configuration directory specified during compilation (`/etc/greet

Issues· 27 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Rustgreetdgreeterlogin-managerrelm4

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言