Configuration
Aqueous keeps its configuration in four small TOML files. wm.toml is the
entry point; the other files are optional overlays that keep layout, input, and
window policy easy to navigate.
Directory~/.config/aqueous/
- wm.toml outputs, keybindings, commands, struts, and global policy
- layout.toml layout engines, slots, and workspace/output defaults
- input.toml keyboard, mouse, touchpad, and trackpoint policy
- rules.toml per-window behavior and game-mode policy
How parsing and reloads work
Section titled “How parsing and reloads work”Aqueous accepts a deliberately small TOML-compatible subset: sections,
repeated tables, key/value assignments, arrays used by bindings and positions,
inline maps used by exec.env, and # comments. Unknown keys and malformed
values are ignored individually, while valid recognized values elsewhere in
the file still apply.
The compositor checks the resolved files once per second. A changed file is
loaded into a complete replacement snapshot and then applied in one manage
cycle. This includes keybindings, input settings, layouts, rules, effects, and
output configuration. Press Super+R to run the same reload immediately.
[keybinds]reload_config = "Super+R"# reload_rules = "Super+Shift+R" # optional: reload only rules.tomlFile discovery
Section titled “File discovery”For the standard setup, put all four files in ~/.config/aqueous/. Advanced
setups can select alternate paths with environment variables or sidecar
selectors:
| File | Search order (first match wins) |
|---|---|
wm.toml |
$AQUEOUS_CONFIG, $XDG_CONFIG_HOME/aqueous/wm.toml, ~/.config/aqueous/wm.toml, /etc/xdg/aqueous/wm.toml |
layout.toml |
existing ~/.config/aqueous/layout.toml, $AQUEOUS_LAYOUT, [layout].path, $XDG_CONFIG_HOME/aqueous/layout.toml, /etc/xdg/aqueous/layout.toml |
input.toml |
$AQUEOUS_INPUT, [input].path, $XDG_CONFIG_HOME/aqueous/input.toml, ~/.config/aqueous/input.toml, /etc/xdg/aqueous/input.toml |
rules.toml |
$AQUEOUS_RULES, [rules].path, $XDG_CONFIG_HOME/aqueous/rules.toml, ~/.config/aqueous/rules.toml |
~ is expanded in explicit paths. A relative [layout].path is resolved next
to wm.toml; use an absolute or ~-prefixed path for [input].path and
[rules].path.
A practical wm.toml
Section titled “A practical wm.toml”This example is intentionally compact. It configures two outputs, reserves no extra panel space, defines the commands used by built-in bindings, and points to the three sidecars.
[display]apply_on_start = trueapply_on_reload = true
[[output]]name = "eDP-1"enabled = truemode = "1920x1200@60"scale = 1.25position = [0, 0]primary = truelayout = "scrolling"
[[output]]name = "DP-1"enabled = truemode = "2560x1440@144"scale = 1.0position = [1536, 0] # logical coordinates after eDP-1's scaleadaptive_sync = truelayout = "tile"
[struts]top = 0bottom = 0left = 0right = 0
[actions]toggle_start_menu = "noctalia msg panel-toggle launcher"spawn_terminal = "foot"lock_screen = "swaylock -f"
[layout]path = "~/.config/aqueous/layout.toml"force_ssd = false
[input]path = "~/.config/aqueous/input.toml"
[rules]path = "~/.config/aqueous/rules.toml"Output positions use logical coordinates. If you omit position, Aqueous
places otherwise unconfigured outputs in a non-overlapping horizontal row.
Display fields accept connector-name globs such as DP-*; layout-only output
matching uses an exact connector name. An edid selector is also accepted when
connector names are not stable.
Display transforms and profiles
Section titled “Display transforms and profiles”transform accepts normal, 90, 180, 270, and the four flipped-*
variants. scale must be between 0.5 and 3.0.
Named profiles use the same display fields as [[output]] and can be selected
through Aqueous’s output-service API. A fallback profile can provide a safe
configuration when a normal output transaction is rejected.
[display]fallback_profile = "internal-only"
[[display.profile]]name = "internal-only"
[[display.profile.output]]name = "eDP-1"enabled = trueposition = [0, 0]primary = true
[[display.profile.output]]name = "DP-*"enabled = falseManaged commands
Section titled “Managed commands”Use repeated [[exec]] blocks for processes Aqueous should start or supervise.
Both name and command are required.
[[exec]]name = "wallpaper"command = "swaybg -i ~/.config/aqueous/wallpaper.png -m fill"when = "startup" # startup | reload | alwaysonce = truerestart = falselog = "/tmp/aqueous-wallpaper.log"env = { XDG_CURRENT_DESKTOP = "Aqueous" }startupruns during compositor startup.reloadruns after a configuration reload.alwaysis eligible in both cases.once = trueprevents the same named command from being started twice.restart = trueretries a child that exits unsuccessfully.
The packaged Noctalia shell is managed by a systemd user service, so it does
not need a second [[exec]] entry.
Window-state behavior
Section titled “Window-state behavior”[state]fullscreen_hides_bar = truemaximize_full_output = falsemaximize_full_output = false keeps maximized windows inside the output’s
usable area. The fullscreen_hides_bar compatibility key is parsed, but hiding
upper layer-shell surfaces is not currently implemented.
