# Dank (dms) Greeter A greeter for [greetd](https://github.com/kennylevinsen/greetd) that follows the aesthetics of the dms lock screen. ## Features - **Multi user**: Login with any system user - **dms sync**: Sync settings with dms for consistent styling between shell and greeter - **niri or Hyprland**: Use either niri or Hyprland for the greeter's compositor. - **Custom PAM**: Supports custom PAM configuration in `/etc/pam.d/dankshell` - **Session Memory**: Remembers last selected session and user ## Installation ### Arch Linux Arch linux users can install [greetd-dms-greeter-git](https://aur.archlinux.org/packages/greetd-dms-greeter-git) from the AUR. ```bash paru -S greetd-dms-greeter-git # Or with yay yay -S greetd-dms-greeter-git ``` Once installed, disable any existing display manager and enable greetd: ```bash sudo systemctl disable gdm sddm lightdm sudo systemctl enable greetd ``` #### Syncing themes (Optional) To sync your wallpaper and theme with the greeter login screen: ```bash dms-greeter-sync ``` Then logout/login for changes to take effect. Your wallpaper and theme will appear on the greeter!
What does dms-greeter-sync do? The `dms-greeter-sync` helper automatically: - Adds you to the greeter group - Sets minimal ACL permissions on parent directories (traverse only) - Sets group ownership on your DMS config directories - Creates symlinks to share your theme files with the greeter This uses standard Linux ACLs (Access Control Lists) - the same security model used by GNOME, KDE, and systemd. The greeter user only gets traverse permission through your directories and can only read the specific theme files you share.
Manual theme syncing (advanced) If you prefer to set up theme syncing manually: ```bash # Add yourself to greeter group sudo usermod -aG greeter # Set ACLs to allow greeter to traverse your directories setfacl -m u:greeter:x ~ ~/.config ~/.local ~/.cache ~/.local/state # Set group ownership on config directories sudo chgrp -R greeter ~/.config/DankMaterialShell sudo chgrp -R greeter ~/.local/state/DankMaterialShell sudo chgrp -R greeter ~/.cache/quickshell sudo chmod -R g+rX ~/.config/DankMaterialShell ~/.local/state/DankMaterialShell ~/.cache/quickshell # Create symlinks sudo ln -sf ~/.config/DankMaterialShell/settings.json /var/cache/dms-greeter/settings.json sudo ln -sf ~/.local/state/DankMaterialShell/session.json /var/cache/dms-greeter/session.json sudo ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /var/cache/dms-greeter/colors.json # Logout and login for group membership to take effect ```
### Fedora / RHEL / Rocky / Alma Install from COPR or build the RPM: ```bash # From COPR (when available) sudo dnf copr enable avenge/dms sudo dnf install dms-greeter # Or build locally cd /path/to/DankMaterialShell rpkg local sudo rpm -ivh x86_64/dms-greeter-*.rpm ``` The package automatically: - Creates the greeter user - Sets up directories and permissions - Configures greetd with auto-detected compositor - Applies SELinux contexts Then disable existing display manager and enable greetd: ```bash sudo systemctl disable gdm sddm lightdm sudo systemctl enable greetd ``` **Optional:** Sync your theme with the greeter: ```bash dms-greeter-sync ``` Then logout/login to see your wallpaper on the greeter! ### Automatic The easiest thing is to run `dms greeter install` or `dms` for interactive installation. ### Manual 1. Install `greetd` (in most distro's standard repositories) and `quickshell` 2. Create the greeter user (if not already created by greetd): ```bash sudo groupadd -r greeter sudo useradd -r -g greeter -d /var/lib/greeter -s /bin/bash -c "System Greeter" greeter sudo mkdir -p /var/lib/greeter sudo chown greeter:greeter /var/lib/greeter ``` 3. Clone the dms project to `/etc/xdg/quickshell/dms-greeter`: ```bash sudo git clone https://github.com/AvengeMedia/DankMaterialShell.git /etc/xdg/quickshell/dms-greeter ``` 4. Copy `Modules/Greetd/assets/dms-greeter` to `/usr/local/bin/dms-greeter`: ```bash sudo cp /etc/xdg/quickshell/dms-greeter/Modules/Greetd/assets/dms-greeter /usr/local/bin/dms-greeter sudo chmod +x /usr/local/bin/dms-greeter ``` 5. Create greeter cache directory with proper permissions: ```bash sudo mkdir -p /var/cache/dms-greeter sudo chown greeter:greeter /var/cache/dms-greeter sudo chmod 750 /var/cache/dms-greeter ``` 6. Edit or create `/etc/greetd/config.toml`: ```toml [terminal] vt = 1 [default_session] user = "greeter" # Change compositor to sway or hyprland if preferred command = "/usr/local/bin/dms-greeter --command niri" ``` 7. Disable existing display manager and enable greetd: ```bash sudo systemctl disable gdm sddm lightdm sudo systemctl enable greetd ``` 8. (Optional) Install the `dms-greeter-sync` helper for easy theme syncing: ```bash # Download or copy the dms-greeter-sync script from the spec file sudo cp /path/to/dms-greeter-sync /usr/local/bin/dms-greeter-sync sudo chmod +x /usr/local/bin/dms-greeter-sync ``` #### Legacy installation (deprecated) If you prefer the old method with separate shell scripts and config files: 1. Copy `assets/dms-niri.kdl` or `assets/dms-hypr.conf` to `/etc/greetd` 2. Copy `assets/greet-niri.sh` or `assets/greet-hyprland.sh` to `/usr/local/bin/start-dms-greetd.sh` 3. Edit the config file and replace `_DMS_PATH_` with your DMS installation path 4. Configure greetd to use `/usr/local/bin/start-dms-greetd.sh` ### NixOS To install the greeter on NixOS add the repo to your flake inputs as described in the readme. Then somewhere in your NixOS config add this to imports: ```nix imports = [ inputs.dankMaterialShell.nixosModules.greeter ] ``` Enable the greeter with this in your NixOS config: ```nix programs.dankMaterialShell.greeter = { enable = true; compositor.name = "niri"; # or set to hyprland configHome = "/home/user"; # optionally copyies that users DMS settings (and wallpaper if set) to the greeters data directory as root before greeter starts }; ``` ## Usage ### Using dms-greeter wrapper (recommended) The `dms-greeter` wrapper simplifies running the greeter with any compositor: ```bash dms-greeter --command niri dms-greeter --command hyprland dms-greeter --command sway dms-greeter --command niri -C /path/to/custom-niri.kdl ``` Configure greetd to use it in `/etc/greetd/config.toml`: ```toml [terminal] vt = 1 [default_session] user = "greeter" command = "/usr/local/bin/dms-greeter --command niri" ``` ### Manual usage To run dms in greeter mode you can also manually set environment variables: ```bash DMS_RUN_GREETER=1 qs -p /path/to/dms ``` ### Configuration #### Compositor You can configure compositor specific settings such as outputs/displays the same as you would in niri or Hyprland. Simply edit `/etc/greetd/dms-niri.kdl` or `/etc/greetd/dms-hypr.conf` to change compositor settings for the greeter #### Personalization The greeter can be personalized with wallpapers, themes, weather, clock formats, and more - configured exactly the same as dms. **Easiest method:** Run `dms-greeter-sync` to automatically sync your DMS theme with the greeter. **Manual method:** You can manually synchronize configurations if you want greeter settings to always mirror your shell: ```bash # Add yourself to the greeter group sudo usermod -aG greeter $USER # Set ACLs to allow greeter user to traverse your home directory setfacl -m u:greeter:x ~ ~/.config ~/.local ~/.cache ~/.local/state # Set group permissions on DMS directories sudo chgrp -R greeter ~/.config/DankMaterialShell ~/.local/state/DankMaterialShell ~/.cache/quickshell sudo chmod -R g+rX ~/.config/DankMaterialShell ~/.local/state/DankMaterialShell ~/.cache/quickshell # Create symlinks for theme files sudo ln -sf ~/.config/DankMaterialShell/settings.json /var/cache/dms-greeter/settings.json sudo ln -sf ~/.local/state/DankMaterialShell/session.json /var/cache/dms-greeter/session.json sudo ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /var/cache/dms-greeter/colors.json # Logout and login for group membership to take effect ``` **Advanced:** You can override the configuration path with the `DMS_GREET_CFG_DIR` environment variable or the `--cache-dir` flag when using `dms-greeter`. The default is `/var/cache/dms-greeter`. The cache directory should be owned by `greeter:greeter` with `770` permissions.