Why this?

I mentioned on the front page that I've been a GNU/Linux user for some time. During that time I've played about a lot with desktop environments. Always looking for ways to improve my workflow and also have a desktop that is pleasing to the eye. To many the idea of "theming" their desktop is nothing more than changing the wallpaper or the colour of the panel along the bottom, but with free software you can go so much deeper than that. Swap out individual programs or config tools, change the desktop environment or window manager entirely and as far as most are concerned it's like you have a completely different computer. I've got a small collection of screenshots from more than a decade ago of all the various set-ups I tried. As I'm sure you can imagine, I was never 100% happy and even if I thought I was then sooner or later that would change, much like habitual distro-hopping.

Desktop paradigms

Although you may not have given it much thought, most desktop environments are built around the use of a mouse. There are things that you have to click on to make things happen. Opening or closing programs, copying or deleting files and folders, or moving and resizing windows... these are all things that we habitually use a mouse for but this workflow is something that we tend not to question.
Here's a question that I have considered for more time than it's ever worth and is based upon a pet peeve of mine that I just can't shake: If you are running only one program, such as a browser or word processor, not multi-tasking or reading/copying text but just using the one program, why would you ever want the window to be any way other than full-screen? The only time that your full attention would move away from that one full-screen app would be to do something else.
bad desktop Why do this?! When I see this I just see a lot of wasted screen real estate. You might as well read it on your phone! It's not just the size of the window either. Look at the shape of the screen. You have an abundance of horizontal space but a shortage of vertical space. So why does the only permanent feature (the bar along the top) use up this valuable vertical space? The same goes for the dock, but at least you could auto-hide that if you have the sense... Don't interpret this as a criticism of how people use computers. People work this way because the computer allows them to. If the default behaviour of the environment were to change then so would the way that people learn to use it. On top of my silly opinions there is the issue of stress. Having all of these distracting colourful icons in your peripheral vision, changing when notifications come in and flashing or jumping around, can really add a low level of stress when you're trying to concentrate on something. The computer stops working as your tool and starts becoming a constant distraction.
Now, what if you're using more than one window? Could you fill me in about why you would ever want those windows to overlap? One would constantly be in the way of the other, meaning that you need to keep moving it aside to keep seeing both windows at the same time. Something that a lot of desktop modders would do is make the 'top' window slightly transparent, which at first might look quite cool... but really this is just a fancy-looking compromise to a stupid problem. What is the best solution? Tiling. This is the equal division of all available screen space. I'm not going to sit here and rant on about the various reasons you'd want to use a tiling window manager, but here's a couple more screenshots to see how one might be used. Users of an iPad, recent versions of MacOS or even Windows 10 might be smug in noting that you've finally caught up with this very basic desktop feature, but just like multiple desktops, this is yet another "ground-breaking feature" that Linux had more than twenty years before your proprietary software company sold it to you as their latest innovation. Plus on both Windows and MacOS, you still need to use the mouse to do everything. There's nothing inherently wrong with that, but it is inefficient and when most laptops still come with a sub-standard trackpad then I'd rather have the option to use it as little as possible.
tiling_example_0.png tiling_example_1.png tiling_example_2.pngFor full-size images right-click and open in a new tab/window.

What I've made

OK, so enough complaining... The purpose of this page is for me to present my solution. Thanks to Luke Smith, whose face is in a screenshot above, about a year ago I got into ricing the i3 window manager. I started off by trying out his LARBS environment that he was posting a bunch of videos about but soon after started changing things so much that I decided to start making it all again myself. Shortly after that time that Luke also began posting about dwm and using suckless tools. I decided to have a go at dwm, and writing my own status bar and that formed the basis of the desktop environment that I now spend all of my time in. I don't miss KDE, GNOME, XFCE or any part of them. Truth be told I have never liked GNOME 3 and KDE 4 was a mess too at first (the Linux desktop was pretty rough for about five years IMHO). In the last eighteen months I've found out about so many cool little tools that were always waiting there to be discovered that I don't want these bulky desktops and all their unnecessary components at all. My computer is basically idle all of the time and that means that it's always fast, usually cool, the battery lasts for three times as long and it's ready to work to full capacity if I need it too.

Considerations

In deciding to publish my build of dwm and accompanying scripts I had to consider what I actually had to offer. There's nothing original or complicated here but I thought about, wrote down and tested a few different ways of doing things before I came up with my rules for how I want to be able to use the environment. Some things were simple, for example for my keyboard shortcuts (for which I use sxhkd) I separated tools for config like pulsemixer, nmtui, and top so that you always access these similar tools via Alt+Shift+<key>. For more every-day programs like brave, neomutt or pcmanfm it's just Alt+<key>. Key-binds that relate to controlling desktop layouts, moving windows to other desktops (called tags in dwm), closing windows and launching dmenu are all done with the Super key (AKA Windows Key). This helps to keep things organised so that the binds are easy to remember.
I decided that in my work flow there are only four layouts that I have needed in many months. These are:
  • Tiling
  • Floating
  • Full-desktop
  • Full-screen
Let's first address floating as I very rarely use it, and I've just been bashing that workflow on the rest of this page. Despite the fact that I don't need this option, there are times when it's required for compatibility with programs like Zoom, that weren't intended for use in this environment (I still have to use that for work...), GIMP or when playing games. With the gaps patch included I would rather simulate floating windows with that than actually move them around myself. Tiling has been demonstrated in the screenshots above. Full-desktop is how we usually think of maximised windows - I save a fair amount of space as it is by not having title bars so even in this mode my screen wastes less space than normal desktops. I would use this mode if I am using multiple programs at once, but don't need to see them at the same time. Full-screen is then for watching videos and activating it removes the bar as well (the bar can be toggled with a key-bind anyway, but this is a nice multi-action toggle).
The only other thing worth a mention here is that, as dwm doesn't have a minimise function, I have set up tag 9 with a wastebasket icon. That way I can put things there that I'm not using but don't wish to shut. This, again, is useful with something like Zoom, which spawns multiple windows that you don't need when you're on a call. In order to quickly check everything that is open you can switch to tag 0, which essentially activates all tags.

Patches and extras

The patches that are currently installed in the build of dwm are:
  • fullgaps
  • fullscreen
  • fakefullscreen
  • swallow
You can read about each of those on this webpage. I have used a bunch of others before but at the moment I think these are the ones that are actually necessary.
Programs that need to be installed to have full functionality are:
  • sxhkd - keyboard shortcuts
  • picom - compositing manager
  • dunst - desktop notifications
  • clipmenu - clipboard
  • unclutter - hide the pointer when you don't need it 😉
  • feh - desktop background
Other programs I use include:
  • sxiv - picture viewer
  • pcmanfm - graphical file manager, usually for when I'm sharing my screen during online lessons
  • zathura - my favourite pdf reader
  • arandr - screen resolution / monitor switching
There are some other scripts included on the github and a couple that I've used of Luke Smith's, but I think this is a good overview of how I do things... This page is getting long! Be aware that the scripts for checking volume, network status and power level / plug state all relate to my laptop, but it is easy to adjust them for others because of the way that /sys is organised.

Where to get it from

You can get my build of dwm, sxhkd config and extra scripts from my github page at https://github.com/clearnitesky/rich_dwm_environment. Further updates to the environment are shared in the README file on github.

Installation

I use Manjaro, so it has only been tested on that but there is no reason to expect things not to work on other distributions. Colour icons on the bar and in st are currently not possible on Debian or Ubuntu but they are replaced with monotone icons. You will need to make sure that you have some xorg dev libraries installed, but if you encounter errors then those errors tell you which packages are missing.
Instructions:
  • Clone the repo: $ git clone https://github.com/clearnitesky/rich_dwm_environment
  • $ cd rich_dwm_environment
  • $ sudo make clean install
  • Link or copy the bin folder and sxhkd config file
You will need to add the bin folder to your path, which is best done in your .profile config or .bashrc
For comments or questions please get in touch (contact details above).
light_theme.pngHere's a screenshot of the latest version with optional light theme.