Update: Development of chunkwm
has ceased in favor of yabai
. It'srecommended you now use yabai
for your macOS tiling needs.
0: Prelude
I speak for myself: The softwares and configurations I present here workgreat for my workflow but may not necessarily carry over to yours. I encourageyou to use this article as one perspective to pick-and-choose from in yourconfiguration development.
Main features of the software: 1. Split screen on Mac into multiple sizes and positions by 7 preset window locations 2. Draw the desired size and location for a window by grid 3. Use the keyboard shortcuts to quickly control your window positions 4. Support most apps and keep update all the time 5. Work on a great stability and performance. 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.). The nicest thing about a tiling manager is you can control nearly everything from the keyboard. It’s very quick and easy to set up side-by-side windows, and resizing one automatically resizes the other. It really helps on smaller screens, since by default everything takes full space on screen with minimal window decoration. As I switched back.
Learning curve: All the tools I mention here have a learning curve, themagnitude of which varies but is largely due to learning keybindings. I willsay that once one learns to work with vim
effectively, most otherkeyboard-based softwares are fairly easy to pick up, as many have similarsemantics to vim
. Tips from personal experience can be found insection 3.1.
- I would love to use a tiling window manager for OSX but in the end found Amethyst to be a little sluggish and, as mentioned elsewhere in this thread, buggy for full screen apps. I think ianyh has done an amazing job at working around a system that wasn't meant to be extended in this way, but that puts it at a dis-advantage right off the bat.
- Tiling window managers are an excellent way to reduce your use of the mouse and improve ergonomics of using the computer. But such a thing didn't exist on ma.
0.1: Motivation
I work on a 15' 2016 MBP. It's a really nice machine I was fortunate enough tobuy with scholarship money a couple years back, and does nicely pretty mucheverything one buys a Mac for.
As I've become more productive, I've increasingly turned to power tools likevim
, tmux
, and most recently,chunkwm
A tiling window manager for macOS.chunkwm
in particular has been a big jump for me in terms of productivity andworkspace aesthetic. This post discusses my macOS configuration, motivated by mysetup of chunkwm
.
My configuration files are available on GitHub atayazhafiz/hmcd.
0.2: Screens
1:chunkwm
and skhd
for tiling windows
First, a definition - tiling window managers organize windows incompartmentalized buffers on a desktop, and often support handling windows onmultiple desktops and monitors. I find this management useful for multitaskingbecause the wm will automatically attempt to place new windows in an optimalspot, with the user having to adjust window sizes and locations only ad-hoc. Aside effect of these managers is the orthogonal aesthetic they provide to one'sdesktop, though the value of that may vary by taste. I quite like it.
chunkwm
is a tiling wm for macOS. Onits own it's pretty nice, but its full potential comes out with a hotkey daemonlike skhd
, which maps keystrokes toarbitrary system actions. skhd
can be used for mapping hotkeys tochunkc
the program that sends messages to chunkwm
commands, enabling window management via just the keyboard.
chunkwm
provides a configuration file for setting window gaps, border offsets,border colors, and other aesthetic features; skhd
has a configuration file forhotkeybindingsThe nice thing about skhd
is keybindings can act on more than just chunkc
- for instance, I have bindings for opening a terminal and web browser..I've made public my personal.chunkwmrc
and.skhdrc
.
2:alacritty
as a terminal and tmux
as its multiplexer
Golf swing video analysis software free mac. Right now I use alacritty
as my terminalemulatorFor a while I used hyper
, but people are right about the Electron bloat. I've heard good things about kitty
, but haven't had the chance to use it..It's great -- fast as hell, not a battery leech, and has nice configurationoptions with extensible keybindings (you can see my configurationhere).Especially with a transparent background and color palettes generated bywal
, it's easily the most beautifulapplication on my machine.
Why tmux
? It may seem ridiculous to nestterminal sessions within windows within a window manager, but I use tmux
tohave just one terminal window open and manage various sessions inside it. tmux
sessions persist independently of the emulator they are run in, so you can enterand exit them anytime you want.
tmux
allows for aesthetic and keybinding configurations via a .tmux.conf
. Ofcourse, I've made minepublicly avaliable.
3: Power tools: vim
and ranger
For a while, I thought vim
was a needlessly cumbersome tool, as I'm sure mostdo initially. Once I began to seriously use it though, I realized my enhancementin productivity, and now I use vim
for pretty mucheverythingMore accurately, I use neovim
..Working with only a keyboard certainly imposed a learning curve, but has paidoff in a a tremendous speedup for literally everything I do on my machine. Infact, the productivity benefits vim
has provided me are the primary reason Iswitched to a key-bound tiling wm and and now do 90% of my work in a terminalemulator.
On a similar note, the ranger
filemanagerprovides vim
-like key bindings for browsing file systems. This is a boon forproductivity -- at least over Finder
, in my experience.
If you're looking for a beautiful, extensible text editor to replace your IDEsand speedup your workflow, I cannot recommend vim
enoughemacs
is also really nice, if that's more your thing. Regardless, the advantage of keybindings is undeniable -- there's a reason VS Code
and Atom
have command palettes..And once you get hooked on that, check out ranger
. And if you're trying to getreally deep, maybe you even want a command-line email client likemutt
. There's an entire world out there for you todiscover .
3.1:vim
's Learning Curve
vim
's learning curve kinda sucks if you haven't worked much with key-boundapplications before. Getting over that hill is a personal journey, but I havetwo tips from personal experience:
vimtutor
is your best friend. Launch it up in your command line and gothrough all of it; the tutorial isn't very long and will teach you everythingyou need to be functional invim
.Actually use
vim
. Make it the exclusive workspace for your next fewprojects, homework assignments, papers, whatever else. Create unibeast usb from dmg. At first it mightreally suck and you might want to switch back editors, but soon it'll clickand you'll begin to experience why it's raved about so much. Non-toy usage ofvim
will also teach you all the tricksvimtutor
doesn't and force you toconfigure the editor to your liking.
Speaking of configuration,here's my .vimrc
. Likethe other configurations I've made public, you should use it only to pick andchoose what you need - my preferences and plugins probably don't exactly alignwith your needs, and it's useful to know what the commands you're includingactually mean.
00: Postlude
I hope this article has provided you with an additional perspective on macOSconfiguration options. If you choose to incorporate any of the tools I'vediscussed in your own workflow, that's awesome! Though of course, myconfiguration is by no means is the 'right' way to setup a workspace -- hell,this one constantly evolves as my needs and preferences change.
If you find my configurations useful, have comments about this discussion, haveanother perspective you'd like share, or anything else related, [please pingme](mailto:[email protected]?subject=Re: Your macOS workspace with a tilingwm). I'd love to chat.
The Mythical Engineer
Are you tired of dragging windows around and resizing them everytime you open or close an app in your workspace?
For the past several years I have tried numerous window management softwares like Moom, Spectacle and Rectangle.
I was using Rectangle since last year and was quite happy with the ability to move windows around quickly with keyboard shortcuts. I used to work on a multiple monitor setup, so it was easy to manage multiple windows and partitions on big screens.
I was working on Linux for a while and bumped on i3wm, which is a tiling window manager. The nicest thing about a tiling manager is you can control nearly everything from the keyboard.
It’s very quick and easy to set up side-by-side windows, and resizing one automatically resizes the other. It really helps on smaller screens, since by default everything takes full space on screen with minimal window decoration.
As I switched back to my 13” Macbook again, I felt the lack of efficient window management on macOS. I started searching for a solution and found this open source project Yabai.
I use most of my IDE and terminal in full screen now due to the shortage of screen size. Whenever I open an app, it splits the previously active and new window in half and after closing it, the active window restores to full screen in a snap. That saves me few extra clicks of resizing the windows again and again.
This has improved my workflow and increased my productivity a lot.
You can follow the steps below to quickly get it running on your system.
Step 1: Disable System Integrity Protection
- Turn off your device
- Hold down
command⌘
R
while booting your device. - In the menu bar, choose Utilities, then Terminal
- Reboot your system
- Verify that System Integrity Protection is turned off by running
csrutil status
, which returns System Integrity Protection status: unknown / disabled
- You can use this while SIP is enabled, but you’ll lose some cool features.
Step 2: Install Homebrew
Homebrew is a package manager for macOS. Similar to pacman
on arch or aptitude
on ubuntu
Open Terminal and run
Step 3: Install Yabai
Start yabai
service Golf it free mac.
You will get a prompt to allow yabai
accessibility permissions. You can navigate to Security & Privacy, then Privacy, then Accessibility.
Now install the scripting addition.
Restart Dock.app to load the scripting addition
Step 3: Configure Yabai
Create a configuration file and make it executable
There are multiple options for configuration you can put in yabairc
file.Important configuration for tiling is binary space partitioning layout (bsp)
I also like to keep the auto balance on. In this configuration, windows always occupy the same space, independent of how deeply nested they are in the window tree.
Make sure to restart the service to see the changes
Here is a small demo of the working setup.
Let me know your experience after using this window manager 🤟.