Squash of 59 work commits (Sep 1–12):b0380baimage-tiles: the picture-wall engine as a library — tape atlases, a baker CLI, and the TileGrid widget83d8eacmpsheets: demo feature and the SheetDocs seamdaff390finance: demo feature — generated ledger, SQLite target-gated, import hidden13b4c48mpfiles: demo build — procedural fake filesystem, still-image thumbnails, chat feature58e1f72mpsheets: review fixes for the demo seam3203e32finance: review fixes — id remapping on persist, structural determinism tests, one cfg seam0537687mpfiles: distinct repo-owned pictures for the demo thumbnail poolfe920c8files: review fixes — demo scan exclusions, Zipf sizes, trash root guarded, depth bound, tests4144dc4files: the spy test filesystem implements the clock1940f3dfonts: leave apps/wm untouched — its font-set declaration waits for the aichat lane to landb0e34c2wm: the AI pane and its bus — the aichat child seated in the slot, F10, the os service with the typed opende937acroute: the web build is a one-to-one recompile — native UI, service seams behind it2f5a984files: the file browser on the AI bus — four read-only tools through a correlated, cancellable runner2b035ffroute: the navigation session keeps time on the platform clock — the std clock traps on wasm1b70899files: the space view is where a tab starts412b3c9files: the space view rescans through the virtual filesystem — the web has no other disk0105fa5files: the space view opens in 2.5D5d007e0files: an unset projection preference means 2.5D6857d86files: the projected treemap clips boxes at the near plane and keeps the camera above themd3cd233wm: one desk for every target — the host seam, the assistant seated in-process, the web profile, and the assistant up at boot6d47c3fwm: the omarchy themes moved to omacom/omarchy — the importer follows82def6bwm: every app under the desk — the chat keeps the keyboard through an automatic refocus, a pool that gives up, polite closes for browser, sheets and aichat6105b61sheets + files: the assistant reads and writes cells, makes folders, renames and trashes82ac768photos: the picture wall as an app — the SMBC archive on the tile engine, a module from its first line; fabric in the launcher190062eroute: the maps app exposes its tool table to the desktop assistant3768653image_tiles: the wall is box-packed — justified rows keep every picture's own shape and fill the width3691875wm: launcher icons — a photo for Photos, a shirt for Fabric, a globe for Route, a play badge for Video, a pulse for the task manager8625076aichat + photos + image_tiles: make me a picture and it lands on the wall; the wall filters as you type, tiles flying to their places1dcca41wm: a theme with no wallpapers fetches them on its ownff6cfecwm: minimise, maximise and close in the bar's top right on Windows and Linux62f38a5route: --hour=N pins the theme hour for harness grabs362ac59wm: the checkout is found from the working directory too, and a sibling binary is an .exe on Windows0fdfba7files: the web's makepad home is a fixed virtual path — std's temp_dir panics theredaf88e1route demo: the tiles come from the repacked world archive at its own never-cached path15c3b11ai-services: what the pubsub review found — modules get a subscription seam and a publish sink through both WM paths, lease end flushes unsubscribes to hosted services, the subscription cap counts closing rows, an endpoint's queue is dropped after Unregister, the prompt drops a subscription on finald852699route: no tile-source dropdown — makepad.nl is the tile source through the local range cache; a world.mkmap in the saved maps folder is the only override; the stale preference file is removed on startaa271c3map + route + geodata: the Terrain layer through the archive plane — TerrainSource (hosted .mkmap elevation shards fetched by range through the shared reader, a local MBTiles only as a dev override), the hillshade rendered on the pool's heavy lane with reused TerrainScratch buffers (web capped at 2048×1536 at DPR 1, native DPR-aware), one request in flight; the demo checkbox now renders terrain like nativedbc7838route: the maps-folder field and its save button are gone from the settings panel; the maps root is automatica53d9b6route: no clock-driven night theme — the theme is the user's toggle, remembered in cx.storage, default day (the hour rule fired on the web for the first time once wasm had a clock and darkened the map after 19:00)ca92ff9route: the open sea on the web — the ocean-low/ocean-high overlays are an always-on group in the shared hosted overlay table, read through the archive plane (makepad.nl, cached); native keeps the local ocean files only as a dev override; the native-only OCEAN_MBTILES path is gone4cd24c4route demo: the first location fix flies the map to the user at zoom 14, as native does; Amsterdam stays the default until a fix arrives2e869f8route: the ocean-high overlay comes from the re-sharded archive (58 shards of at most 16 MB, one small leaf directory each) instead of two shards whose directories decoded to 407 MiB 8021bb0 Add Clock and Weather with shared mobile tile views and persistent alarms 77b8309 Make application layouts and custom widgets follow desktop and mobile themes b357164 Add desktop and mobile compositor shells with OS switching and dock transitions 11dec2e Keep hosted app output readers off the shared task pool c4002c5 Round complete desktop surfaces and add Windows snap layouts a5f8dd8 Frame home photo tiles and clip the picture wall below app controls 678721d Give mobile app libraries real search focus and hosted keyboard input 4794cdf Keep window title fills opaque at the application surface join 2cc584e Match Windows 2000 and NeXTSTEP window chrome to original screenshots 4a876a8 Give Files navigation and storage tools a clearer hierarchy 7821c90 Keep prewarmed browsers in the active desktop appearance 5bfe694 Compact the Files toolbar and repair navigation and selection actions 44fef36 Preserve Photos subjects and zoom across host view and aspect changes ae20efc Draw larger macOS traffic lights with centered hover symbols 2bc4d89 wm: the WM is a library plus a desktop binary, Linux controls, hosted tick pacing d643eb4 apps: the in-process app wave — mail, notes, calendar, reminders, calculator; clock, weather, finance, photos and route as modules; civil time, read-only sqlite, Linux CEF 56c1dee wm: a timer beat missed while the child renders is serviced on its acknowledgement Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
7.6 KiB
wm keyboard shortcuts — how they work
wm is Omarchy's tiling window manager rebuilt in makepad, and it keeps
Omarchy's keymap (read from omarchy/default/hypr/bindings/*.lua). Omarchy
builds every shortcut from one modifier, SUPER — the Logo key: the
Windows key on a PC keyboard, ⌘ Cmd on a Mac — plus optional
Shift / Ctrl / Alt. wm accepts ⌘ as SUPER exactly like Linux, and also a
second spelling, Ctrl+Alt, for the few chords macOS keeps for itself
(⌘Tab, ⌘⇧3/4/5). If you still have Spotlight on ⌘Space, unbind it in System
Settings → Keyboard → Shortcuts, or use Ctrl+Alt+Space.
| Omarchy layer | Press on macOS | Fallback spelling |
|---|---|---|
| SUPER | ⌘ | Ctrl+Alt |
| SUPER+SHIFT | ⌘+Shift | Ctrl+Alt+Shift |
| SUPER+CTRL | ⌘+Ctrl | Ctrl+Alt+Cmd (legacy) |
| SUPER+ALT | ⌘+Alt (⌥ Option) | Ctrl+Alt+A, then key |
| SUPER+SHIFT+CTRL | ⌘+Shift+Ctrl | Ctrl+Alt+Shift+Cmd |
| SUPER+SHIFT+ALT | ⌘+Shift+Alt | — |
| ALT / ALT+SHIFT | Alt / Alt+Shift | (same on every OS) |
Quitting wm itself is ⌘⇧Q (the app menu) — plain ⌘Q closes the focused window, as in Omarchy. Press ⌘K at any time for the in-app cheat sheet; it prints the exact chords for the OS you are on.
In the Windows style, SUPER+Z opens Snap Layouts for the focused window. You can also hover its maximize button, or drag its title bar to the top center to choose a slot. Drag to a side for half the desktop, or a corner for a quarter; the preview shows where the window will land. SUPER+Left and SUPER+Right select a half. Dragging a snapped or maximized title bar restores the window's previous floating size under the pointer. Layouts follow the available desktop area, excluding the bars; wide layouts offer thirds and portrait layouts offer top/bottom halves.
Starting things
| Chord | Does |
|---|---|
| ⌘ Return | New terminal, opened in the focused terminal's directory |
| ⌘ Space | The Omarchy menu (Apps, Learn, Trigger, Style, Setup, … System) |
| ⌘⌥ Space | Apps menu straight away (the launcher) |
| ⌘ Esc | System menu (lock, suspend, logout, reboot, shutdown) |
| ⌘ K | Keybindings cheat sheet |
| ⌘⇧⌃ Space | Theme menu |
| ⌘⌃ Space | Next wallpaper |
| ⌘⇧ Space | Show / hide the top bar |
With the mouse: the Omarchy button at the far left of the bar opens the menu (right-click it for a new terminal); the focused window's title in the bar focuses it on left-click and closes it on middle- or right-click.
Inside a menu: type to filter, Enter or Right activates, Backspace or Left goes back a level (so does clicking the header), Esc clears the filter and then closes; hover selects, click activates, click outside closes.
Moving around the tiles
New windows split the focused tile (dwindle layout: the longer side splits).
| Chord | Does |
|---|---|
| ⌘ Arrows | Focus the window left / right / up / down |
| ⌘⇧ Arrows | Swap the window in that direction |
| Alt+Tab / Alt+Shift+Tab | Next / previous window |
| ⌘ J | Toggle the split direction of the focused pair |
| ⌘ W or Q | Close the window |
| Ctrl+Alt+Delete | Close all windows, back to workspace 1 |
| ⌘ L | Toggle the workspace layout (dwindle / scrolling) |
Mouse: ⌘ + left-drag moves a window (a tiled one swaps with the tile you drop it on), ⌘ + right-drag resizes it from the corner nearest your grab.
Sizing
| Chord | Does |
|---|---|
| ⌘ - / = | Move the nearest divider left / right by 100 px |
| ⌘⇧ - / = | …up / down by 100 px |
| ⌘⌥ - / = | …by 25 px |
| ⌘⇧⌥ - / = | …by 25 px vertically |
| ⌘⌃ - / = | …by 300 px |
| ⌘⇧⌃ - / = | …by 300 px vertically |
Window modes
| Chord | Does |
|---|---|
| ⌘ F | Full screen (the window covers the desk, bar hidden) |
| ⌘⌥ F | Full width (maximized inside the gaps, bar stays) |
| ⌘⌃ F | Tiled full screen (the app is told it is fullscreen, tile stays) |
| ⌘ T | Toggle floating / tiled |
| ⌘ O | Pop the window out: float it at 1300×900, center, pin on top on every workspace; again to tile it back |
| ⌘ P | Pseudo-tile: keep the app's own size centered inside its tile |
Workspaces and the scratchpad
| Chord | Does |
|---|---|
| ⌘ 1…0 | Go to workspace 1…10 |
| ⌘⇧ 1…0 | Move the window there and follow it |
| ⌘⇧⌥ 1…0 | Move it there silently (stay where you are) |
| ⌘ Tab / ⌘⇧ Tab | Next / previous workspace |
| ⌘⌃ Tab | The workspace you came from |
| ⌘ + mouse wheel | Scroll through workspaces |
| ⌘ S or ` | Show / hide the scratchpad (a drop-down console over the top half) |
| ⌘⌥ S, ⌘⇧ ` | Send the window to the scratchpad |
Groups (tabbed windows)
| Chord | Does |
|---|---|
| ⌘ G | Turn the window into a group (tabs) / dissolve it |
| ⌘⌥ Arrows | Move the window into the group next to it |
| ⌘⌥ G | Move the window out of its group |
| ⌘⌥ Tab / ⌘⇧⌥ Tab | Next / previous tab in the group |
| ⌘⌃ Left/Right | Same, Omarchy's other spelling |
| ⌘⌥ 1…5 | Jump to the nth tab |
When a chord does nothing
macOS swallowed it. Use the Ctrl+Alt spelling, or for the SUPER+ALT layer
press Ctrl+Alt+A, let go, then press the key. Everything above is
generated from apps/wm/src/binds.rs; the cheat sheet (⌘K) is always the
authoritative list.