Last year I developed a configuration for the CTWM window manager for Linux. It wasn’t anything remarkable, just an attempt at recreating the Linux Mint ethos in something that’s a lot older and far more retro, and I still use it to this day. It’s a retro, distraction free working environment. It’s not pretty, but it works.

After my experiment with mixing MATE and i3, which has become a nice working environment when working from home and writing the PREVIEWS catalog, I felt like revisiting my CTWM config. There’s nothing wrong with it, but I wanted to make a sidebar panel, which I thought would be useful and a better way of working with the multiple workspaces.
One thing I like about CTWM is that in the Workspace Manager you can drag windows from one workspace to another. Like i3, you can set applications to open on specific workspaces; the browser on, say, Workspace 2, the remote desktop on Workspace 5. But while recreating Cinnamon workspace expo view was cool, it also wasn’t especially useful; by hiding it out of view until I called it up, the utility of multiple workspaces was lost.
I decided to start fresh. I had a hard drive sitting in a drawer, so I installed it in my tower, and then I installed Debian 12. While I wasn’t intending to use it, I installed MATE, not so much for the desktop environment but for some applications (like terminal, file manager, and text editor) I would need anyway.
I installed CTWM and lxappearance — the latter for the window manager, the former so I could set themes and icons — and set to work.

Let’s be frank. CTWM, designed as it was in the early 1990s, is not attractive out of the box. It’s not even useful; the default config links to no programs on its menu. I have to build menus by hand for everything I need.
I started with the menus. My first inclination was to code the equivalent of MATE’s classic Applications-Places-System triple menu. This was interesting, but it put me several layers away from anything from the menus, and I would eventually put the submenus in the root menu.
For the sidebar panel, I knew I wanted, top to bottom, the Icon Manager (essentially, a list of open windows), the Workspace Manager (a visual map of the workspaces and applications), and, at the bottom, a clock.
With my Mint CTWM config, I draw my bottom panel with the clever use of the xlogo application. I do the same here. I would do the same here, and I decided to draw the X logo separately. Why not?
Then I decided to add xeyes into the panel. Xeyes is useful; sometimes I lose the cursor on the screen, and having two eyes looking at it is a big help.
With my Mint config, I load xlogo and xclock from a bash script. I wanted to use an xsession file here. Same principle, just a little cleaner. And it took trial and error to figure out the right way to load things and how they would interact with the Workspace and Icon managers within CTWM.

Developing these two things — the menu and the sidebar — are the reason I decided to start “fresh.” I could work on each individually from a stripped down config. Then, once I had them how I wanted them to look and they worked the way I expected them to work, I could swap out the equivalent sections of my cleaned-up, better structures Mint CTWM config.
I also coded some new keyboard shortcuts to match i3’s keyboard shortcuts. Not all of them — pretty much anything that controls windows is useless — but things like closing windows, opening a terminal, switching workplaces, moving an application to a workplace, refreshing the screen, and exiting the session. I can even call the CTWM root menu from the keyboard with the Windows-D key combo.
Content with how this turned out, I then changed the colors up to make it look less default and match the GTK theme I was using (Sweet Ambar Blue).

I then coded a new menu that would let me manually tile windows in the way i3 does automatically, dividing the screen into quarters and halves. (The menu code is in the top right quadrant of the screenshot below, and if you know how to read a wmctrl command you will immediately notice that I have “Right” and “Left” reversed. I did not notice until the morning.)

Last night and this morning, I made a few more changes. I decided to scrap the color scheme I had and implement the Catppuccin color scheme instead. (I backed up the files I had, in case I want to return to them.) I used GIMP to create Motif-style control buttons that used the Catppuccin colors. I also added two more “tiling” commands, to take the full left or right of the screen. (I’m not going to do a full horizontal split. I’ll never use it.)

I also set up a remote desktop to work. I also took it one step further, which I’ve not done on any of my other Linux installs, set up bash aliases so I can connect and disconnect to the VPN from the terminal command line as well as launch the remote desktop. This isn’t high-tech voodoo; I had bash scripts that do both (toggle the VPN and launch the remote desktop), so rather than launch them from a desktop file on a menu (which, for example, is how Cinnamon works) and rather than type out the tedious path to the scripts, the alias does the work for me and runs the scripts. “Work smart, not hard,” as Scrooge McDuck always says.
The result is something that mixes the “industrial brutalism” of CTWM with the gentle and dark pastels of Catppuccin.

I think I’ll keep it. 🙂