Recipe: i3 / sway-like

Planes as numbered workspaces, recursive h/v splits and WM-level tabs, familiar i3 binds — the manual-tiling feel on an infinite canvas.

i3 and sway are manual tilers: you split containers horizontally or vertically, nest them, collapse stacks into tabs, and page between numbered workspaces. atlaswm has all of those pieces — recursive splits, WM-level tabs, and a pool of planes you can drive like workspaces — so it maps onto i3 muscle memory cleanly, with an infinite plane underneath each workspace instead of a fixed screen.

What it feels like

Mod+1Mod+9 jump between planes-as-workspaces. Within a plane you split the focused cell horizontally or vertically and the new window lands in place, i3-style; nested splits give you the classic container tree. Collapse a column into tabs when it's crowded. It's the deliberate, manual layout control i3 is loved for — the difference is each workspace is a 2D atlas, so a workspace never "runs out of room."

The atlaswm primitives it uses

  • Planes as workspaces (plane-switch:<n>, 1-based, autocreated on demand).
  • Recursive splits in place (spawn-split-h / spawn-split-v).
  • WM-level tabs (toggle-tabs, tab-next / tab-prev).
  • Directional focus and move (focus-*, move-*).
  • Move window to workspace (window-to-plane-next / -prev).

Config

mod "super"

binds {
    // Workspaces = planes. plane-switch:N is 1-based and autocreates on the way.
    "Mod+ampersand"  "plane-switch:1"
    "Mod+eacute"     "plane-switch:2"
    "Mod+quotedbl"   "plane-switch:3"
    "Mod+apostrophe" "plane-switch:4"

    // Splits, in place (i3's split-h / split-v + the new window).
    "Mod+Ctrl+Return" "spawn-split-h"
    "Mod+Ctrl+Shift+Return" "spawn-split-v"
    "Mod+Return" "spawn-column"

    // Tabs (i3 stacking/tabbed layout).
    "Mod+t" "toggle-tabs"
    "Mod+Tab" "tab-next"
    "Mod+Shift+Tab" "tab-prev"

    // Directional focus + move, vim keys.
    "Mod+h" "focus-left"
    "Mod+j" "focus-down"
    "Mod+k" "focus-up"
    "Mod+l" "focus-right"
    "Mod+Shift+h" "move-left"
    "Mod+Shift+j" "move-down"
    "Mod+Shift+k" "move-up"
    "Mod+Shift+l" "move-right"

    // Float toggle + fullscreen, i3-style.
    "Mod+space" "toggle-float"
    "Mod+f" "fullscreen"
}

The number-row caveat. i3 binds Mod+1Mod+9. Binds follow the letter the key types, not the physical position — so on azerty/fr the top-row keys type &, é, ", ', … (digits need Shift), which is what the example above binds (ampersand, eacute, quotedbl, apostrophe). On a qwerty layout use "Mod+1" "plane-switch:1" and so on. Match the keysyms your keyboard actually produces — run with debug { trace #true } to see what a key reports.

GIF

When to use it

  • You're coming from i3 or sway and want your bindings and habits to carry over.
  • You prefer manual, deliberate layout control over automatic tiling.
  • You want numbered workspaces — but with room to spread out inside each one.

Mix it up

Add window rules to send apps to a fixed plane (plane 2 for the browser) the way i3's assign does; use gather/summon for an i3 scratchpad-on-steroids; or pan/zoom within a workspace when one plane gets busy instead of opening another. See also niri-like, driftwm-like and spatial hub.