Configuration

One live-reloaded KDL file drives everything: the mod key, input, binds, submaps, appearance, animations, rules and more.

atlaswm reads one file: $XDG_CONFIG_HOME/atlaswm/config.kdl (i.e. ~/.config/atlaswm/config.kdl). It's KDL, it's live-reloaded within a second of saving, and a parse error never takes the session down — the last good config keeps running and the error is logged. Your file only needs the lines you want to change; everything else falls back to the compiled-in defaults.

To start from a documented baseline:

atlasctl default-config > ~/.config/atlaswm/config.kdl

How it merges

  • Sections override. Set appearance { border-width 0 } and only that key changes; the rest of appearance keeps its defaults.
  • Binds merge. Same key pattern as a default = override it; a new pattern = added on top. You don't have to re-list every default bind.
  • Bad config is inert. A typo, an unknown verb, a broken regex → the parse fails, the error is logged, and the previously-loaded config keeps running. The session never goes down over a config mistake; fix the file and save to re-apply (live reload).

Two things about keys:

  • Binds follow the letter, not the physical key: Mod+q on azerty is the key that types q. Caps Lock and Num Lock never affect binds.
  • input { xkb-layout "fr" } is how azerty works without XKB_DEFAULT_* env vars.

The main blocks

A quick map of what lives where. Each is optional; omit a block to take its defaults.

BlockWhat it controls
mod "auto"The modifier all binds reference. auto = Alt nested, Super on a real session. Override with alt or super.
input { … }XKB layout / variant / options, and key repeat-delay / repeat-rate.
pan-step 200Pixels moved per pan action.
gaps 0Spacing (px) between tiled windows. 0 = gapless.
zoom-steps 1.0 0.5The zoom ladder: descending factors in (0, 1]. Fit-plane is always appended as the last rung.
resize { step-px step-share }Keyboard resize steps: pixels for absolute targets, a share fraction for weighted ones.
animations { enable duration-ms curve }Pan/zoom/window-move easing. enable #false (or duration-ms 0) = instant.
debug { trace #false }When on, appends every action and its resolved target to ~/.local/state/atlaswm/trace.log.
appearance { … }Tab strip colours, window border width/colours, the resize-target highlight, and the jump-to-window label font/size/colours/keys.
binds { … }The keybind table — "<pattern>" "<action>" per line. See Keybindings.
submaps { … }Modal bind tables (resize / planes / pan / your own). See Keybindings.
rules { … }Window rules: match by app-id/title (regex), override target plane / tags / float / size / open-as-tab. See Concepts.
anchors { … }Named viewport bookmarks seeded onto plane 1. See Concepts.
spawn-at-startup "cmd" "args"…Launch a program once at session start (a bar, wallpaper, …). Repeatable; not re-run on live reload.
outputs { … }Place monitors in the combined screen space by connector name, and optionally set each one's starting plane.
idle { timeout command }Built-in auto-lock: after timeout seconds idle, run command (your locker). Off by default.

A minimal config

You rarely need more than a handful of lines. A common starting point:

mod "super"
gaps 8

input {
    xkb-layout "fr"
}

animations {
    enable #true
    duration-ms 150
    curve "ease-out-cubic"
}

spawn-at-startup "waybar"
spawn-at-startup "swaybg" "-i" "/path/to/wallpaper.png"

binds {
    "Mod+d" "spawn:wofi --show drun"
    "Mod+Print" "spawn:grim -g \"$(slurp)\" ~/shot.png"
}

That keeps every default bind, adds two of your own, picks Super as the mod, turns on 8 px gaps and animations, sets azerty, and autostarts a bar and wallpaper.

The full reference

Every key, with its compiled-in default value and an inline comment, lives in the configuration reference — reproduced verbatim from DEFAULT_CONFIG (a unit test keeps it from drifting from the code). It's the authoritative list:

The reference is the place to copy exact syntax for rules, anchors, outputs, idle, the width/height ratio verbs, marks, groups and the rest — all shown as commented examples you can uncomment and edit.