---
title: I use 5 different window managers stacked on top of each other
date: 2022-12-03
tags: [linux, design, wayland]
description: I had to take a good look at my current X11 setup. I was surprised what I found.
---

I am still on X11 because I haven't yet found the right wayland setup for me.
In this process, I had to take a good look at my current X11 setup. I was
surprised what I found.

## My current setup

I usually have all windows maximized, so only a single window is visible at a
time. (I also only have a single screen.) If I want to move a window across the
screen I usually use shortcuts: `Alt-Left` and `Alt-Right` to restrict the
window to one half of the screen, `Alt-Down` to turn it into a decorated
floating window, or `Alt-Up` to maximize it again.

I use `Alt-Tab` to switch between windows. The windows are ordered in
last-recently-used order because I most often switch back and forth between a
few windows while ignoring the rest.

Still, sometimes there are too many windows to easily navigate them. For that
reason I have three virtual desktops: I usually work on the one in the center,
but can easily move windows to the other desktops using `Alt-Shift-Left` and
`Alt-Shift-Right`. `Alt-Ctrl-Left` and `Alt-Ctrl-Right` get me to those
desktops.

Usually at least a web browser and a terminal are running. The web browser has
tabs which I can navigate with `Ctrl-PageUp` and `Ctrl-PageDown`. I can open a
new tab using `Ctrl-t` and close it again with `Ctrl-w`. `Ctrl-Shift-t` opens
the last recently closed tab, which sometimes is useful.

The terminal also has tabs which can also be navigated with `Ctrl-PageUp` and
`Ctrl-PageDown`. A new tab is created using `Ctrl-Shift-t` and closed with
`Ctrl-d`.

Inside the terminal I use vim, which in turn also has tabs. These tabs can be
navigated using `Ctrl-Alt-PageUp` and `Ctrl-Alt-PageDown`. A new tab is created
using `:tabnew` and closed with `:wq`.

In summary:

          create          close     navigation
--------- --------------- --------- --------------------------
desktop   -               -         `Ctrl-Alt-Left|Right`
window    misc            `Alt-F4`  `Alt-Tab`
browser   `Ctrl-t`        `Ctrl-w`  `Ctrl-PageUp|PageDown`
terminal  `Ctrl-Shift-t`  `Ctrl-d`  `Ctrl-PageUp|PageDown`
vim       `:tabnew`       `:wq`     `Ctrl-Alt-PageUp|PageDown`

## How common is this?

I believe this is not too exotic. I pretty much stayed with the defaults and
the shortcuts like `Alt-Tab` or `Alt-F4` haven't really changed since I started
using computers.

Having multiple virtual desktops is a bit special. This didn't exist when I was
still using windows and when I started using linux with gnome 2 I believe it
defaulted to a 2x2 grid. I am pretty happy with my current 3x1 grid and would
like to keep it.

Another aspect that is a bit unusual is the fact that I maximize all windows by
default as well as the related shortcuts to position windows on the screen. The
shortcuts feel very intuitive and I would also like to keep those. The major
issue with maximize-by-default is that dialogs should actuall not be maximized,
and window managers often have a hard time telling them apart. I am sure most
people who use tiling window managers can relate.

## Consistency

What was shocking to me about this analysis was how inconsistent this all was.
Not just are there 5 different window managers, they all use different
shortcuts. For example, browser and terminal use the same keys for navigating
tabs, but slightly different ones for opening and closing. And the fact that
vim uses `Ctrl-Alt` as a modifier, which is otherwise related to desktop
operations, also feels out of place.

The purist in me wants to eleminate some of those levels. For example, instead
of using terminal tabs I could open several terminals. I could also eleminate
the virtual desktops. However, that would only work if navigation on the window
level worked really well.

I guess window managers like i3 put windows in a tree for exactly that reason.
You still get a hierarchy, but a much cleaner one: The shortcuts are the same
on every level, and you can just add another level when required. The downside
is that the shortcuts alone do not imply the level, so you have to explicitly
navigate the hierarchy.

But then all of my levels also have their custom bits and pieces. When I open a
new terminal tab, it opens in the same directory as the one I opened it from.
When I use autocompletion in vim, it completes words from all open tabs. In
the browser, I can re-open the last recently closed tab. By forcing all these
levels into a single window manager I would loose those small but important
features.

## Keyboard usability

One downside I definitely see in my current approach is that it requires a lot
of different keys. `PageUp` and `PageDown` are not easy to reach on many
keyboards. Fortunately, with both my private laptop and work laptop they are
easy to reach. Unfortunately, they are positioned in different places on those
two devices, so I constantly have to readjust. Also, the heavy use of modifier
keys makes it hard to use these shortcuts with a single hand, which might
become an accessibility concern.

## Why not use tiling?

Displaying two windows side by side works on a stacking window managers, but it
also has its flaws:

-   When I switch to a maximized window and then want to go back to the
    side-by-side view, I have to raise both windows.
-   It is not always clear which of the two windows has focus.
-   The approach is quite limited.

Tiling window managers could provide more flexibility here. For maximized and
floating windows, a tiling window manager would work exactly like a stacking
one, so the side-by-side case is really the only difference.

My biggest issue with tiling window managers is that they just come from a
different lineage. For example, an `Alt-Tab` in last-recently-used order is not
at all common there.

Tiling window managers might have benefits for my use case, but so far there
was no compelling reason to switch.

## Conclusion

I took a good look at my window management setup and found that is messy, but
sticks with defaults and works well.

Now the challange is to find a wayland compositor that can replicate that
system.
