How I GNOME or Why I Don’t Use a Tiling Window Manager

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”:

Arch Linux Meme

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+← and SUPER+→ to snap to full height and
50% width, 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
SUPER+# where # is the placement of the app on my dock.

For reference, I only pin 5 apps to my dock:

  1. Terminal
  2. Chromium
  3. Slack
  4. YakYak
  5. Spotify

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 SUPER
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
to hold 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!

Josh Sherman - The Man, The Myth, The Avatar

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.


If you found this article helpful, please consider buying me a coffee.