You wouldn’t believe how often somebody says to me, “you should check out a tiling window manager, I think you’d really enjoy it”.
I get it, I’m that guy. I still favor the command-line for everything, I use vim and GNU/Screen. I clickety clack on a mechanical keyboard. Hell, I even run Arch Linux, s oobviously I’m supposed to be calling out noobs on some subreddit while singing the praises of the “TWM Master Race”:
Thing is though, not only was I rockin’ a TWM before most but I’ve
simplified perfected my workflow in such a way that a tiling window manager
just comes across as overkill to me.
That’s not to say that I dislike tiling window managers, it’s just that I work in GNOME in a very specific and “TWM-inspired” way.
And I didn’t even have to learn a new language to do it!
Looking at you Xmonad. Nobody should have to learn Haskell just to set up a fucking status bar.
So now that I’ve drawn a line in the sand with my personal preference, let’s talk about how I GNOME and what I stole from tiling windows managers to achieve what I consider peak productivity.
As mentioned, I spend most of my time in a terminal typically in a GNU/Screen session and running vim for any and all text editing (coding, blogging, et cetera).
GNU/Screen is a terminal multiplexer allowing me to achieve most of what I would use a tiling window manager for, splitting up my terminal. I actually prefer using GNU/Screen or even tmux as I can run it out on a server and achieve the same TWM results without needing to ssh out to the same server multiple times.
Also, vim, my editor de choix, can handle multiple buffers and splits and gives me an additional layer of “tiling” capabilities. Same as with using a terminal multiplexer, I can ssh out to a server and have the same experience.
In addition to my daily drivers, most modern apps feature some sort of internal tiling capability making the need for a tiling window manager even less important to me.
That setup alone gets me about 90% of the way to where I want to be, but the windows themselves would be all willy nilly unless I did something to arrange them.
Out of the box, GNOME has window snapping. Drag your window to the left or right side to snap to full height and 50% width. Drag up top to maximize the window.
Wait, drag a window with your mouse? You are a goddamned fool, Mr. Sherman.
Hold up, I didn’t say that’s how I work. GNOME also comes with some very simple
hotkeys for these actions.
SUPER+→ to snap to full height and
SUPER+↑ to full screen or maximize and
SUPER+↓ to restore the
window to it’s previous size.
Generally speaking, once I snap my windows where I want them, they don’t get moved. Depending on the screen size or how many screens I have available, I will either 50/50 my apps or just go with full screen.
Regardless of screen size, my screen is completely filled at all times.
With a screen full of apps and tiling/splitting capabilities in most of my apps, the only thing really missing my being able to switch apps.
Tiling window managers use a workspace paradigm where you can hotkey between
workspaces and then use additional hotkeys to cycle through the tiles on the
workspace. It’s pretty similar to
ALT+TABing through windows and I consider
that to be somewhat inefficient.
You could get some efficiency back by only running a window app on each workspace, but wouldn’t that somehow defeat the purpose of using a powerful tiling window manager?
I don’t even use workspaces in GNOME and even go out of my way to turn off GNOME’s dynamic workspaces and set my static workspace count to 1.
The way I look at it, the apps themselves are the workspaces. On a smaller screen I usually full screen everything and on larger display scenarios, I have nearly everything laid out in front of me so I really just want to be able to switch between apps as fast as possible.
Similar to how you switch workspaces with a TWM, I switch apps by using
# is the placement of the app on my dock.
For reference, I only pin 5 apps to my dock:
This method of launching and switching apps was one of my favorite features of Canonical’s Unity Desktop Environment. In the past I had hacked in this functionality into OS X and with GNOME all you need is this extension.
For launching other apps, I just GNOME’s built-in launcher by pressing
and typing in the name of my app. I have
SUPER mapped to the right-hand
SUPER key, otherwise I’d probably never touch that key.
The only shortcoming I’ve found is that there are a few apps that I regularly run (Files in particular) and I should probably consider pinning it or moving to a command-line app like GNU Midnight Commander.
At this point, the only thing really left is aesthetic. Tiling window managers don’t do much in regard to decorating windows, just a simple border (used to highlight which window is active), no controls and for those that are into it, some padding between windows.
Personally, I don’t see the need in having padded gutters between windows as it eats up screen real estate without serving much purpose.
The lack of title bar and controls though, that’s something I prefer as I also consider those things fairly worthless. They take up space and usually I just use hotkeys to close an app.
GNOME shows which app is active in your top bar so titles on each window tends to be redundant as well.
Out of the box, GNOME doesn’t have an option to disable window decorations and most of the extensions I had tried either didn’t work or were flakey at best.
Previously I wrote about how you can remote the title bars in GNOME
Shell and since added a
gtk.css to my dotfiles.
The method still seems to work as of GNOME 3.28 and hopefully will continue to work in the recently released 3.30. If it does stop working, expect to see an update to my dotfiles as I have zero interest in going back to having all of that cruft on my windows.
With that, some of the GNOME core apps (Files, Tweaks, et cetera) cannot have the window controls removed as they are “client-side decorations” and are significantly more tightly coupled with the app and eat up a bit less real estate as they provide additional functionality.
The same client-side decorations would show up if you ran the app under a tiling window manager, so it’s not like TWMs have a leg up in this regard.
Even though I typically use the keyboard to move my windows around, occasionally
I do drag a window around with a mouse. The lack of a title bar makes there’s
nothing to click and drag but fortunately GNOME has you covered by allowing you
SUPER and then click anywhere in a window and you can drag it.
A bit more in the aesthetics department, I also disable animations, drop the Activities button and hot corner and remove the rounded corners at the top of the screen. Mostly trivial changes, but the disabling of animations definitely makes GNOME snappier (like a TWM).
So that’s why I don’t use a tiling window manager. I’ve been able to bend GNOME to my will with hardly any effort.
Sure I give up the flexibility of being able to split the screen so many times it looks like a fractal, but I don’t really work that way anyway, so who cares?
Will I give a tiling window manager a go in the future?
Probably so as I do like to re-evaluate my tools regularly. Sooner than later if a future version of GNOME does actually bork my ability to remove window decorations or makes some other change that threatens my productivity!