How To Setup And Use The Yabai Tiling Window Manager On Mac
You can find my current yabai config and the rest of my dotfiles here: dotfiles
Configure MacOs Specific Settings
- Open Several Desktops (~7) on Your Machine
- Go To Keyboard Settings > Shortcuts > Mission Control
- Expand Mission Control and Turn On Shortcuts for Switching Spaces 1-7 with “Ctrl + # Of Space”
- Go to System Settings > Accessibility > Display
- Turn On Reduce Motion
- Go To System Settings > Desktop & Dock > Mission Control
- Turn off “Automatically Rearrange Spaces Based On Most Recent Use”
- Personally, I only keep “Displays Have Separate Spaces” turned on here, and that’s what I’d recommend
Open a terminal window
Open a terminal window on your mac. Could be the default terminal or something else like iTerm2 which is what I’m currently using.
Install Homebrew
Run the following command:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
If necessary, when prompted, enter your password here and press enter. If you haven’t installed the XCode Command Line Tools, when prompted, press enter and homebrew will install this as well.
Add To Path (Only Apple Silicon Macbooks)
After installing, add it to the path. This step shouldn’t be necessary on Intel macs.
Run the following two commands to do so:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Install Yabai
Run the following command:
brew install koekeishiya/formulae/yabai
Install Skhd
Run the following command:
brew install koekeishiya/formulae/skhd
Create Yabai Config File in Home Directory
Move to home folder:
cd ~
Create directory for yabai config file and move into it (config will live in “.config/yabai/yabairc”):
mkdir .config/yabai
cd .config/yabai
Create yabai config file:
touch yabairc
Add Configuration Options to File
Open with preferred editor and add the following (“open -t yabairc”, “code yabairc” (visual studio code), “vim yabairc”, etc…). There are some configuration options that will be available only if you partially disable SIP (Sytem Integrity Protection). All of the options I’ve configured below will work without disabling SIP.
Configure default layout to use: Binary Space Partitioning.
# default layout (can be bsp, stack or float)
yabai -m config layout bsp
Configure how window splits should be made:
# New window spawns to the right if vertical split, or bottom if horizontal split
yabai -m config window_placement second_child
Configure window padding:
# padding set to 12px
yabai -m config top_padding 12
yabai -m config bottom_padding 12
yabai -m config left_padding 12
yabai -m config right_padding 12
yabai -m config window_gap 12
Configure mouse settings:
# center mouse on window with focus
yabai -m config mouse_follows_focus on
# modifier for clicking and dragging with mouse
yabai -m config mouse_modifier alt
# set modifier + left-click drag to move window
yabai -m config mouse_action1 move
# set modifier + right-click drag to resize window
yabai -m config mouse_action2 resize
# when window is dropped in center of another window, swap them (on edges it will split it)
yabai -m mouse_drop_action swap
Disable specific apps from being managed with yabai. Use this format for the apps you’d like to disable.
yabai -m rule --add app="^System Settings$" manage=off
yabai -m rule --add app="^Calculator$" manage=off
yabai -m rule --add app="^Karabiner-Elements$" manage=off
Start Yabai
Start it like so:
yabai --start-service
Allow any prompts for accessibility permissions.
Restart yabai:
yabai --restart-service
Start Skhd
Start it like so:
skhd --start-service
Allow any prompts for accessibility permissions.
Restart skhd:
skhd --restart-service
Create Skhd Config File in Home Directory
Move to home folder:
cd ~
Create directory for skhd config file and move into it (config will live in “.config/skhd/skhdrc”):
mkdir .config/skhd
cd .config/skhd
Create skhd config file:
touch skhdrc
Add Keyboard Shortcuts To Config File
These shortcuts are completely up to you, but you can use mine as reference. The way I like to do it is to choose two primary modifiers and a third if necessary. These could be something like “alt”, “shift + alt”, and “ctrl + alt”.
One recommendation is to change “shift + alt” to “hyper” if you have a “hyper” key on your keyboard (“command” + “control” + “shift” + “alt”). You could configure a “hyper” key (replacing “Caps Lock” for example) with something like “Karabiner-Elements”.
Changing Focus Shortcuts
Change Focus Within Space
# change window focus within space
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - h : yabai -m window --focus west
alt - l : yabai -m window --focus east
Change Focus Between Displays
#change focus between external displays (left and right)
alt - s: yabai -m display --focus west
alt - g: yabai -m display --focus east
Shortcuts For Modifying The Layout
# rotate layout clockwise
shift + alt - r : yabai -m space --rotate 270
# flip along y-axis
shift + alt - y : yabai -m space --mirror y-axis
# flip along x-axis
shift + alt - x : yabai -m space --mirror x-axis
# toggle window float
shift + alt - t : yabai -m window --toggle float --grid 4:4:1:1:2:2
Modifying Window Size Shortcuts
# maximize a window
shift + alt - m : yabai -m window --toggle zoom-fullscreen
# balance out tree of windows (resize to occupy same area)
shift + alt - e : yabai -m space --balance
Shortcuts For Moving Windows Around
Swap Windows Within Space
# swap windows
shift + alt - j : yabai -m window --swap south
shift + alt - k : yabai -m window --swap north
shift + alt - h : yabai -m window --swap west
shift + alt - l : yabai -m window --swap east
Move Window Within Space And Split
# move window and split
ctrl + alt - j : yabai -m window --warp south
ctrl + alt - k : yabai -m window --warp north
ctrl + alt - h : yabai -m window --warp west
ctrl + alt - l : yabai -m window --warp east
Move Window Across Displays
# move window to display left and right
shift + alt - s : yabai -m window --display west; yabai -m display --focus west;
shift + alt - g : yabai -m window --display east; yabai -m display --focus east;
Move Window To A Space (Desktop/Workspace)
#move window to prev and next space
shift + alt - p : yabai -m window --space prev;
shift + alt - n : yabai -m window --space next;
# move window to space #
shift + alt - 1 : yabai -m window --space 1;
shift + alt - 2 : yabai -m window --space 2;
shift + alt - 3 : yabai -m window --space 3;
shift + alt - 4 : yabai -m window --space 4;
shift + alt - 5 : yabai -m window --space 5;
shift + alt - 6 : yabai -m window --space 6;
shift + alt - 7 : yabai -m window --space 7;
Stop/Start/Restart Yabai
# stop/start/restart yabai
ctrl + alt - q : yabai --stop-service
ctrl + alt - s : yabai --start-service
ctrl + alt - r : yabai --restart-service
That’s It, You’re Done!
Learning More
If you’d like to explore everything you can do with yabai open the man page:
man yabai
--- or ---