I’ve recently been using – with much happiness –
yabai. Yabai is a tiling window manager
for macOS, similar to i3 for Linux. Yabai itself doesn’t handle any of the
keyboard shortcuts or make any assumptions about how you use it. Instead, you
run it as a service (I’m running it via
brew services start yabai) and it
exposes an API that you can use other tools to control. The most popular and
recommended way of controlling yabai is via
skhd by the same author:
github.com/koekeishiya. skhd is a dead-simple tool that lets you remap your keys
however you want. I’m running it via
brew services start skhd.
Notes on Yabai
I don’t have SIP (System Integrity Protection) disabled. Disabling SIP let’s yabai do more stuff like control macOS spaces. I don’t use spaces and I didn’t feel the need to have any of the other features that require disabling SIP.
If you disable SIP, you have the option to enable a border around the window that has focus in yabai. It makes it easier to see which app you’re focused on when you’re flipping through with your keyboard shortcuts. If you don’t have SIP disabled, there’s a nifty little tool (again by koekeishiya) called limelight that’ll do the same thing. I guess limelight is actually old code that used to be in yabai? Weird that old code wouldn’t require disabling security protections and new code would, but whatever. The border color and thickness and all that are configurable. I don’t really want a border around my windows so I don’t use this.
Notes On My Configs
I have some app-specific configurations at the top of my .yabairc. For example:
yabai -m rule --add app="^Slack$" display=2 manage=off
This tells yabai I don’t want Slack to be resized and snapped into place, and that I want it to be opened on the second screen (my laptop’s screen).
Toggling whether a window is floated or not is highly recommended. Some times
you just want to move a window around without it being snapped into position by
yabai. For instance, if a dialog window or something pops up I don’t want that
taking up 25% of my screen. I’ll press
shift + alt - f to make it float.