Let’s get this out first: I switched to Linux. Don’t worry, this post is not intended to convert you, it’s just what drives the story. What this post is really about is evaluating your toolchain constantly to make sure it’s working for you and not against you.
As developers, we use our computers for roughly 8 hours everyday. My goal in working is to move the most information from my brain to the computer as quickly and efficiently as possible. In doing that, I interact with a lot of tools such as email, text editors and a multitude of web services. When I work, I like to tile my windows. If I have a single app open, I want it to cover the entire screen. If I have two apps open, I want them tiled, side by side. I don’t want to have to do this manually. I want my screen to be covered by applications all the time. I don’t have a need for my desktop.
To solve this problem, for a while I’ve been using tiling apps on Mac. At one point I used Moom, most recently I’ve been using Slate. This has served me well enough but it also wasn’t an ideal solution. Using something like Slate or Moom is a bandaid. It doesn’t really get to the heart of what I wanted.
I won’t bother going into all the reasons that lead to my decision but suffice to say, I fell out of love with MacOS. I decided to switch to a Linux distro for my daily work. After some research and speaking with some amazing colleagues at thoughtbot, I stumbled upon i3.
i3 is a tiling window manager. That means that by default, windows will open up full screen. If you open a second window in the same desktop, it will open up and split the screen. A third window will split the screen further and so on. By making a change to using i3, the functionality that I had spent time building into my workflow on MacOS was now a first-class citizen.
Sure, tiling is great and all but an entire OS change just for easier window tiling? Not quite, i3 started to offer me even more options. On MacOS, I used Alfred for opening applications. That was easily replaced by dmenu. Even better though, I could now add my own global shortcuts to open applications. I use Chrome as my primary browser so to open it from anywhere, I press Win+c. To open my terminal, I use Ctrl+space. Actions that previously took opening Alfred and typing a few characters are now a hotkey away.
Here are a few more things that have also been made easier with my switch to i3:
- I now have a scratch pad terminal available from anywhere with a hotkey. This is really helpful for managing my dotfiles quickly
- My “desktops’ are all organized by the type of apps I want on them. The apps I use automatically open and move to those workspaces as soon as I login. For example, when I first login, Spotify, Slack, my notes app and my todo list app are all opened and moved to their appropriate workspaces.
- Having organized workspaces means that I can quickly change contexts with a hotkey. I don’t have to alt-tab through my windows hoping to find the correct window. I know that hitting Win+4 will take me to my chat or that Win+3 will take me to do my notes and todo list.
- I have what track is playing in Spotify, constantly showing in my menu bar. This was a simple shell script away. This isn’t really related to development but I’m always listening to music and if I have to tab to check what song is playing, I’m losing time and likely I’m losing my current thought process.
- Anything I want to show in my menu bar is a shell script so I know that if there is some information I want to display, it’s accessible.
I still use and love tmux. This is about tiling windows. When I’m in a terminal, I use tmux for almost everything but what happens if I also need to open a web browser and a pdf on the same screen as my terminal? Now I get similar benefits that tmux provides for all my windows.
I started off by saying this wasn’t a conversion post and I really mean it. i3 and Linux isn’t a move for everyone but you should consider the tools you’re using and if you can find a better one to do your job. Is your editor slowing you down? Would moving to a terminal multiplexer like tmux improve your work life? Should you be using a window manager like Slate on MacOS? Maybe you need a shortcut manager like apptivate. Spend 15 minutes each week to check your workflow for pain points, I bet there is something you can improve!