██████╗ █████╗ ███╗ ██╗██╗ ██╗ ██████╗ ██████╗ ███████╗███████╗████████╗
██╔══██╗██╔══██╗████╗ ██║██║ ██╔╝██╔════╝ ██╔══██╗██╔════╝██╔════╝╚══██╔══╝
██║ ██║███████║██╔██╗ ██║█████╔╝ ██║ ███╗██████╔╝█████╗ █████╗ ██║
██║ ██║██╔══██║██║╚██╗██║██╔═██╗ ██║ ██║██╔══██╗██╔══╝ ██╔══╝ ██║
██████╔╝██║ ██║██║ ╚████║██║ ██╗╚██████╔╝██║ ██║███████╗███████╗ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝
Configuration
Custom Compositor Configuration
Custom compositor configurations allow you to configure displays (resolution, refresh rate, position, etc.) specifically for the greeter.
niri
- 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
- 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
- Edit
/etc/greetd/niri.kdlhowever you see fit, the greeter will run under this compositor configuration
Hyprland
- 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
- 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
- Edit
/etc/greetd/hypr.confhowever you see fit, the greeter will run under this compositor configuration
Sway
- 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
- 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
- Edit
/etc/greetd/swayhowever you see fit, the greeter will run under this compositor configuration
MangoWC
- Create a baseline configuration file at
/etc/greetd/mangowc.conf:
sudo tee /etc/greetd/mangowc.conf > /dev/null << 'EOF'
# MangoWC greeter configuration
EOF
- 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
- Edit
/etc/greetd/mangowc.confhowever 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
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
greetergroup (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
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:
- Add your user to the
greetergroup:
sudo usermod -aG greeter <username>
- 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
- 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
- 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
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
greetergroup) - ✓ 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 settingssession.json- Wallpaper configurationcolors.json- Color scheme configuration
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 clocklockDateFormat: 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-rightweatherLocation: Display name for locationweatherCoordinates:"latitude,longitude"stringuseAutoLocation: Auto-detect location via IP geolocationuseFahrenheit: 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 filematugenScheme: Matugen color scheme varianticonTheme: Icon theme name for DankIcon fallbacksfontFamily: Primary font familyfontWeight: Font weight (400= normal,700= bold)fontScale: Font size multiplier (1.0= default)cornerRadius: Corner radius in pixels for UI elementswidgetBackgroundColor: 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 monitorswallpaperFillMode: 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 outputsorhyprctl monitors - Value formats:
- File paths:
/path/to/image.jpg - Solid colors:
#RRGGBBformat - Wallpaper Engine:
we:workshop_idformat
- File paths:
- Key: Monitor name from
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"
}
}