Skip to main content
██████╗  █████╗ ███╗   ██╗██╗  ██╗ ██████╗ ██████╗ ███████╗███████╗████████╗
██╔══██╗██╔══██╗████╗  ██║██║ ██╔╝██╔════╝ ██╔══██╗██╔════╝██╔════╝╚══██╔══╝
██║  ██║███████║██╔██╗ ██║█████╔╝ ██║  ███╗██████╔╝█████╗  █████╗     ██║
██║  ██║██╔══██║██║╚██╗██║██╔═██╗ ██║   ██║██╔══██╗██╔══╝  ██╔══╝     ██║
██████╔╝██║  ██║██║ ╚████║██║  ██╗╚██████╔╝██║  ██║███████╗███████╗   ██║
╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═╝╚══════╝╚══════╝   ╚═╝
                                                                          

Configuration

Custom Compositor Configuration

tip

Custom compositor configurations allow you to configure displays (resolution, refresh rate, position, etc.) specifically for the greeter.

niri

  1. Create a baseline configuration file at /etc/greetd/niri.kdl:
sudo tee /etc/greetd/niri.kdl > /dev/null << 'EOF'
hotkey-overlay {
skip-at-startup
}

environment {
DMS_RUN_GREETER "1"
}

gestures {
hot-corners {
off
}
}

layout {
background-color "#000000"
}
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command niri -C /etc/greetd/niri.kdl"
#...existing configuration
  1. Edit /etc/greetd/niri.kdl however you see fit, the greeter will run under this compositor configuration

Hyprland

  1. Create a baseline configuration file at /etc/greetd/hypr.conf:
sudo tee /etc/greetd/hypr.conf > /dev/null << 'EOF'
env = DMS_RUN_GREETER,1

misc {
disable_hyprland_logo = true
}
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command hyprland -C /etc/greetd/hypr.conf"
#...existing configuration
  1. Edit /etc/greetd/hypr.conf however you see fit, the greeter will run under this compositor configuration

Sway

  1. Create a baseline configuration file at /etc/greetd/sway:
sudo tee /etc/greetd/sway > /dev/null << 'EOF'
# Sway greeter configuration
# The exec command to launch the greeter is automatically appended by dms-greeter
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command sway -C /etc/greetd/sway"
#...existing configuration
  1. Edit /etc/greetd/sway however you see fit, the greeter will run under this compositor configuration

MangoWC

  1. Create a baseline configuration file at /etc/greetd/mangowc.conf:
sudo tee /etc/greetd/mangowc.conf > /dev/null << 'EOF'
# MangoWC greeter configuration
EOF
  1. Update the command in `/etc/greetd/config.toml to use this configuration
#...existing configuration
command = "dms-greeter --command mangowc -C /etc/greetd/mangowc.conf"
#...existing configuration
  1. Edit /etc/greetd/mangowc.conf however you see fit, the greeter will run under this compositor configuration

Syncing with DMS

You can automatically sync the system greeter with the logged in user's wallpaper, themes, fonts, etc.

Automatic Sync

You can use dms greeter sync to automatically set up theme syncing. This command is available for:

  • dankinstall users
  • Arch AUR users
  • Fedora COPR users
note

NixOS users: The dms greeter sync command is not available on NixOS. Please follow the manual sync steps below.

dms greeter sync

This will:

  • Add your user to the greeter group (if needed)
  • Set up ACL permissions on parent directories for greeter access
  • Configure group permissions on DMS config directories
  • Create symlinks to sync settings, wallpapers, and color themes
note

After running dms greeter sync, you will need to log out and log back in for group membership changes to take effect. After logging back in, your greeter will automatically reflect your current DMS theme, wallpaper, and settings.

Manual Sync

If you prefer to set up syncing manually:

  1. Add your user to the greeter group:
sudo usermod -aG greeter <username>
  1. Set up ACL permissions on parent directories:
setfacl -m u:greeter:x ~
setfacl -m u:greeter:x ~/.config
setfacl -m u:greeter:x ~/.local
setfacl -m u:greeter:x ~/.cache
setfacl -m u:greeter:x ~/.local/state
  1. Set group permissions on DMS config directories:
sudo chgrp -R greeter ~/.config/DankMaterialShell
sudo chmod -R g+rX ~/.config/DankMaterialShell

sudo chgrp -R greeter ~/.local/state/DankMaterialShell
sudo chmod -R g+rX ~/.local/state/DankMaterialShell

sudo chgrp -R greeter ~/.cache/quickshell
sudo chmod -R g+rX ~/.cache/quickshell
  1. Create configuration 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
note

You will have to logout or reboot for group change to take effect.

Checking Sync Status

To verify that your greeter is properly configured and syncing with your user settings, run:

dms greeter status

This command is available for all users and will check:

  • ✓ Group membership (whether your user is in the greeter group)
  • ✓ Cache directory existence
  • ✓ Configuration symlinks (settings, wallpaper, colors)
  • ✓ Whether source files exist and are readable

Example Output

=== DMS Greeter Status ===

Group Membership:
✓ User is in greeter group

Greeter Cache Directory:
✓ /var/cache/dms-greeter exists

Configuration Symlinks:
✓ Settings: synced correctly
✓ Session state: synced correctly
✓ Color theme: synced correctly

✓ All checks passed! Greeter is properly configured.

Troubleshooting

If dms greeter status shows issues:

User not in greeter group:

dms greeter sync
# Then log out and log back in

Symlinks missing or broken:

dms greeter sync

ACL permission issues (themes/wallpapers not appearing):

# Check if ACLs are set
getfacl ~ ~/.config ~/.local ~/.cache ~/.local/state | grep "user:greeter"

# If not, run sync again
dms greeter sync

Manual Configuration

The greeter uses three main configuration files located in /var/cache/dms-greeter/ (or your custom DMS_GREET_CFG_DIR):

  • settings.json - Appearance, behavior, and widget settings
  • session.json - Wallpaper configuration
  • colors.json - Color scheme configuration
note

These files are read-only by the greeter, not written or updated.

Colors

Colors can be configured in the exact same way described in DankMaterialShell Custom Themes

Settings

The settings.json file controls the greeter's appearance and behavior. Here's a complete reference:

Clock & Time

{
"use24HourClock": true,
"showSeconds": false,
"lockDateFormat": ""
}
  • use24HourClock: Use 24-hour format (true) or 12-hour format (false)
  • showSeconds: Display seconds in the clock
  • lockDateFormat: Custom Qt date format string (empty = Locale.LongFormat)

Weather

{
"weatherEnabled": true,
"weatherLocation": "New York, NY",
"weatherCoordinates": "40.7128,-74.0060",
"useAutoLocation": false,
"useFahrenheit": false
}
  • weatherEnabled: Show weather widget in top-right
  • weatherLocation: Display name for location
  • weatherCoordinates: "latitude,longitude" string
  • useAutoLocation: Auto-detect location via IP geolocation
  • useFahrenheit: Use Fahrenheit (true) or Celsius (false)

Appearance

{
"currentThemeName": "blue",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"iconTheme": "System Default",
"fontFamily": "Inter Variable",
"fontWeight": 400,
"fontScale": 1.0,
"cornerRadius": 12,
"widgetBackgroundColor": "sch",
"surfaceBase": "s",
"animationSpeed": 2
}
  • currentThemeName: Built-in theme name ("blue", "red", "green", etc.)
  • customThemeFile: Path to custom matugen JSON theme file
  • matugenScheme: Matugen color scheme variant
  • iconTheme: Icon theme name for DankIcon fallbacks
  • fontFamily: Primary font family
  • fontWeight: Font weight (400 = normal, 700 = bold)
  • fontScale: Font size multiplier (1.0 = default)
  • cornerRadius: Corner radius in pixels for UI elements
  • widgetBackgroundColor: Widget background scheme ("sch", "s", "sv")
  • surfaceBase: Surface base color scheme ("s", "sv", "sb")
  • animationSpeed: Animation speed (0 = fastest, 4 = slowest, 2 = default)

Complete Example

/var/cache/dms-greeter/settings.json:

{
"use24HourClock": true,
"showSeconds": false,
"lockDateFormat": "",
"lockScreenShowPowerActions": true,
"useFahrenheit": false,
"weatherLocation": "New York, NY",
"weatherCoordinates": "40.7128,-74.0060",
"useAutoLocation": false,
"weatherEnabled": true,
"currentThemeName": "blue",
"customThemeFile": "",
"matugenScheme": "scheme-tonal-spot",
"nightModeEnabled": false,
"iconTheme": "System Default",
"fontFamily": "Inter Variable",
"fontWeight": 400,
"fontScale": 1.0,
"cornerRadius": 12,
"widgetBackgroundColor": "sch",
"surfaceBase": "s",
"animationSpeed": 2
}

Wallpapers

The session.json file controls wallpaper settings.

Basic Configuration

{
"wallpaperPath": "/path/to/wallpaper.jpg",
"wallpaperFillMode": "PreserveAspectCrop"
}
  • wallpaperPath: Default wallpaper for all monitors
  • wallpaperFillMode: Qt fill mode
    • "PreserveAspectCrop" - Crop to fill (default)
    • "PreserveAspectFit" - Fit within bounds
    • "Stretch" - Stretch to fill

Per-Monitor Wallpapers

{
"wallpaperPath": "/path/to/default.jpg",
"wallpaperFillMode": "PreserveAspectCrop",
"monitorWallpapers": {
"DP-1": "/path/to/monitor1-wallpaper.jpg",
"DP-2": "/path/to/monitor2-wallpaper.jpg",
"HDMI-A-1": "#1a1a1a"
}
}
  • monitorWallpapers: Per-monitor wallpaper overrides
    • Key: Monitor name from niri msg outputs or hyprctl monitors
    • Value formats:
      • File paths: /path/to/image.jpg
      • Solid colors: #RRGGBB format
      • Wallpaper Engine: we:workshop_id format

Complete Example

/var/cache/dms-greeter/session.json:

{
"wallpaperPath": "/usr/share/backgrounds/default.jpg",
"wallpaperFillMode": "PreserveAspectCrop",
"monitorWallpapers": {
"DP-1": "/home/user/Pictures/wallpaper-main.png",
"DP-2": "#2e3440",
"HDMI-A-1": "/home/user/Pictures/wallpaper-side.jpg"
}
}