Files
dotfiles/docs/tiling-wm-experience.md

8.1 KiB

Tiling WM Experience Spec

This document describes the tiling window manager experience I am targeting.

Priority Levels

  • Required: daily-driver behavior.
  • Important: expected for parity, but a rough first version is acceptable.
  • Nice: useful polish or compatibility.

Workspaces and Monitors

Required behavior:

  • Workspaces are a shared global set, not independent per-monitor namespaces.
  • Focusing workspace N shows workspace N on the currently focused monitor.
  • Moving a window to workspace N does not require caring which monitor currently owns that workspace.
  • Sending the focused window to workspace N without following it is a first-class operation.
  • Moving the focused window to workspace N and following it is a first-class operation.
  • Sending the focused window to the next empty workspace without following it is a first-class operation.
  • Moving the focused window to the next empty workspace and following it is a first-class operation.
  • Normal workspaces are bounded to 1..9.
  • Workspace history is tracked per monitor.
  • Last-workspace toggle uses the current monitor's workspace history.
  • Workspace cycling works on the current monitor within the bounded workspace set.

Important behavior:

  • Swapping the current workspace contents with another workspace is available.
  • Moving a window to an empty workspace on another monitor is available.
  • Moving the focused window to another monitor without following keeps keyboard focus on the original monitor.
  • Moving the focused window to another monitor and following it moves keyboard focus to the destination monitor.
  • Hidden/special workspaces exist for scratchpad state.
  • Hidden/special workspaces exist for minimized state.
  • Hidden/special workspaces are excluded from ordinary workspace cycling.
  • Hidden/special workspaces are excluded from taffybar's normal workspace list.

Directional Navigation

Required behavior:

  • Super+w/a/s/d focuses windows directionally.
  • Super+Shift+w/a/s/d swaps or moves the focused window directionally.
  • Super+Ctrl+w/a/s/d moves the focused window to the monitor in that direction while preserving useful focus.
  • Hyper+w/a/s/d focuses monitors directionally.
  • Hyper+Shift+w/a/s/d swaps or moves windows between monitors directionally.
  • Hyper+Ctrl+w/a/s/d moves the focused window to an empty workspace on the monitor in that direction.

Important behavior:

  • Directional focus in tabbed/fullscreen mode should cycle predictably through windows even though their screen geometry overlaps.
  • Keyboard resize remains available, but it should not displace the directional move-to-monitor binding.

Layouts

Required behavior:

  • Tiling is dynamic.
  • Primary layout is equal-width vertical columns.
  • All ordinary splits are vertical.
  • Adding windows dynamically redistributes all tiled windows evenly.
  • Removing windows dynamically redistributes all tiled windows evenly.
  • Ordinary use should not require manually managing a split tree.
  • Tabbed/fullscreen-style monocle layout is available.
  • Directional window navigation bindings continue to switch windows in tabbed/fullscreen mode.
  • The important layouts are columns and tabbed/fullscreen.

Important behavior:

  • One-window workspaces should have no visible gaps or use smart gaps.
  • Gaps are small in normal multi-window layouts.
  • Dialogs float.
  • Dialogs are centered.
  • Layout state is per workspace when the compositor supports it.
  • There is a command to jump directly to the columns layout and one to jump directly to the tabbed/fullscreen layout.

Nice behavior:

  • Gaps can be toggled.
  • Fullscreen can be toggled.
  • Smart borders can be toggled.
  • Layout-related modifiers remain available for experiments.
  • Inactive windows are slightly dimmed when supported.

Overview and Discovery

Required behavior:

  • There is an expose-style way to inspect open windows or workspaces before jumping.
  • There is a rofi-style window picker.
  • Window picker entries show icons.
  • Window picker entries show titles.
  • Window picker entries show workspace labels.
  • Go-to-window focuses the selected window wherever it currently lives.
  • Bring-window moves a selected non-visible window to the current workspace and focuses it.
  • Replace-window swaps the focused window with a selected window where feasible.

Important behavior:

  • Overview supports both "go" and "bring" workflows when possible.
  • Window switchers hide scratchpad windows unless the user is explicitly using a scratchpad picker.
  • Window switchers hide minimized windows unless the user is explicitly using a minimized picker.
  • Window switchers hide internal windows.
  • Go/bring actions unminimize selected windows when needed.

Scratchpads

Required behavior:

  • A named scratchpad exists for element.
  • A named scratchpad exists for gmail.
  • A named scratchpad exists for htop.
  • A named scratchpad exists for messages.
  • A named scratchpad exists for slack.
  • A named scratchpad exists for spotify.
  • A named scratchpad exists for transmission.
  • A named scratchpad exists for volume.
  • Scratchpads appear near-fullscreen and centered by default.
  • Toggling a scratchpad deactivates fullscreen/tabbed state first.
  • Scratchpads are hidden from normal workspace and window listings.

Important behavior:

  • A dropdown terminal scratchpad exists.
  • Scratchpad matching handles delayed class/title assignment.
  • Scratchpad behavior is robust when the app is already running.
  • Scratchpad behavior is robust when the app is minimized.
  • Scratchpad behavior is robust when the app is on another workspace.

Minimization

Required behavior:

  • Focused window can be minimized.
  • Last minimized window can be restored to the current workspace and focused.
  • Minimized windows are excluded from normal layout.
  • Minimized windows are excluded from ordinary go/bring lists.

Important behavior:

  • A minimized picker mode exists.
  • Restore-all-minimized exists.
  • Other classes in the current workspace can be minimized.
  • Windows of the focused class can be restored.
  • All minimized windows can be restored.

Class-Aware Workflows

Important behavior:

  • Gather all windows of the focused class onto the current workspace.
  • Raise-or-spawn exists for the browser.
  • Window menus show class.
  • Window menus show title.
  • Window menus show workspace.
  • Window menus show icon.

Taffybar Contract

Required behavior:

  • Taffybar can list normal workspaces.
  • Taffybar can identify the active workspace per monitor.
  • Taffybar can list windows per workspace.
  • Taffybar can expose class hints for each listed window.
  • Taffybar can expose title for each listed window.
  • Taffybar can expose active state for each listed window.
  • Taffybar can expose minimized state when available.
  • Taffybar can expose urgency when available.
  • Taffybar can expose approximate window position when available.
  • Scratchpad workspaces are marked as special or filtered out.
  • Minimized workspaces are marked as special or filtered out.
  • Internal workspaces are marked as special or filtered out.

Important behavior:

  • Workspace labels are stable.
  • Workspace icons are stable.
  • Window positioning information is available enough for workspace icon strips and future expose-like views.
  • Layout information is available enough for workspace icon strips and future expose-like views.
  • Layout name is exposed if practical.
  • Layout state is exposed if practical.

Session and Utility Behavior

Important behavior:

  • Terminal is ghostty --gtk-single-instance=false.
  • Launcher is rofi -show drun -show-icons.
  • Run menu is rofi -show run.
  • Browser raise/spawn behavior exists.
  • Border width is effectively zero.
  • Taffybar can be toggled per monitor.
  • Session startup integrates with the normal graphical-session target.
  • Session startup integrates with any required session-specific user target.

Nice behavior:

  • Wallpaper behavior remains consistent.
  • Idle behavior remains consistent.
  • Lock behavior remains consistent.
  • Clipboard history behavior remains consistent.
  • Screenshot behavior remains consistent.
  • Monitor DDC/input switching remains consistent.
  • Rofi utility bindings remain consistent.
  • Media keys remain consistent.