Offensive Thinking

Internet Thoughtcrime

Subtle Window Manager

Posted: 2012-07-04

I’m a longterm XMonad user, and still love it. I even improved my (very weak) Haskell skills writing its configuration file.

But recently, I’ve decided to try another window manager, just for fun. This time, it’s subtle. No, that’s really the name of the WM, subtle. It’s written in C and extended via Ruby, so I know my around a little better on this one, being an avid Ruby coder. There’s two main reasons to deviate from XMonad:


I’ve used wmii in the past (until it got abandonded) and always liked the tagging concept for windows, so I could display them on more than one workspace and even create dynamic workspaces. It is possible to use tags in XMonad, too, I know, but I never came around to configure them, and they’re not part of the core functionality. Subtle uses tags, albeit in a “strict” mode, so you absolutely have to give a window a tag, because subtle will always map your window to a workspace (a “view” in subtle-speak) according to the tag, regardless of your current view. This takes a little time to get used to.

Manual Tiling

XMonad uses dynamic tiling, whereas subtle gives you full control of what you do with your windows by letting you decide where to place them (aka manual tiling). Both ways have their advantages and disadvantages: Not having to think about where to place your windows can be nice, but I wanted to try the approach of full control over how my windows are set up. Subtle’s gravities give you a very flexible way in specifying your own layouts. I also wanted to be able to have multiple windows in one place, either in a tabbed layout or the way subtle handles it, by just stacking them and giving you the possibility to raise and lower windows in the same gravity.

I’ve added my current subtle.rb config file to the dotfiles section, in case anyone wants to try subtle and needs a configuration file. I haven’t decided if I will stick with it for a longer time yet, but I’ll give it an honest try. Many of the concepts are very intriguing. And I can make it do what I want by using its very well documented Ruby API via subtlext, so there’s an incentive to really learn how subtle works.

If you decide to use my config file as a basis, you should also check out the subtle-contrib scripts. I’m especially fond of the launcher.rb script, as it allows you to dynamically add new views and tags on the fly while opening programs.