i3wm: an excellent and aesthetically pleasing window manager

i3wm Logo

It has been a while since I tried a new tiler. Lately, I have been having a  ‘good time’ building a vanilla i3wm desktop. In keeping with my preference of ‘less is more’  (the K.I.S.S. principle), I have made a serious attempt to use fewer, rather than more, add-ons. My preference is to use add-ons that are at once powerful, simple and not complex. Those add-ons I do use, I try to stretch to their fullest.

i3wm offers a very resource rich ecosphere. But too often available add-on tools seem to add complexity and bloat without actually accomplishing their ‘stated task objective(s)’.  Given that add-on applications tend to increase (software) bloat, I really wanted to see if I could build a nice, highly functional, pretty to my old eyes, environment that consumed about the same RAM as my dwm setup. (You will be excused if you think of this as technical elitism.)

Avoided i3wm add-ons

To begin with, I’ll list some popular i3wm add-ons I avoided. I will not discuss why I chose to avoid them, I simply did.

  • i3wm-gaps (I stuck with the vanilla variant, see below).
  • i3 blocks
  • i3status
  • j4tools
  • polybar (There is a note at the end of the post on how-to use Polybar, if you really want to.)
  • tint2
  • lemonbar/etc.
  • Additionally, I have avoided using almost everything listed on this page!

Spoiler Alert: I have discovered that  i3wm can readily be configured to run ‘like the wind’ in the same amount of RAM as dwm (from Suckless) while at the same time offering the advantage of being much easier to tweak.

Tools used to build my i3wm desktop

Here are the major components and add-ons I used (with a brief explanation as to why I elected to use them):

  • i3wm (vanilla)- I chose this i3wm variant in large part to test and discover if the base ‘model’ was as good as I hoped. I can say, it is. In fact, it is much better than I expected. There are, I believe, numerous reasons for this window manager’s excellence including:
    • i3 is well documented.
    • there is a large and active community of users, many of whom share what they have learned and developed.
    • i3wm is well architected, designed, implemented, and ‘managed’ by Michael Stapelberg and team.
    • Getting i3wm is quite easy on any arch or Debian distro; you can install it from your repos (or in some cases even obtain a community build of i3wm).
    • i3wm comes with an ‘out-of-the-box’ config file.  But to demonstrate a setup in use, I have provided the i3wm config file I use.
  • archlinux & manjaro  are the distros on which I have built my i3wm environments; because I am a fan. Arch (and its variants) is/are light, fast, and always current (too current for many). I chose two variants for my 2 laptops: Arch itself and manjaro (Arch’s  most popular variant).
  • conky (I run one conkybar and two plain ‘desktop’ conkies). If you are unfamiliar with conky, the developer defines it as follows:

    Conky is a free, light-weight system monitor for X, that displays any kind of information on your desktop. Conky is free software and runs in X on Linux and BSD. Originally a fork of Torsmo, Conky’s torsmo-based code is BSD licensed. New code in Conky has been licensed under the GPL 3.0.

    • Settings for invoking/ activating the conky are viewable in the i3wm config file (available above); detailed conkies and the conkybar are available in my i3wm conkies (the conky dotfiles).
  • rofi is used on most of my window managers as my primary menu and open window tracking tool.  To quote Mother Google:

    Rofi is a window switcher, run dialog, ssh-launcher and dmenu replacement that started as a clone of simpleswitcher, written by Sean Pringle and later expanded by Dave Davenport.

    You are able to view my rofi settings in the sxhkd dotfile below.

  • dunst is a lightweight notification daemon. It’s very customizable, is not dependent on any toolkits, and therefore fits very well into window manager setups. I use dunst on all of my desktop setups, window manager or desktop environment based. (dunstrc dotfile)
  • sxhkd– To quote the sxhkd manpage: “sxhkd is a simple X hotkey daemon with a powerful and compact configuration syntax. ”  I use this as a simple tool by which to manage and provide application keybindings. When invoked from any of my window managers (wm) this standardizes all my wm keybinds. (sxhkd dotfile)
  • nitrogen is the tool used to access and change wallpapers. I decided to stick with this low tech, simple but elegant tool because of the ways (manner) by which I prefer my wallpapers to change. I like to manually choose a wallpaper when I’m in an open/ unoccupied workspace; or when I first log in, I like to see a new, fresh scene. Nitrogen allows me to easily review and select a fresh wallpaper on an open workspace.
  • feh provides the facility to auto’magically’ load a fresh wallpaper on login. Settings for this function appear in the .xprofile dotfile provided elsewhere in this tutorial.
  • termite (terminal) is my current terminal of choice. My secondary choice is st (from suckless). I am migrating to termite though because it is more obviously (better?) supported on wayland. (termite-config)
  • i3lock-fancy & xautolock are used to manage my timed screen locking functions. i3lock provides a nice eye-candy approach to the locking screen; xautolock manages the timing and locking functions. Settings for these functions appear in the .xprofile dotfile provided elsewhere in this tutorial.
  • Nemo-Dropbox– I use this combination because the Nemo file manager is, to my mind, excellent. The Nemo-Dropbox variant also installs a full version of Dropbox painlessly on any arch derivative. FWIW: I use Dropbox extensively for my genealogy work and thus this combination File Manager with Dropbox is highly useful to me.
  • geany– is my preferred editor. There is nothing really difficult or fancy in getting this tool operational.
  • yad- (Yet Another Dialog)  I use yad to build small pop-ups for tool short-cuts, help and sundry tools. You can find write-ups of several of my yad tools elsewhere on the eirenicon site.
  • .xprofile contains all my window manager shared x settings. As with sxhkd, I use this file to make certain I have, as many as possible, identical settings across my window managers. You may access a copy of my xprofile dotfile here.
  • Color scheme- nord. I choose the Nord palette because it pleases me. You can see the results of that in all the screenshots.  You are certainly encouraged to select themes, palettes etc. that appeal to you.

Polybar

Should you wish to use polybar (I do not) here are some quick instructions on preparing the way.  Remember you need to have polybar installed on your machine.

Replace i3status bar: Once you have a Polybar setup, replace the existing i3status bar and prepare Polybar to launch on startup. Simply edit the i3 config file at $HOME/.config/i3/config and replace:

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
        status_command i3status
}

with

# Start polybar
exec_always --no-startup-id $HOME/.config/polybar/launch.sh

Next reload i3 via mod+shift+r and the i3status bar should disappear and the Polybar should appear (Polybar will display whatever Polybar config you have set up in the.config/polybar directory. Make certain that’s the one you like & want.)

Conclusion

I am, now, about three weeks into my serious use of i3wm. I can say that my experience(s) have been quite excellent. Clearly, i3wm is an excellent piece of software (engineering) not to mention an outstanding window manager.

I expect I will use i3wm daily for the immediate future.

As regular readers here know, the likelihood of me sticking with anything long term, though,  is not ‘strong’.  Along those lines, I can say I do have plans to try Sway (i3wm’s Wayland drop-in replacement) down the road.