Skip to content

Instantly share code, notes, and snippets.

@tiagojsag
Last active April 2, 2024 05:43
Show Gist options
  • Save tiagojsag/8dd7d604deee6f525034a4c2991a8624 to your computer and use it in GitHub Desktop.
Save tiagojsag/8dd7d604deee6f525034a4c2991a8624 to your computer and use it in GitHub Desktop.
Yabai + skhd
# restart yabai
cmd + ctrl + shift - r : yabai --restart-service
# Launch terminal
cmd - return: bash ~/bin/itermLaunch.sh
# switch yabai between stack and bsp modes
ctrl + shift - space : yabai -m space --layout "$(yabai -m query --spaces --space | jq -r 'if .type == "bsp" then "stack" else "bsp" end')"
# toggle yabai split
ctrl + shift - e : yabai -m window --toggle split
# focus window in bsp mode
cmd + shift - right: yabai -m query --spaces --space \
| jq -re ".index" \
| xargs -I{} yabai -m query --windows --space {} \
| jq -sre 'add | map(select(."is-minimized"==false)) | sort_by(.display, .frame.y, .frame.x, .id) | . as $array | length as $array_length | index(map(select(."has-focus"==true))) as $has_index | if $has_index > 0 then nth($has_index - 1).id else nth($array_length - 1).id end' \
| xargs -I{} yabai -m window --focus {}
cmd + shift - left: yabai -m query --spaces --space \
| jq -re ".index" \
| xargs -I{} yabai -m query --windows --space {} \
| jq -sre 'add | map(select(."is-minimized"==false)) | sort_by(.display, .frame.y, .frame.x, .id) | . as $array | length as $array_length | index(map(select(."has-focus"==true))) as $has_index | if $array_length - 1 > $has_index then nth($has_index + 1).id else nth(0).id end' \
| xargs -I{} yabai -m window --focus {}
ctrl - up: yabai -m window --focus stack.prev 2> /dev/null || yabai -m window --focus north
ctrl - right: yabai -m window --focus east
ctrl - left: yabai -m window --focus west
ctrl - down: yabai -m window --focus stack.next 2> /dev/null || yabai -m window --focus south
# resize window
cmd + ctrl + shift - down: yabai -m window north --resize bottom:0:100 2> /dev/null || yabai -m window --resize bottom:0:100
cmd + ctrl + shift - up: yabai -m window south --resize top:0:-100 2> /dev/null || yabai -m window --resize top:0:-100
cmd + ctrl + shift - right: yabai -m window east --resize left:100:0 2> /dev/null || yabai -m window --resize left:100:0
cmd + ctrl + shift - left: yabai -m window west --resize right:-100:0 2> /dev/null || yabai -m window --resize right:-100:0
# stack window
#cmd + ctrl + alt - down: yabai -m window --stack south
#cmd + ctrl + alt - up: yabai -m window --stack north
#cmd + ctrl + alt - right: yabai -m window --stack east
#cmd + ctrl + alt - left: yabai -m window --stack west
cmd + ctrl + alt - down: yabai -m window --focus south && yabai -m window --stack recent && yabai -m window --focus recent
cmd + ctrl + alt - up: yabai -m window --focus north && yabai -m window --stack recent && yabai -m window --focus recent
cmd + ctrl + alt - right: yabai -m window --focus east && yabai -m window --stack recent && yabai -m window --focus recent
cmd + ctrl + alt - left: yabai -m window --focus west && yabai -m window --stack recent && yabai -m window --focus recent
# warp window
ctrl + shift - up: yabai -m window --warp north 2> /dev/null || if [ $(yabai -m query --windows --window | jq '."split-type"') == "horizontal" ]; then yabai -m window --toggle split; fi && yabai -m window --insert west && yabai -m window $window --toggle float && yabai -m window $window --toggle float
ctrl + shift - down: yabai -m window --warp south 2> /dev/null || if [ $(yabai -m query --windows --window | jq '."split-type"') == "horizontal" ]; then yabai -m window --toggle split; fi && yabai -m window --insert west && yabai -m window $window --toggle float && yabai -m window $window --toggle float
ctrl + shift - left: yabai -m window --warp west 2> /dev/null || if [ $(yabai -m query --windows --window | jq '."split-type"') == "vertical" ]; then yabai -m window --toggle split; fi && yabai -m window --insert west && yabai -m window $window --toggle float && yabai -m window $window --toggle float
ctrl + shift - right: yabai -m window --warp east 2> /dev/null || if [ $(yabai -m query --windows --window | jq '."split-type"') == "vertical" ]; then yabai -m window --toggle split; fi yabai -m window --insert east && yabai -m window $window --toggle float && yabai -m window $window --toggle float
# toggle fullscreen
cmd + ctrl + shift - f:yabai -m window --toggle zoom-parent
ctrl + shift - f:yabai -m window --toggle zoom-fullscreen
# toggle float
ctrl + shift - t: yabai -m window --toggle float
# toggle stackline icons
ctrl + shift - i: hs -c 'stackline.config:toggle("appearance.showIcons")'
# move windows to spaces
ctrl + shift - 1 : yabai -m window --space 1
ctrl + shift - 2 : yabai -m window --space 2
ctrl + shift - 3 : yabai -m window --space 3
ctrl + shift - 4 : yabai -m window --space 4
ctrl + shift - 5 : yabai -m window --space 5
ctrl + shift - 6 : yabai -m window --space 6
ctrl + shift - 7 : yabai -m window --space 7
ctrl + shift - 8 : yabai -m window --space 8
ctrl + shift - 9 : yabai -m window --space 9
ctrl + shift - 0 : yabai -m window --space 10
# default layout (can be bsp, stack or float)
yabai -m config layout bsp
# New window spawns to the right if vertical split, or bottom if horizontal split
yabai -m config window_placement second_child
# center mouse on window with focus
yabai -m config focus_follows_mouse autoraise
yabai -m config mouse_follows_focus off
# 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
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
yabai -m rule --add app="^Keyboard Setup Assistant$" manage=off
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment