--- 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.