Awesome Window Manager: Part 1

Like most "Linux tinkerers" who like to customize their OS, I've spent a bunch of time over the last few weeks looking on in awe at all the highly customized, yet minimal "Tiling window manager" environments submitted over at r/unixporn. I wanted to get in on the action. So, after some deliberation and a bit of reading up on what a window manager would offer me, I decided to take the plunge and give one a try.

The Familiar Desktop Experience

Prior to using a window manager, I was a long time user of the Xfce desktop which comes with Manjaro Xfce. It's a great desktop for general use and has all the features you'd expect from a traditional desktop environment. It operates similar to the many other desktop environments for Linux; you can set a wallpaper, launch apps from a handy launcher menu or dock. You have a status bar on the top (or bottom), displaying a clock, network, power down widget and a choice of other applets you may wish to add to the panel.

When you launch apps, they appear as floating windows on your desktop, with, close, minimize, maximize buttons and a frame surrounding the app window. It's pretty, everything is where you expect it to be, and it's a comfortable and familiar environment for new users to Linux.

Almost everyone who has used a computer is familiar with this kind of desktop environment. You launch an app, then manually move, resize, minimize, maximize and close windows using widgets. You can snap windows to the edges of screens or manually resize them to fit them together in a grid on your screen. Nothing out of the ordinary... In fact, it's very ordinary, and that's fine for most users.

Why Floating Window Managers Suck!

A window manager is exactly what it says on the tin - it manages your windows. There are, "floating", "manual tiling" and "dynamic tiling" window managers to name just a few.

Regarding floating window managers, you may not realize it, but have you ever thought about how much time you waste, minimizing, maximizing, resizing and moving all those app windows around all day? Do you constantly have to move windows around because one window is overlapping another? It may not seem like much, but there's an argument to be made, that over a long period of time, all those little repetitive actions may make you less productive and could break your concentration and focus.

As a regular desktop user, I was constantly finding myself opening terminals, messaging apps, text editors, web browsers, you name it... and manually moving and scaling those windows around my screens to where I wanted them. Even with window snapping and virtual workspaces, which most modern Linux desktops environments offer, this micromanagement of app windows was starting to feel like a game of "Tetris" for me.

Tiling window managers on the other hand are different — you don't have to worry about how your windows are handled, as the window manager chooses the position and size for you. When you open an app, it's automatically maximized to the size of your screen. Open another app and the window manager will divide your workspace in two, so you can see both apps at once, equally spaced on the screen.

Rather than using window widgets to open, close, move, minimize and maximize windows — you use hot keys together with "tabs" to quickly manage them. On most window managers, you have various options of tiled and grid layouts. You can switch window layouts on-the-fly, and have each layout specific to each tab. It may sound complicated, but in practice, everything feels a lot snappier and is easier to handle.

Who Is A Tiling Window Manager For?

Not For The Average Joe

There is a lot of work involved in customizing a window manager. More often than not, you'll be expected to:

  • get your hands dirty editing configuration files to get everything working,
  • configure hotkeys for actions,
  • spend time Googling solutions to little problems that pop up,
  • add code for features you need,
  • write Bash scripts to get similar functionality to what you have now,
  • learn a new programming language.

I can understand how this would be off-putting to some, and they may feel like this is all just a waste of time and takes way too much effort to set this up. From that point of view, would I recommend that the average pc user switch to using a tiling window manager? In short — hell no! I wouldn't expect "Joe public" or a new user to Linux to just drop what they use now and struggle with this. If you're comfortable using your regular desktop and happy with that - stick with it.

The Tinkerers Desktop

Conversely, for developers, content creators or tinkerers, you're no doubt aware that having more than one app open at any one time introduces the problem of you having to manage all those windows while keeping your workflow "on point". This is where a window manager can help you greatly.

You can:

  • customize almost everything about how your window manager works,
  • open and close apps with a simple hotkey rather than having to move your mouse into menus or over widgets and icons,
  • quickly move or navigate to windows on adjacent tags or screens,
  • set custom tiling window layouts, "Floating", "Grid", "Stacked", "Split vertical/horizontal", "Dwindle", "Fibonacci",
  • set your configuration to be as complex or minimal as you desire,
  • use custom colours, fonts, and set how everything looks and feels,
  • export your window managers configuration files to other Linux distributions and have everything looking and working the way you set things up.

Goodbye Window Borders!

Not having to manually move windows allows you to concentrate on your work. When you can open and close apps using custom hotkeys, having widgets for move, close, maximize, minimize on your windows doesn't make much sense. By disabling these in your window manager settings, you can reclaim valuable "screen real estate". You probably paid good money for that nice big pc monitor you are using, so by using a window manager and disabling these, you can have more pixels available for your web browser or code editor. Anyone who has used the "Gnome Desktop" can probably relate to how much space those big ugly window borders can use.

Learn Something New

I think that installing and learning to configure a tiling window manager to fit your needs is a great way to learn more about how your operating system works, learn new programming languages and truly make your desktop your own. If you're happy using the terminal, editing code, and want a working environment that fits your needs and makes you more productive, a window manager may be just what you've been looking for.

Switching To "Awesome" Window Manager

The window manager I switched to is a "dynamic tiling window manager" named, "Awesome WM".

"awesome is a highly configurable, next generation framework window manager for X."

After becoming comfortable with the "Lua" language syntax which the window manager uses, I started to modify the configuration file to fit my needs. This opened up a whole new world of customization which my regular desktop environment didn't offer. I can choose exactly how my windows are presented on my screen. I can bind hot keys to actions which feel comfortable for me, and quickly navigate around my workspace.

The image below shows my efforts so far.

As you can see from my desktop image above, it's differs drastically from the default Awesome configuration. It only took a day or two to become familiar with the hot keys I set for custom actions. Launching, closing and navigating apps to get work done is so much faster for me now, and I think it looks cool too.

Config Name
Window Manager : Awesome WM
Theme: powerarrow-dark (modified)
Font: "Ubuntu Bold, 10"
Compositor: picom-jonaburg-git
Shell: Zsh
Shell Theme: powerlevel10k, pywal
Terminal: Kitty, Guake
Launcher: Rofi
Apps: sxhkd, bpytop, nvtop, ncmpcpp, cava, ranger, newsboat, calcurse, curseradio-improved, Edex-ui, exa, VSCodium, cxxmatrix
Wallpaper: feh
Wallpaper Themes: wallhaven.cc "neon"
Applets nm-applet, volctl

It's hard to explain just how happy I am after switching to a window manager for my workflow. I didn't realize before I started tinkering and customizing "Awesome", that it'd make it make me feel like I never want to go back to using a normal desktop environment ever again! It's been so much fun setting all this up and getting things to work the way I want. I've even learned a few things along the way, which is always great.

Coming in part two of this series, I'll go over installing "AwesomeWM", editing the config files, adding a "run launcher" and setting up a theme.