Tiling Window Manager For Macos

- 3 mins

yabai for macOS

Few years ago, I posted about tiling window manager chunkwm, which is now deprecated and no longer maintained by koekeishiya. However, now we have a newer and greater window manager yabai, which I will be using from now onwards. Note that this is a macOS specific tiling window manager and I am installing this on macOS version 10.15.4.

For

Amethyst Tiling window manager for macOS along the lines of xmonad. A quick screencast of basic functionality can be found here. (It's rough, and I'd love to see a better one if someone has the skills and inclination to make one.). Mar 06, 2019 I can only speak to macOS, but window management in this case is actually built on something entirely distinct from the actual system window manager. It utilizes a framework designed for implementing accessibility driven features, but it just happens to provide mechanisms for moving and tracking windows as a part of that. Tiling.window manager. for macOS. I just want to share this awesome application i came across a couple of weeks ago. Being a linux user I like tiling window managers, and my i tried to keep my desktop as neat and tidy as possible using SizeUp and various other applications that allow you to snap windows to corners and sides with shortcuts.

1. Installing yabai

The official wiki page is a is a great place to start, as it provides you with a great overview of what you are getting into. Plus, the GitHub Wiki sidebar has just about everything you would need to get this up and running.

To enable all yabai features, we are required to disable macOS’s System Integrity Protection, the instructions is here. After that is done, you are ready to install the plugin as per instructions here.

2. Installing skhd

Now we need a hotkey/shortcut manager, which will be skhd in this case. The install information is available on the official repo.

3. Getting Started with Example Config Files

  • yabai and skhdexample config files
  • yabai config file used by koekeishiya here
  • skhd config file used by koekeishiya here

While the example config files provide a brief overview of what can be achieved. I found it more helpful to directly look at koekeishiya’s complete config. This is especially helpful if you are already used to the example bindings from chunkwm.

4. Customisation

Window

Your friends are here:

They are very well documented and easy to read. The approach I take is trial and error. Keep tweaking it until it fits your liking. Previously, I got quite used to the default bindings provided by chunkwm and skhd, so I ended up porting most of them over to yabai.

5. Status Bar

While various options presented below are available, I ended up going for the second one, which is almost identical to the Bitbar extension that I used to use with chunkwm except that this one is designed for yabai.

  • spacebar which was originally shipped with yabai, but is now an independnet project on its own
  • yabai/skhd helper a simple bitbar plugin that displays desktop ID and desktop mode of yabai.
  • yabai-spaces a bitbar plugin which provides support for yabai
  • nibar a simple Übersicht widget status bar with yabai support

6. Other Issues

Below section(s) document some of the issues I ran into while setting yabai and skhd.

6.1 Window Resizing Ignored

If you are using iTerm2 or some other terminal application, one difference that yabai differs from chunkwm is that it does not automatically resize the window after you zoom in or out with cmd + + or cmd + -. According to this GitHub issue, this is not currently handled by yabai. However, we can use the following workaround as described by marcelja in the issue.

Related Posts

Tiling window manager for macOS along the lines of xmonad.

A quick screencast of basic functionality can be found here. (It's rough, and I'd love to see a better one if someone has the skills and inclination to make one.)

Amethyst is available for direct download on the releases page or using homebrew cask.

Note: that Amethyst now is only supported on macOS 10.12+.

Amethyst must be given permissions to use the accessibility APIs under the Privacy tab of the Security & Privacy preferences pane as shown below.

Keyboard Shortcuts

Amethyst uses two modifier combinations.

Tiling Window Manager For Macos Update

Default ShortcutDescription
mod1option + shift
mod2ctrl + option + shift
Manager

And defines the following commands, mostly a mapping to xmonad key combinations.

Default ShortcutDescription
mod1 + spaceCycle layout forward
mod2 + spaceCycle layout backwards
mod1 + hShrink the main pane
mod1 + lExpand the main pane
mod1 + ,Increase main pane count
mod1 + .Decrease main pane count
mod1 + jMove focus counter clockwise
mod1 + kMove focus clockwise
mod1 + pMove focus to counter clockwise screen
mod1 + nMove focus to clockwise screen
mod2 + hSwap focused window to counter clockwise screen
mod2 + lSwap focused window to clockwise screen
mod2 + jSwap focused window counter clockwise
mod2 + kSwap focused window clockwise
mod1 + enterSwap focused window with main window
mod1 + zForce windows to be reevalulated
mod2 + leftThrow focused window to space left
mod2 + rightThrow focused window to space right
mod2 + 1Throw focused window to space 1
mod2 + 2Throw focused window to space 2
mod2 + 3Throw focused window to space 3
mod2 + 4Throw focused window to space 4
mod2 + 5Throw focused window to space 5
mod2 + 6Throw focused window to space 6
mod2 + 7Throw focused window to space 7
mod2 + 8Throw focused window to space 8
mod2 + 9Throw focused window to space 9
mod2 + 0Throw focused window to space 10
mod1 + wFocus Screen 1
mod2 + wThrow focused window to screen 1
mod1 + eFocus Screen 2
mod2 + eThrow focused window to screen 2
mod1 + rFocus Screen 3
mod2 + rThrow focused window to screen 3
mod1 + qFocus Screen 4
mod2 + qThrow focused window to screen 4
mod1 + tToggle float for focused window
mod1 + iDisplay current layout
mod2 + tToggle global tiling
mod1 + aSelect tall layout
noneSelect tall-right layout
mod1 + sSelect wide layout
noneSelect middle-wide layout
mod1 + dSelect fullscreen layout
mod1 + fSelect column layout
noneSelect row layout
noneSelect floating layout
noneSelect widescreen-tall layout
noneSelect bsp layout

Available Layouts

Window

Amethyst allows you to cycle among several different window layouts.Layouts can also be enabled/disabled to control whether they appear in the cycle sequence at all.

Tall

The default layout. This gives you one 'main pane' on the left, and one other pane on the right. By default, one window is placed in the main pane (extending the full height of the screen), and all remaining windows are placed in the other pane. If either pane has more than one window, that pane will be evenly split into rows, to show them all. You can use the keyboard shortcuts above to control which window(s), and how many, are in the main pane, as well as the horizontal size of the main pane vs. the other pane.

Tall-Right

Exactly the same as Tall, but the main pane is on the right, with the other pane on the left.

Wide

The rotated version of Tall, where the main pane is on the top (extending the full width of the screen), and the other pane is on the bottom. If either pane has more than one window, that pane will split into columns instead of rows.

3Column-Left

A three-column version of Tall, with one main pane on the left (extending the full height of the screen) and two other panes, one in the middle and one on the right. Like Tall, if any pane has more than one window, that pane will be split into rows. You can control how many windows are in the main pane as usual; other windows will be assigned as evenly as possible between the other two panes.

3Column-Middle

Exactly like 3Column-Left, but the main pane is in the middle, with the other panes on either side. (In previous versions of Amethyst, this layout was known as Middle-Wide.)

3Column-Right

Exactly like 3Column-Left, but the main pane is on the right, with the other panes in the middle and on the left.

Widescreen-Tall

This mode is like Tall, but if there are multiple windows in the main pane, the main pane splits into columns rather than rows. The other pane still splits windows into rows, like Tall. This layout gets its name because it probably makes the most sense on very wide screens, with a large main pane consisting of several columns, and all remaining windows stacked into the final column. Other layouts that work well on very wide screens include any that allow for more than two columns (to take advantage of the screen width), such as any of the 3Column-* layouts, or Column.

Fullscreen

In this layout, the currently focused window takes up the entire screen, and the other windows are not visible at all. You can rotate between each of the windows using the 'focus the next window' shortcut, as usual.

Column

This layout has one column per window, with each window extending the full height of the screen. The farthest-left window is considered the 'main' window in the sense that you can change its size with the 'shrink/expand the main pane' shortcuts; the other windows split the remaining space evenly.

Row

The rotated version of Column, where each window takes up an entire row, extending the full width of the screen.

Floating

This mode makes all windows 'floating', allowing you to move and resize them as if Amethyst were temporarily deactivated. Unlike the other modes, this will mean that windows can be placed 'on top of' each other, obscuring your view of some windows.

Binary Space Partitioning (BSP)

Tiling window manager for macos update

This layout does not have a main pane in the way that other layouts do. When adding windows, any given pane can be split evenly into two panes along whatever axis is longer. This is recursive such that pane A can be split in the middle into pane A on the left and pane B on the right; pane B can then be split into pane B on top and pane C on bottom; pane C can then be split into pane C on the left and pane D on the right; and so on.

If you'd like to contribute please branch off of the development branch and open pull requests against it rather than master. Otherwise just try to stick to the general style of the code. There is a setup script to guide you through the process of installing necessary tools and getting dependencies built. To get started run

Standard Window Manager

If you have questions or feedback your best options are to tweet or to get on gitter.

Tiling Window Manager For Macos X

Amethyst is free and always will be. That said, a couple of people have expressed their desire to donate money in appreciation. Given the current political climate I would recommend donating to one of these organizations instead:

Best Tiling Window Manager Macos

And a bunch of technology-oriented ones:

Comments are closed.