Thoughts on my current window manager

History

I started on Linux with Gnome way back in the day (2002ish?). GNOME circa 2002 Quickly moved to a lighter window manager as the desktop I had to mess around with Linux was pretty low spec. So openbox/ fluxbox (these also worked on Windows which was nice to be able to have the same window manager on both my computers) and eventually settling on XFCE. Since I've almost always had low resolution computers (I've been on 1366x768 for 12 years now for my laptop and only moved to a 4k monitor on my desktop a few years ago), efficient use of vertical pixels has always been important to me. For instance, removing title bars whenever possible, Tree Style Tabs for Firefox, and hiding the taskbar by default.

XFCE was a workhorse for many years, and then when I discovered tiling window managers I combined xmonad with XFCE for a 'dock'. This was a great setup because it allowed easy mouse usage (also people could use my computer :P) but all the elegance and optimization that a tiling window manager provides. To this day I haven't found/ reimplemented my absolutely favorite aesthetic for a window manager which I used for xmonad: xmonad circle layout It allowed a centered window being larger than all others but with smaller versions of your other windows in the background. It lets you really easily know what else you have on that workspace but also lets you maximize the screen real estate. It reminds me of the menu from Secret of Mana. secret of mana menu There's something so cool about interacting with circles on a square screen.

Moved on from there to awesome which is really lightweight and customizable without having to write Haskell. Anytime you changed configuration on awesome you needed to recompile the binary which was overhead that I found cumbersome enough to look for alternatives.

Some of the others I tried were dwm, ion, ratpoision (named because you don't have to use your mouse), stumpwm, and wmii I used for a year or so. But i3 was a total game changer. Now to be fair, I'm sure if I sat down and really forced myself to use any of the others I could've found a setup that really worked for me, but the existing community for i3, ease of incorporating python and bash into scripts and tools and incredible sane defaults made i3 an easy switch.

i3 is amazing and mostly “just worked”. I felt like there was maybe a few hours I needed to spend every year or so to iron out bugs that I'd been putting off figuring out and updating scripts which had been obsoleted by the community in favor of new tools. But since most of the addons were just bash and python, it was surprisingly stable.

I used i3 from maybe 2011 until 2018. After years of being a professional sysadmin I found that my workflow wasn't as varied as it used to be and I was a bit tired of maintaining my scripts and window manager and it wasn't as fun as it was in my earlier years. So I threw it all away to give Wayland a try and moved back to Gnome! It was great to just have an out of the box window manager with (mostly sane) default tools.

I hadn't really tried switching away from default terminals. I used xfce-terminal for the majority of my time with a quick affair with st. It turned out that all I really needed was quick support for changing font size (this is really useful for reading huge blocks of text or when giving a presentation), I use Inconsolata and the latency reduction from st wasn't something I could notice at all.

Gnome worked great, there is primitive tiling support and generally works fine if you don't want to do anything complicated. And I usually just want a maximized window or side by side so it worked great. Hiding the task and menu bars was a bit of a pain but worth the trade off for some really nice addons which you could browse and install from the extensions site.

Sway

Since I decided to take some time off work I found I had energy to start playing with my computer again! Sway came out some years ago but the last time I looked at it, there was a lot of missing functionality and none of the “just working”-ness that I wanted. It was designed to be a reimplementation of i3 for Wayland. I was hoping I could dig up my backups and just port in my old configs but honestly didn't think I would be able to. To my surprise all my old configs came straight back in (even screen brightness and audio control, which blew my mind having to configure that manually for the past 20 years). There was a surprising amount of muscle memory I retained for doing things I didn't consciously try to do. It was very funny to want to close a window and press buttons and then wonder why nothing was happening. Remapping the close window and open menu are the only 2 things I had to do.

It's been a very pleasant experience moving back to a “power user” window manager. I particularly like that i3/Sway aren't that opinionated since it they don’t do much. I'm back to my workflow with everything fullscreen, terminals on workspace 1, web browsers on 2, communication (Signal, Matrix, Discord, SMS, IRC, please god help, no Slack!) on 3, music/ podcasts on 4, PDFs on 5, emacs on 6 (this will probably be my next post) and miscellanea on the others.

I'm very happy to be back in a space where my window manager works with me and I feel like after all these years I finally have good enough vocabulary and the skills to allow me to fully customize my tooling. Check out this tweet about a tool I wrote to take screenshots and run OCR on them. Here's a video of me switching between windows and launching emacs. (easter egg: I've got a script to set the year in the top right as the animal in the zodiac)

Caveats

There have only been a few hangups. I play go on the KGS server and the Java client (lol what year is it!?) needs floating window support that required me to hunt down this command line argument to pass to the jar: _JAVA_AWT_WM_NONREPARENTING=1 java -jar ~/programs/bin/kgs.jar

I use Nix as my package manager on Debian Testing for newer versions of packages so I don't have to mess around with system dependencies. By default the launcher in Sway wasn't picking up my custom path so I needed to add my custom Nix and ~/programs/bin path to wofi.