awesome is awesome!

RSS  •  Permalink  •  Created 07 Jul 2015  •  Written by Alberto Pettarin

EDIT 2017-01-05: I put my config file and theme on GitHub.

I rarely use the mouse, because my daily work mostly consists of writing code and using shells on my Debian-powered machines.

Therefore, it should not surprise you too much that my windows are managed by awesome, a keyboard-efficient window manager. From its Web page:

awesome is a highly configurable, next generation framework window manager for X. It is very fast, extensible and licensed under the GNU GPLv2 license.

It is primarily targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on theirs graphical environment.

As the abstract says, awesome is extremely light, powerful, and configurable. Moreover, it can easily integrate standard Freedesktop widgets and X monitoring tools like conky.

In my current setup, my (empty) desktop looks like this:

Blog Image 20150707-awesome1.png

A few highlights:

  1. upper left: the virtual desktop switcher, which shows my 8 desktops, with the indication of those containing windows and the current one;
  2. upper right: battery and wifi monitor, clock widget, layout icon (see below);
  3. center: several conky windows (time, date, CPU/network usage, calendars) drawn directly on the window background.

Neat, uh?

But wait, this is just the beginning of the awesomeness of awesome: open some windows and you will start feeling it.

One of the most outstanding features of awesome is the selection of windows layouts and the snappiness of flipping among them.

You might have multiple windows, and you might want to have one maximized above the others:

Blog Image 20150707-tiling1.png

Now, just hit Mod4 + Tab (Mod4 is the "Window" key on most keyboards) to switch among windows on the current desktop:

Blog Image 20150707-tiling2.png

If you prefer a tiling mode, hit Mod4 + Space and you will get desired tiling layout:

Blog Image 20150707-tiling3.png

There are several vertical- or horizontal- based ones; additionally, one can easily alter the relative size of each tile (Mod4 + l / Mod4 + h) or change the position of each window in the resulting tiling.

There is also a "center and above other windows" mode which is very useful when coding with two viewports:

Blog Image 20150707-tiling4.png

And, of course, you can have a window in fullscreen mode, squeezing all the available pixels out of your screen resolution:

Blog Image 20150707-tiling5.png

Finally, you can also float windows as in any other window manager, resizing and moving them around:

Blog Image 20150707-tiling6.png

but, once addicted to the efficiency of tiling, you will rarely find yourself using this layout!

I could go on forever praising awesome, but here I just want to mention a few more features.

Its concept of virtual desktop is a bit different than the one common to other window managers, where you just have N equally-behaved desktops. In fact, awesome has the notion of tag, that you can associate to different programs (technically speaking, window handlers), so that you can assign all the windows with a certain tag to one or more virtual desktops. For example, you can have an email tag, which will be shown, say, on the first desktop, and an shell tag, which will be shown on all desktops.

Since my brain has limited context space, I still prefer tagging my desktops from 1 to 8, but, you see!, this is just a special usage of tags! Specifically, I always put Thunderbird or mutt on desktop 1, the browser on desktop 2, both fullscreen, and use the remaining ones as working areas.

To navigate the virtual desktops, just hit Mod4 + 1 to go to screen 1 or Mod4 + www to go to screen tagged www (you can change this shortcut, of course). To move a window from the current window to desktop 1, all you need to do is hitting Mod4 + Shift + 1.

Finally, there is a great extension, called revelation, which allows you to have an "Expose"-like mosaic of all the windows open on all desktops:

Blog Image 20150707-revelation.png

If you hit one of the letters shown at the center of each preview, you will be taken to that window. Simple and efficient: sweet.

As mentioned before, awesome is extremely configurable, including:

  1. allow only certain layouts to each virtual desktop;
  2. have a different number of virtual desktops on different (physical) screens;
  3. map keyboard shortcuts to virtually anything, from changing the aspect of existing windows to launching programs;
  4. assign a specific, default window geometry (X, Y, W, H) to each program;
  5. apply different backgrounds/color schemes to different desktops;
  6. span your own programs at startup;
  7. filter/translate keystrokes;
  8. and a lot more.

Beyond flexibility and performance, awesome is well documented and there are tons of pre-made customizations that you can simply copy and paste in your ~/.config/awesome/rc.lua configuration file. I recommend reading:

  1. the official API
  2. the official FAQs
  3. since it is popular among ArchLinux users, their Wiki page

I really think that awesome helps me being more productive, even on small screen machines, like my 10" and 11.6" laptops. In particular, if you heavily use the keyboard on your daily duties, you should really give it a try. In case, it is available, pre-packaged, for almost all Linux distributions (sudo apt-get awesome awesome-extra for Debian).

As a spare time project for this summer, I would like to clean my rc.lua configuration and the niceandclean theme you see in the screenshots above, and post them to my GitHub account. Stay tuned!

EDIT 2017-01-05: I put my config file and theme on GitHub.