awesome window manager

Created: 2022-09-30

What I didn’t understand about awesome at first is that without the Lua instructions (in rc.lua), awesome doesn’t do anything by default. Which explains why when I first started it with a new blank rc.lua file, I was treated to a blank X session with absolutely no keyboard shortcuts or visuals of any kind!

On Slackware, awesome can be installed via

http://slackbuilds.org/repository/15.0/desktop/awesome/

(I use sbopkg to download, install, and manage Slackbuilds.)

To launch awesome, you just need to copy the example .xinitrc:

$ cp /etc/X11/xinit/xinitrc.awesome ~/.xinitrc
$ startx

If you don’t have a custom one, awesome finds the default rc.lua. To customize it, copy the default and edit to taste:

$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
$ vim ~/.config/awesome/rc.lua

Customizing

I really dig the use of Lua to customize awesome. I’ve just started to get my feet wet.

By default, you can restart awesome (X continues to run and all of your applications are right where you left them) to test out configuration changes with either:

  • The little menu in the upper left > awesome > restart

  • Super+Ctrl+r (defined as "modkey" + "Control" + r)

There is also the REPL-style awesome-client for trying out Lua commands in the awesome environment. I highly recommend running it with rlwrap, which you can also get from Slackbuilds:

That’ll give you command history and editing via Readline:

$ rlwrap -a awesome-client
awesome# require("naughty").notify({title="Hi",text="Hello!"})

(That makes a tiny popup appear in the upper right corner!)

The -a option for rlwrap tells it to "always" use Readline, which will cease warnings about awesome-client asking for individual keypresses.

You can also just call awesome-client with a command and I suspect this intended to be used with scripts?

$ awesome-client 'require("naughty").notify({title="Hi",text="Hello!"})

Why awesome?

I’m a huge fan of the DWM tiling window manager. I’m still running that on most of my machines and I’m happy with it. But I’m running into certain situations such as my portrait-oriented monitors where it would be nice to have more flexibility without having to update the WM source and re-compile it! Especially since I now try to share "dotfiles" between machines as much as possible to give me a consistent development environment wherever I happen to log in.

awesome’s Lua-based configuration is very appealing.

I really like customizing development environments on different machines to make it really frictionless to work on specific projects. I think awesome is going to fit that need very well.