1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-03 20:32:07 -04:00
Files
DankMaterialShell/quickshell/Modules/Greetd
purian23 acf63c57e8 fix(Greeter): Multi-distro reliability updates
- Merge duplicate niri input/output KDL nodes instead of appending. Allows more overrides
- Guard AppArmor install/uninstall behind IsAppArmorEnabled() check
2026-03-08 22:28:32 -04:00
..

Dank (dms) Greeter

A greeter for 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
  • Multiple compositors: Supports niri, Hyprland, Sway, or mangowc.
  • Custom PAM: Supports custom PAM configuration in /etc/pam.d/greetd
  • Session Memory: Remembers last selected session and user
    • Can be disabled via settings.json keys: greeterRememberLastSession and greeterRememberLastUser

Installation

Arch Linux

Arch linux users can install greetd-dms-greeter-git from the AUR.

paru -S greetd-dms-greeter-git
# Or with yay
yay -S greetd-dms-greeter-git

Debian / openSUSE

Official packages are available from the DankLinux OBS repository. Add the repo for your distribution and install:

# Debian 13
sudo apt install dms-greeter   # after adding the repo

# openSUSE Tumbleweed
zypper install dms-greeter     # after adding the repo

See the Installation guide for full repository setup.

If you previously installed manually, remove legacy files first:

sudo rm -f /usr/local/bin/dms-greeter
sudo rm -rf /etc/xdg/quickshell/dms-greeter

Then complete setup:

dms greeter enable
dms greeter sync

Syncing themes (Optional)

To sync your wallpaper and theme with the greeter login screen, follow the manual setup below:

Manual theme syncing
# Add yourself to greeter group
sudo usermod -aG greeter <username>

# 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/DankMaterialShell
sudo chmod -R g+rX ~/.config/DankMaterialShell ~/.cache/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/DankMaterialShell/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:

# 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 complete setup:

dms greeter enable
dms greeter sync

Syncing themes (Optional)

Run:

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. On Debian/openSUSE, this now prefers the dms-greeter package when the OBS repo is configured.

Manual (fallback only)

Use this only if no package is available for your distro.

  1. Install greetd (in most distro's standard repositories) and quickshell

  2. Create the greeter user (if not already created by greetd):

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
  1. Clone the dms project to /etc/xdg/quickshell/dms-greeter:
sudo git clone https://github.com/AvengeMedia/DankMaterialShell.git /etc/xdg/quickshell/dms-greeter
  1. Copy Modules/Greetd/assets/dms-greeter to /usr/local/bin/dms-greeter:
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
  1. Create greeter cache directory with proper permissions:
sudo mkdir -p /var/cache/dms-greeter
sudo chown greeter:greeter /var/cache/dms-greeter
sudo chmod 750 /var/cache/dms-greeter
  1. Edit or create /etc/greetd/config.toml:
[terminal]
vt = 1

[default_session]
user = "greeter"
# Change compositor to sway, hyprland, or mangowc if preferred
command = "/usr/local/bin/dms-greeter --command niri"
  1. Disable existing display manager and enable greetd:
sudo systemctl disable gdm sddm lightdm
sudo systemctl enable greetd
  1. (Optional) Set up theme syncing using the manual ACL method described in the Configuration → Personalization section below

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:

imports = [
  inputs.dank-material-shell.nixosModules.greeter
]

Enable the greeter with this in your NixOS config:

programs.dank-material-shell.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

The dms-greeter wrapper simplifies running the greeter with any compositor:

dms-greeter --command niri
dms-greeter --command hyprland
dms-greeter --command sway
dms-greeter --command mangowc
dms-greeter --command niri -C /path/to/custom-niri.kdl
dms-greeter --command niri --remember-last-user false --remember-last-session false

Configure greetd to use it in /etc/greetd/config.toml:

[terminal]
vt = 1

[default_session]
user = "greeter"
command = "/usr/bin/dms-greeter --command niri"

Manual usage

To run dms in greeter mode you can also manually set environment variables:

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:

# 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/DankMaterialShell/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.