For a long time my window management strategy was just tolerating cmd+tab. With a few apps open it works fine, but once you have a dozen things running you are cycling through a strip of icons, overshooting, going back, trying to remember which space you left something on. The worst part is that it degrades exactly when you need it most, deep in something with a lot of things open.

I eventually got annoyed enough to make it my own.

Why any of this matters

The cost of cmd+tab was not the key press. It was scanning a changing list, overshooting the app, and trying again. Repeating that all day kept pulling my attention toward window management.

A fixed shortcut only helped after it became muscle memory. After a few weeks, wanting the browser and pressing option+b became the same thought. The destination never changes, so there is nothing to scan or remember.

Raycast

Raycast replaced spotlight for me. cmd+space still opens it so there was nothing to unlearn, and launching apps works the same way: type a couple of letters and you are there. Where it gets more interesting is everything else it can do. Honestly I am probably only using a small fraction of it, but even a couple of things have made a real difference.

Quick links are the main one. I have them set up for the places I go constantly: the Linear board for whatever I am working on, specific Notion pages, GitHub repos, internal dashboards at work. What used to be opening a browser, clicking through a bookmark, and navigating to the right page is now cmd+space and two letters. Small per use, but it adds up.

Clipboard history, unit conversions, quick calculations: anything that does not live in its own app lives in Raycast. Once you are used to staying in the keyboard, going back to the mouse for this stuff feels slow.

Aerospace

Aerospace is a tiling window manager for macOS. The part I actually care about is workspaces: the ability to assign every app a dedicated slot and jump to it with a single shortcut, so no app ever needs to be hunted for.

Every app gets its own named workspace tied to a letter that matches what it is. Browser is option+b. Terminal is option+t. Slack is option+s. Cursor is option+c. There is nothing to memorize. B is browser, t is terminal. When a new window opens Aerospace moves it to the right workspace automatically, so I never think about where anything is.

After a couple of weeks the shortcuts stop being something you think about. You want the browser, your hand goes to option+b. No scanning, no cycling, no overshooting. The annoying thing about cmd+tab is that it gets slower and less predictable the more you have open, because you are always picking from a changing list. Aerospace is the same speed whether you have three apps running or twelve, because the destination never changes.

Part of why switching feels instant is that Aerospace does not use macOS Spaces at all. Native spaces have an animation baked in that you cannot fully remove. Reduce motion makes it slightly faster but the slide is always there. Aerospace sidesteps this by running its own workspace system, moving inactive windows off-screen rather than using spaces. The switch has no animation to wait for.

The physical side matters more than I expected. I wrote about my split keyboard separately, but the relevant part is home row mods: option sits under my fingers on the home row instead of in the bottom left corner. That makes option+b a comfortable hold-and-tap rather than a reach. On a standard keyboard that corner reach would have made the shortcuts annoying enough to undermine the whole thing. I know because I tried it that way first.

The full workspace list:

ShortcutWorkspace
option+tTerminal
option+bBrowser
option+cCursor
option+sSlack
option+oObsidian
option+gGitHub Desktop
option+lLinear
option+nNotion
option+eMail
option+wCalendar
option+rReminders
option+aChatGPT
option+mMessages
option+fFinder
option+p1Password
option+zZoom

option+shift+letter moves the active window to a workspace rather than switching to it. If I am in the browser and want the terminal alongside it, option+shift+t sends it there. Same letter, same destination, just moving a window rather than going to one.

Putting things side by side comes up less than I expected. When switching is this fast, bouncing between the browser and the terminal does not really register as a context shift. It starts to feel more like glancing than switching.

Inside the terminal

Ghostty and tmux use the same shortcut logic inside the terminal: one modifier, one destination.

tmux windows work like browser tabs. ctrl+t opens a new window, ctrl+w closes a pane, and ctrl+1 through ctrl+9 jump to a window by number. I keep one window for whatever I am working on, one for running tests, one for logs. Getting between them is the same motion as switching tabs in a browser, which is why it felt familiar almost immediately.

Getting ctrl+number to work took some setup. Ghostty does not know about tmux natively, so the keybindings send escape sequences that tmux picks up. ctrl+1 in Ghostty sends a byte sequence that tmux reads as "switch to window 1." Once it is configured you never think about it again. It just works like number switching.

For panes, ctrl+shift+2 splits off a pane that takes up half the window, and ctrl+shift+3 splits off one that takes up a third. Each shortcut adds one pane at that size, so you can build up the layout you want without thinking about split directions.

Why this holds together

Raycast, Aerospace, tmux. None of them is doing anything complicated on its own. What makes them feel like one thing is that the shortcut logic is the same everywhere: one modifier, one destination. There is no point where you cross into a different tool and have to remember a different set of rules.

The first week I still thought about every shortcut. After that my hands knew where the browser, terminal, and editor lived. The number of open windows stopped affecting how long it took to reach one. That predictability is the part I was missing from cmd+tab.