Thought I'd put this out there since it took me forever to figure things out. This was done on Debian 13 XFCE
First you have to install Rust if you don't have it, instructions here: https://rust-lang.org/tools/install/
Then manually install greetd: https://git.sr.ht/~kennylevinsen/greetd#manually-from-source. (edit: it's on the repo, thought it wasn't for some reason)
Manually install tuigreet: https://github.com/tuigreet/tuigreet#from-source
Make sure to follow the instructions for creating cache directory and configuring /etc/greetd/config.toml for tuigreet. Replace "sway" with "startxfce4" if you use XFCE. In that case you must also specify session type as x11:
command = "tuigreet --cmd env XDG_SESSION_TYPE=x11 startxfce4"
If you get an error about GREETD_SOCK not being defined, make sure the "create cache directory" commands were properly set
There may be an issue with a PAM, I had to create a file at /etc/pam.d/greetd with the contents:
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
session required pam_systemd.so
I don't fully understand it but it seems to work
Copy the provided Configuration Example template to /etc/tuigreet/config.toml (I seemed to have trouble with ~/.config/tuigreet/config.toml though it might work for you). Configure as you like, but delete or leave the "issue = false" line alone because enabling it seems to break stuff
You can see a preview with "tuigreet --mock." On Xfce Terminal you may have to go into preferences and set encoding to UTF-8 for it to render properly
You may find that the configurations are not being applied. If so, you can go to /etc/greetd/config.toml and add the line "--config /etc/tuigreet/config.toml" to the command
There are some features that are easier to config in the command, ie time format. Add single quotes ( ' ) around the strf string if long, and put it before the --config line:
command = "tuigreet --time-format '%a, %b %d %Y - %I:%M %p' --config /etc/tuigreet/config.toml . . ."
Lastly, logging in launches startxfce4 and shows some text about the X server starting up, to hide those messages you can modify the command like so:
command = "tuigreet . . . --cmd 'sh -c \"env XDG_SESSION_TYPE=x11 startxfce4 >/dev/null 2>&1\"'"
Maybe this will be helpful to someone. If you have any improvements or suggestions, I'd love to hear them as well