Hyprland's simple, yet multi-threaded and GPU-accelerated greetd greeter utility.
- Runs inside a Hyprland greeter session managed by
greetd - Speaks the
greetdIPC protocol overGREETD_SOCK - Supports username, password, and session selection flows
- Support for fractional-scale
- Fully GPU accelerated
- Multi-threaded resource acquisition
- Custom backgrounds, gradients, blur, animations, shadows, etc.
- Some of Hyprland's eyecandy: gradient borders, blur, animations, shadows, etc.
- and more...
paru -S hyprlogin-git # compiles from latest sourceThis fork repurposes hyprlock into a graphical greeter. It is no longer a session locker, and it should be run under greetd inside a dedicated Hyprland greeter session.
Current state:
- work in progress
- builds and packages locally
- includes a working
greetdbackend, session discovery, default user/session selection, and sample configs
- Internal naming is still mixed in places because the fork is not fully renamed away from the upstream
hyprlockstructure yet. - Debug instrumentation is still heavier than it should be for a stable release.
Typical greetd setup:
[default_session]
command = "start-hyprland --config /etc/hyprlogin/hyprland.conf"
user = "greeter"Example Hyprland config:
exec-once = hyprloginInstalled sample files:
/usr/share/hyprlogin/examples/hyprlogin.conf/usr/share/hyprlogin/hyprland-greeter.conf/usr/share/hyprlogin/greetd-config.toml
Arch Linux:
paru -S hyprlogin-gitMain paths after install:
/usr/bin/hyprlogin/etc/hyprlogin/hyprlogin.conf/usr/share/hyprlogin/examples/hyprlogin.conf/usr/share/hyprlogin/hyprland-greeter.conf/usr/share/hyprlogin/greetd-config.toml
Minimal setup:
- Install and enable
greetd. - Point
/etc/greetd/config.tomlat the shipped greeter session:
[terminal]
vt = 1
[default_session]
command = "start-hyprland -- --config /usr/share/hyprlogin/hyprland-greeter.conf"
user = "greeter"- Copy the sample config and customize it:
sudo install -Dm644 /usr/share/hyprlogin/examples/hyprlogin.conf /etc/hyprlogin/hyprlogin.conf- Restart
greetdor reboot and test the greeter from a fresh login session.
Config resolution:
hyprlogin -c /path/to/configuses the explicit path- otherwise
hyprloginfirst looks for/etc/hyprlogin/hyprlogin.conf - if that file does not exist, it falls back to
/usr/share/hyprlogin/examples/hyprlogin.conf
Config compatibility:
- the config grammar stays aligned with
hyprlock - existing
hyprlockwidget/category syntax remains valid hyprloginonly adds extra variables and optional internal actions; it does not require a forked config format- this keeps future syncs with upstream
hyprlockmostly constrained to behavior and rendering code rather than a divergent config parser - optional greeter-only additions include
sessions:default_user,sessions:default_session,input-field:placeholder_text_username,general:debug_mode, andgeneral:debug_log_path
The default hyprlogin config supports:
Enterto submit the current username or password promptTab,Shift+Tab, left, and right arrows to cycle sessions- clickable session switching via
hyprlogin:session_prevandhyprlogin:session_next - distinct username and password placeholders while keeping the visual style close to upstream
hyprlock
Session discovery behavior:
- Wayland sessions are read from
/usr/share/wayland-sessions - X11 sessions are read from
/usr/share/xsessions - hidden and non-display desktop entries are skipped
TryExecandExecare checked for availability before a session is shown- the greeter exports
XDG_SESSION_TYPE,XDG_SESSION_DESKTOP,DESKTOP_SESSION, andXDG_CURRENT_DESKTOPwhen possible sessions:default_sessioncan preselect a session by display name, command, desktop file path, or desktop file basenamesessions:default_userprefills the username field on startup and after failed authentication resetsgeneral:debug_mode = trueenables verbose startup, greetd transaction, and auth-state logs without needing the CLI--verboseflaggeneral:debug_log_path = /tmp/hyprlogin-debug.logappends the same greetd debug trace to a file so failed login attempts can be inspected after the greeter returns
You need the following dependencies
- cairo
- hyprgraphics
- hyprlang
- hyprutils
- hyprwayland-scanner
- mesa (required is libgbm, libdrm and the opengl runtime)
- pam
- pango
- sdbus-cpp (>= 2.0.0)
- wayland-client
- wayland-protocols
- xkbcommon
Sometimes distro packages are missing required development files.
Such distros usually offer development versions of library package - commonly suffixed with -devel or -dev.
Building:
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
cmake --build ./build --config Release --target hyprlogin -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`Installation:
sudo cmake --install buildIf you want to help debug or improve the fork:
- Build it locally with CMake.
- Run it under a real
greetd+ Hyprland greeter session rather than from an already logged-in desktop session. - Reproduce issues with
general:debug_modeenabled in the config. - Keep the config format compatible with upstream
hyprlockwhere possible. - Prefer fixing stale upstream leftovers intentionally rather than renaming everything blindly.
- generated build/package outputs are intended to stay untracked
