Setup
Dux Shell
Setup
The dms setup command generates default configuration files for your compositor (niri, Hyprland, or MangoWC). It only writes files that don't already exist or are empty, so it won't clobber anything you've customized.
Running dms setup with no arguments deploys all defaults at once. You can also deploy individual configs one at a time.
Quick Start
Deploy all default configs:
dms setup
Deploy just keybinds:
dms setup binds
Subcommands
| Subcommand | Description | niri | Hyprland | MangoWC |
|---|---|---|---|---|
binds | Default keybinds config | ~/.config/niri/dms/binds.kdl | ~/.config/hypr/dms/binds.lua | ~/.config/mango/dms/binds.conf |
colors | Default colors config | ~/.config/niri/dms/colors.kdl | ~/.config/hypr/dms/colors.lua | ~/.config/mango/dms/colors.conf |
layout | Default layout config | ~/.config/niri/dms/layout.kdl | ~/.config/hypr/dms/layout.lua | ~/.config/mango/dms/layout.conf |
outputs | Default outputs config | ~/.config/niri/dms/outputs.kdl | ~/.config/hypr/dms/outputs.lua | ~/.config/mango/dms/outputs.conf |
cursor | Default cursor config | ~/.config/niri/dms/cursor.kdl | ~/.config/hypr/dms/cursor.lua | ~/.config/mango/dms/cursor.conf |
windowrules | Default window rules config | ~/.config/niri/dms/windowrules.kdl | ~/.config/hypr/dms/windowrules.lua | ~/.config/mango/dms/windowrules.conf |
alttab | Default alt-tab config (niri only) | ~/.config/niri/dms/alttab.kdl | — | — |
Running dms setup with no subcommand deploys all of the above, plus the input fragment (dms/input.kdl on niri, dms/input.lua on Hyprland, dms/input.conf on MangoWC) and, on Hyprland, dms/binds-user.lua. The input fragment has no subcommand of its own.
DMS writes Hyprland config in Lua only. When the installed Hyprland reports a version older than 0.55, dms setup stops with hyprland.lua is not loaded by Hyprland <version>; DMS needs 0.55 or newer instead of writing a config Hyprland would ignore. If the version can't be detected, it deploys anyway.
If you installed DMS from packages (not through the interactive installer), run dms setup after install to get working compositor and terminal configs right away.
Headless
dms setup headless deploys configs without any prompts, for installers and scripts.
dms setup headless --compositor niri
| Flag | Description |
|---|---|
--compositor | Required. niri, hyprland, or mango |
--terminal | Also deploy a terminal config and wire it into the keybinds: ghostty, kitty, or alacritty |
--force | Overwrite existing configs. Existing files get timestamped backups first |
--skip-existing | Log a warning and skip anything that already has a config, instead of failing |
--no-systemd | Deploy the session config without systemd integration |
With systemd, setup binds dms.service to the compositor's session unit (the same step as dms systemd enable) and the deployed config does not start DMS itself. If that binding fails, the config falls back to starting dms run.
If a config already exists and you pass neither --force nor --skip-existing, the command fails with a non-zero exit so scripts notice. The two flags can't be combined.
dms refuses to run as root, so from an install hook run it as the target user:
runuser -u youruser -- dms setup headless --compositor niri --skip-existing
NixOS Home-Manager Users
If you manage your niri or Hyprland config through home-manager, you probably don't want dms setup writing files that conflict with your declarative config. Instead, use the individual subcommands to generate only the pieces you need.
For example, if you handle keybinds through the niri home-manager module but want DMS defaults for colors and layout:
dms setup colors
dms setup layout
The niri home-manager module's niri.includes option references these same files under ~/.config/niri/dms/. See the niri integration docs for the full list of included files.
The individual subcommands are safe to run at any time — they skip files that already have content. To force a reset, delete or empty the file first, then run the subcommand again.