Skip to content

Keybindings

Built-in bindings live under [keybinds] in wm.toml. Each action accepts one chord, an array of chords, or an empty array that removes every chord for that action:

[keybinds]
cycle_focus = ["Super+Tab", "Alt+Tab"]
close_focused = "Super+Q"
reload_rules = []

Omitting an action keeps its compiled default. The packaged wm.toml adds convenient bindings for layout slots and column movement that are not all compiled defaults.

Join case-insensitive tokens with +.

  • Primary modifier: Super, Mod4, Logo, or Win.
  • Physical Super modifier: Meta, even when AQUEOUS_MOD=Alt.
  • Other modifiers: Ctrl/Control, Alt/Mod1, and Shift.
  • Keys: printable ASCII, F1–F24, navigation/editing names, punctuation names, Print, CapsLock, and common XF86 media/display/brightness keys.
  • Scroll directions: WheelUp, WheelDown, WheelLeft, and WheelRight, including accumulated touchpad scroll steps.

AQUEOUS_MOD=Alt makes Alt the primary modifier; in that mode literal Alt is still resolved consistently. Use Meta to address the physical Super key.

Action Compiled default
toggle_start_menu Super+Space
spawn_terminal Super+Return
screenshot Print
close_focused Super+Q
toggle_overview Super+W
cycle_focus Super+Tab
focus_left/right/up/down Super+H/L/K/J
reload_config Super+R
lock_screen Super+Ctrl+L
untrap_pointer Super+grave

The overview contains every focusable window on the active workspace, including off-viewport scrolling members. Navigate with arrows, H/J/K/L, Tab, or pointer input, then confirm a window or close the overview.

Four command actions run values from [actions]:

[actions]
toggle_start_menu = "dms ipc call spotlight toggle"
spawn_terminal = "ghostty"
screenshot = "dms screenshot region"

These examples use the DMS source-package commands. Set lock_screen to your chosen session locker’s command; binding the action alone does not configure a locker. Noctalia users can keep their existing shell commands.

[keybinds]
move_window_left = "Super+Shift+Left"
move_window_right = "Super+Shift+Right"
move_window_up = "Super+Shift+Up"
move_window_down = "Super+Shift+Down"

Movement follows the active engine:

  • Tile, grid, dwindle, and reverse-dwindle swap geometric neighbors.
  • Scrolling joins adjacent columns or reorders members vertically.
  • Monocle changes z-stack order.
  • Game Mode delegates to its active remainder while the anchor stays fixed.
  • Composable delegates to the member’s child; cross-region pointer drops exchange membership.
  • Stacking uses the configured fine movement step.
Action Typical/default chord
scroll_viewport_left/right Super+Comma/Period (legacy names)
scroll_viewport_left_arrow/right_arrow Super+Left/Right
wheel_scroll_left/right Super+WheelUp/Down
scroll_viewport_up/down Super+Up/Down
wheel_scroll_up/down Alt+Meta+WheelUp/Down
consume_window_into_column Super+Ctrl+J
expel_window_from_column Super+Ctrl+K
toggle_scrolling_full_width Super+Shift+Z
move_column_left/right packaged as Super+Shift+H/L

The primary-modifier wheel chord pans columns; primary+Alt moves within a vertical column. See Layouts for pointer insertion and resize behavior.

Wheel actions accept the same string, array, or empty-array syntax as keyboard actions. Rebinding one removes its previous default without changing the arrow shortcuts:

[keybinds]
wheel_scroll_left = ["Ctrl+WheelUp", "Ctrl+WheelLeft"]
wheel_scroll_right = ["Ctrl+WheelDown", "Ctrl+WheelRight"]
wheel_scroll_up = []
wheel_scroll_down = []
[keybinds.custom]
"Super+WheelUp" = "builtin:focus_workspace_up"
"Super+WheelDown" = "builtin:focus_workspace_down"

Custom wheel chords can run any supported action or command outside scrolling layouts, too. An explicit custom chord replaces the default on that chord. Matched steps are consumed even when the action has no effect; unmatched directions reach the application. Wheel input cannot hold untrap_pointer. Locks, shortcut inhibition, overview, interactive drags, and XWayland keyboard grabs prevent wheel bindings from running.

The four set_layout_primary/secondary/tertiary/quaternary actions resolve through [layout.slots]. Direct custom actions can select an ID or slot:

[keybinds.custom]
"Super+Alt+D" = "set_layout:dwindle"
"Super+Alt+Shift+D" = "set_layout:reverse-dwindle"
"Super+Alt+F" = "set_layout:stacking"
"Super+Alt+C" = "set_layout:composable"
"Super+Alt+1" = "builtin:focus_composable:a"
"Super+Alt+Shift+1" = "builtin:move_to_composable:a"

Aqueous creates nine pinned workspaces per output. One is active on each output, and each window belongs to at most one workspace.

[keybinds]
focus_workspace_1 = "Super+1" # through focus_workspace_9
move_to_workspace_1 = "Super+Shift+1" # through move_to_workspace_9
focus_workspace_up = "Super+Bracketleft"
focus_workspace_down = "Super+Bracketright"
focus_previous_workspace = "Super+BackSpace"
move_to_workspace_up = "Super+Shift+Bracketleft"
move_to_workspace_down = "Super+Shift+Bracketright"
focus_output_left = "Super+Ctrl+Comma"
focus_output_right = "Super+Ctrl+Period"
move_to_output_left = "Super+Shift+Comma"
move_to_output_right = "Super+Shift+Period"
rotate_output_clockwise = "Super+Ctrl+R"

Output navigation uses physical rectangles rather than connector iteration order. Rotation targets only the enabled output beneath the pointer and is not persisted to TOML.

An explicitly selected output remains the target for subsequent workspace and window actions even when it is empty. Output navigation moves the pointer to the destination; mouse-follows-focus can additionally place it inside the newly focused window.

[keybinds]
toggle_fullscreen = "Super+Shift+F"
toggle_maximize = "Super+Shift+M"
toggle_floating = "Super+Shift+Space"
toggle_minimize = "Super+N"
unminimize_last = "Super+Shift+N"

Toggles remember prior presentation. Aqueous keeps one fullscreen owner per output; minimized windows leave layout and focus selection until restored. toggle_maximize_horizontal and toggle_maximize_vertical are available as unbound partial-maximize actions.

These built-ins are intentionally unbound so existing configurations keep their chords:

Group Actions
Stack order raise_window, lower_window, toggle_always_above, toggle_always_below
Fine movement nudge_floating_left/right/up/down
Coarse movement nudge_floating_coarse_left/right/up/down
Grow an edge resize_floating_left/right/up/down
Shrink an edge shrink_floating_left/right/up/down
Standard snap snap_left/right/up/down, snap_center, four corner actions, unsnap
Named stacking snap builtin:snap_zone:<layout>/<zone>, builtin:set_snap_layout:<layout>, builtin:cycle_snap_layout[_reverse]
Legacy custom snap builtin:snap_zone:a through d, cycle_snap_zone
Fit/partial maximize fit_floating_to_output, toggle_maximize_horizontal/vertical
Edge operations move_floating_to_edge_<direction>, grow_floating_to_edge_<direction>

The pixel increments, gap, resistance, and top-edge behavior come from [layout.options.stacking].

[keybinds.custom] maps a chord to one verb:

[keybinds.custom]
"Super+E" = "spawn:nemo"
"Super+Shift+V" = "launch:vesktop-ssd"
"Super+Shift+S" = "builtin:screenshot"
"Alt+F4" = "builtin:close_focused"
"Super+Alt+2" = "builtin:snap_zone:work/terminal"
"Super+Alt+W" = "builtin:set_snap_layout:work"
"Super+Alt+Space" = "builtin:cycle_snap_layout"
"XF86AudioRaiseVolume" = "spawn:wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
  • spawn:<command> runs a detached /bin/sh -c command.
  • launch:<profile> directly executes a named [[application]] profile with its typed argument and environment arrays, without a shell.
  • set_layout:<id-or-slot> selects a layout directly.
  • builtin:<action> invokes any canonical built-in action, including argument forms for snap zones and composable regions.

Use launch: for application-specific Wayland or decoration switches where argument boundaries matter. Profiles are defined in wm.toml; see Application launch profiles.

builtin:cycle_snap_layout_reverse cycles named layouts in the opposite direction. Named layout and zone actions are consumed only on a full stacking workspace; they remain inert in every other layout, including for persistent floating overlays.

If several declarations resolve to the same chord, the last declaration wins. A bound Caps Lock chord is consumed by Aqueous and does not toggle the lock; without a binding, Caps Lock retains normal XKB behavior.

© 2026 Seafoam LabsShelly Chel