Clean and customizable greeter for greetd
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.
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.
XDG_DATA_DIRS environment variableHidden and NoDisplay in session filesNote: Please make sure you have all requirements installed, as having a greetd greeter constantly failing isn't as much fun as it sounds.
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:
paru -S greetd-regreet-gitInstall the package in the Arch repos as follows:
pacman -S greetd-regreetFor 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.
First, the greeter must be compiled using Cargo:
cargo build --releaseThe 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:
/etc/tmpfiles.d/regreet.conf or /usr/lib/tmpfiles.d/regreet.conf.systemd-tmpfiles CLI:systemd-tmpfiles --create "$PWD/systemd-tmpfiles.conf"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.
Set the greetd config file to:
[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.
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:
[default_session]
command = "dbus-run-session sway --config /path/to/custom/sway/config"
user = "greeter"Create a Hyprland config file (in a path such as /etc/greetd/hyprland.lua) as
follows:
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:
[default_session]
command = "dbus-run-session start-hyprland -- -c /path/to/custom/hyprland/config"
user = "greeter"Create a KDL config file (in a path such as /etc/greetd/niri.kdl) as follows:
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:
[default_session]
command = "dbus-run-session niri --config /path/to/custom/niri/config"
user = "greeter"Set the greetd config file to:
[default_session]
command = "dbus-run-session gamescope --backend drm --force-windows-fullscreen -- regreet"
user = "greeter"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:
regreet --config /path/to/custom/regreet/config.tomlA sample configuration is provided along with sample values for all available
options in regreet.sample.toml. Currently, the
following can be configured:
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.
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
No open issues yet, or sync has not completed.