After kicking around a few different desktop environments and window managers, I've settled in with i3 as my window manager of choice - and no desktop environment at all. This is by far the most productive user interface I've used and is now in residence on my home laptop, work laptop, work desktop, and shiny new Intel-based Chromebook (as well as it's predecessor - an ARM-based Chromebook). I'm still using the Debian distribution of Linux (mostly Wheezy, but also one Jessie/Testing), which has been fantastic - and I can't recommend it enough.



You can read my previous blog for the few weeks that I used a BlueTile-derived xmonad configuration on top of the xfce desktop environment. While this worked pretty well most of the time, and was fairly productive, xmonad is a pain as it requires writing haskell code to change the configuration. A found this to be a bit burdensome over time - when I just want to tweak a setting I'd much rather just tweak the setting, and not have to debug code.

i3 is just about as flexible as xmonad, but everything is in a regular configuration file, so it doesn't require users to write their own window manager in haskell to get the configuration you want.

It's easy to plug-in different implementations in i3 for cases where the configuration isn't sufficient - for example I found the default i3 status bar to be a bit limiting for the configuration I wanted, so I handle that via conky, outputting in JSON (i.e. not using conky's X integration at all) to i3. System notifications come via dunst. dmenu is used as a launcher. Everything plays nicely together, and configuration is a snap.

Not running a regular desktop environment has not in any way been an issue. I can still use any application (for example, see "gnome-screenshot" used in the screenshot above, although more recently I've switched to "scrot"). I don't use graphical file managers as a general rule, and while I could probably install nautilus or thunar, I've found rox-filer works just as well and doesn't require many dependencies. Debian already includes the necessary wiring such that installing i3-wm sets up a lightdm session.

Suspend, shutdown, reboot, logout is handled via simple keybindings in i3 or from a terminal - I have no problem typing "sudo shutdown -h now", and I can type it just as fast as navigating to some menu.

I found that I was comfortable and productive in i3 within just a few days - you definitely have to make a commitment to learn keybindings and modes, and understand the container model, but once you do it's amazing how quickly you can navigate applications, workspaces, and desktops without ever having to take your hands off the keyboard. Learning how to effectively use workspaces for your workflow is super important - i3 allows several different layouts and each workspace can have it's own. Switching between layouts is a snap, and I find myself switching, for example, from a tiling layout to a tabbed layout to get a larger window. i3 remembers layouts, so switching back to tiling puts everything back how it was before. Very nice.

Anyone who's ever seen my desktop knows that I like to have a lot of terminal windows open, very specifically placed. In a traditional window manager doing this is painful - either I open a bunch of terminals, and manually move them around and resize them (I absolutely hate doing this), or write a script that starts all the terminals with the right geometry (also a painful operation, working out the geometry of each window). With i3, and a tiling layout, you never worry about window geometry or location - which is awesome. If I want 4 equally sized terminals on a workspace (with a horizontal tiling default layout), I use the following keystrokes - Super-Enter, Super-Enter, Super-v, Super-Enter, Super-Left, Super-v, Super-Enter. Once you learn the keybindings and container model, this sort of sequence becomes second nature and takes just a few seconds.

This configuration is really great and runs fast, with low resource usage - very important when running on a Chromebook (my install only requires around 2GB of disk) and gives more resources to things such as Java VMs when running on my fat work desktop.

I've decided not to dump my configuration in this post - code in blogger doesn't work all that well (see my previous post) and the configuration gets stale when I don't bother to update it (also see my previous post, which does not reflect my final configuration). Although it won't help with the latter, you can find my configs, at least some version of it, on github.

The i3 website is here - http://i3wm.org/