WTF — Wayland Tiling, F# Home Releases GitHub

Keybindings

Chord syntax

A binding is a chord string mapped to a semantic command:

bind "M-S-j" SwapNext

Modifiers, always in the order M C A S:

Letter Key
M the mod key (modKey in your config: Super by default, or Alt)
C Ctrl
A Alt
S Shift

Keys — you can bind any key:

bind "Print"        screenshotArea
bind "M-F1"         (Spawn "kitty -e man wtf")
bind "0x1008ff14"   (Spawn "playerctl play-pause")   // XF86AudioPlay by raw keysym

Only bare modifier presses (Super, Shift, …) and dead keys aren't bindable on their own. Note: the volume/mute/brightness XF86Audio* keys are already handled by the WM (they drive the MPRIS player / wpctl), so binding those is redundant.

Bindings are resolved against xkb group 0 (your first layout), so they keep working while you're typing in a second layout — M-j is M-j even when the active layout is Russian.

The default map

These are the built-in defaults (also active in safe mode). Your config.fsx keys block replaces this map, so copy what you want to keep.

Launch & close

Chord Command Effect
M-Return Spawn "kitty" terminal
M-p Spawn "wofi --show drun" launcher (seed config uses wtf-omnibox)
M-S-c CloseFocused close the focused window
M-S-q (hard-wired) quit WTF — clean exit, no restart

Focus & stack

Chord Command
M-j / M-k Focus NextWindow / Focus PrevWindow
M-m FocusMaster
M-S-Return SwapMaster — promote focused window to master
M-S-j / M-S-k SwapNext / SwapPrev

Spatial (directional) navigation — focus or move by screen direction (the nearest tile left/right/up/down, computed from the live layout geometry), not by stack order. Handy on arrow keys:

bind "M-Left"  focusLeft    // = Focus (InDir DirLeft)
bind "M-Right" focusRight
bind "M-Up"    focusUp
bind "M-Down"  focusDown
bind "M-S-Left"  swapLeft   // = SwapDir DirLeft — move the focused window there
bind "M-S-Right" swapRight

SwapWith n swaps the focused window with window n directly (the primitive behind pick-a-tile swapping); SwapDir is SwapWith aimed by direction.

Swap mode (COSMIC-style, default M-x) — a modal way to swap the focused window with any tile you pick:

bind "M-x" swapMode     // = SwapMode

Press it, and the focused window becomes the "source". Arrow keys (or h/j/k/l) move a highlighted selection across the layout; Return swaps source↔selection, Escape cancels. While the mode is active every key is captured. (You can also enter it over the socket: wtfctl swap-mode.)

Mouse: drag a tile to swap — hold Super (the default mod) and left-drag a tiled window. It follows the pointer as a ghost; drop it on another tile and the two swap (dropping on empty space or itself does nothing). The layout is untouched until you release — no window collapses mid-drag. This is the pointer equivalent of swap mode: same SwapWith under the hood, the target sourced from where you drop instead of the arrow keys. (Floating windows are moved the normal way, by their own title bar / client drag — that path is unchanged.)

Layouts

Chord Command
M-space NextLayout — cycle
M-t / M-w / M-b / M-g / M-f SetLayout tall / wide / bsp / grid / full
M-h / M-l SetRatio 0.4 / SetRatio 0.6 — master width
M-period / M-comma IncMaster / DecMaster
M-equal / M-minus IncGaps / DecGaps
M-S-space ToggleFloat
M-S-f ToggleFullscreen

Workspaces

Chord Command
M-1M-9 SwitchWorkspace "1""9"
M-S-1M-S-9 MoveToWorkspace "1""9"
M-Tab NextWorkspace

Session & history

Chord Command
M-z / M-S-z Undo / Redo (window-arrangement history)
M-S-s SaveSession
M-S-r ReloadConfig — re-read config.fsx from disk (seed config)

Singleton launches: once

Mashing a launcher key shouldn't stack ten launchers. Wrap any Spawn in once and a new instance starts only if the previous one has exited:

bind "M-p" (once (Spawn "wtf-omnibox"))

The full command vocabulary

Anything bindable is also scriptable via wtfctl. Commands:

Focus (NextWindow|PrevWindow|ByApp "x"|ById n|InDir DirLeft|…|Focused) · FocusMaster · SwapNext · SwapPrev · SwapMaster · SwapWith n · SwapDir (DirLeft|DirRight|DirUp|DirDown) · ToggleFloat · ToggleFullscreen · SinkAll · CloseFocused · Spawn cmd · SpawnOnce cmd · SwitchWorkspace tag · MoveToWorkspace tag · NextWorkspace · PrevWorkspace · SetLayout name · NextLayout · SetWorkspaceType name · SetWorkspaceState data · SetMaster n · IncMaster · DecMaster · SetRatio f · SetGaps n · IncGaps · DecGaps · SetInactiveOpacity f · SetAnimationSpeed f · SetBorderWidth n · SetBorderColor … · SetCornerRadius n · SetBlur b · Undo · Redo · SaveSession · LoadSession · ReloadConfig

Found a problem on this page? Edit it on GitHub — the site rebuilds from docs/ automatically.