Journey Towards the Perfect Desktop Environment

Many moons ago, I wrote about how discovered Archlinux. It’s nearly 6 years and Arch hasn’t let me down. Some people say that they use it at home but not on their main production system. Well I do. And even on my main production system it hasn’t let me down. I can’t remember when was the last time that Arch actually broke for me. It’s always been there. As a solid foundation on which to build my work environment. Its a solid distro and my faith in it keeps going stronger and stronger.

But Arch is not today’s topic. Today’s topic is my desktop environment. What I use to get things done.

Setting up a new work environment in linux is not a simple thing. Not if your requirements are non-standard. And my requirements are certainly not standard. From computers, I expect efficiency above all else. So, I’m happy to sacrifice some “user friendliness” in order to gain increased efficiency. I’ve learned that the general concepts of “user friendliness” are not as useful when creating a work efficient environment. If a computer system is only to be used by you, then it fulfills its purpose if it allows you to do your work without much hoopla. Anyways, my requirements are as below:

  1. An efficient window managerI think I need to elaborate what I mean “efficient window manager” as all window managers can claim to be efficient in different sense. And all of them would be correct. So, when I say “efficient window manager” I mean,
    1. It should let me focus on my work instead of tracking which window is where.
    2. Quickness
    3. Moving around windows should be as simple as few keystrokes
    4. Ability to show multiple windows at the same time, side by side
    5. Full screen mode
    6. Mouse should be supported but not required
    7. Lightweightedness is an added bonus if available but not a requirement as long as it is quick
  2. System trayAs many of the programs support docking to a system tray, it is pretty much a requirement of all modern desktop environments.
  3. Ability to launch programs with few keystrokes
  4. Modern conveniencesThe environment should afford me all the conveniences of a modern operating system. This refers to easy connecting to wifi hotspots, auto mount for portable storage media, Bluetooth connection etc. I shouldn’t have to fiddle with configuration files every time I need to use one of the above mentioned functions.
  5. Sane handling of multiple displays.

In my opinion, the above requirements are not something extra ordinary and most of the standard desktop environments do fulfill many of them. However, there’s only one combination of softwares that works for me. This post only describes how I found the tools that have been been working for me for last 3 years smoothly, without competition from any other desktop environment. This is a very subjective piece. It should not be taken as a critique of every other environment.

The setup that I use is basically XFCE desktop environment with i3 window manager and i3bar as statusbar and system tray. In time where the other two major desktop enviroments on linux, Gnome & KDE, have gone through several major redesigns and broken workflows of many people, XFCE has stayed relatively unchanged. It has stayed consistant and predictable. And this is the reason I choose to use it. Sure, it’s not as “revolutionary” as Gnome & KDE and the development pace is slow as snail but it only means that I can rely on it without worrying what chaos the next update might wreck.

So, why don’t I use the stock XFCE with it’s own window manager XFWM which is perfectly fine on its own? I blame circumstances in which I learned linux. You see, when I started using linux about 6-7 years ago, the computer I used was about 7-8 years old at that time. It had 512MB RAM. And, I had a lot of time on my hands. So, as I went on looking for the perfect operating system, I also went on looking for efficient tools. Tools that didn’t take up much of computer’s resources but helped me accomplish various things. I also subscribed to the unix philosophy of “Do one thing and do it well”. So I looked for programs that did that.

This was the time when I learned VIM, more, less, grep, rgrep and many other command line utilities. I witnessed the beauty of what simple shell scripts can accomplish and how a desktop environment can be bent to one’s own will. Microsoft windows doesn’t offer his luxury. And this is the main reason that I continue to choose my linux work environment over MS windows or even Mac OS X. (And I have used both extensively.)

Anyways, while I was exploring various tools and trying to minimize base resource use of my system, I learned that in linux, one can run window manager stand-alone, independent of any desktop environment. And that this will reduce the overall resource use of the system as additional bells and whistles provided by the desktop environment will be stripped. I liked the idea and so the first window manager that I ran standalone was openbox. A very good window manager. After that I also tried Fluxbox which was also good.

When I was reading various online discussion on window managers, occasionally I read about “tilling window managers” and how they were better than Floating window managers. The idea intrigued me and I had all the time in the world. So I tried out Xmonad. A window manager written in haskell. It was good but something didn’t stick. Later I tried ratpoison. It was OK but too spartan. I tried dwm but disliked the idea of compiling the WM from scratch every time I needed to change configuration. Also, the configuration wasn’t a configuration but the change in the source code of the WM itself. After that I tried Awesome wm and it was really awesome. I stayed with it for a about a year. It even provided an inbuilt system tray which I didn’t get with other window managers. However the version 3.4 upgrade of Awesome WM broke backward compatibility with the previous configuration files. And this was the reason I went looking for an alternative.

At this time I had started hearing good things about the i3 window manager. So I gave it a try, and it was love at first sight. The configuration was simple, it was lightning fast, and also provided a system tray through i3bar. But it also provided certain additional features that weren’t available in other window managers. It provided innovative feature “modes” in which the window manager will enter a different state where the keys can do different things. And modes can be defined and customized as per one’s liking. It also provides a “floating” layout which is used by default for notifications, program dialogs etc. which other tilling WMs always had trouble with.

From the days of using Awesome, the first tilling window manager that used seriously, I had already learned to configure the tilling window manager to my own liking and already had developed muscle memory to do various common activities for managing windows. I had also assigned certain applications default workspaces so that I can switch to them instantly. All this was possible in i3. Additionally, using “modes” made launching applications or running scripts a matter of few keystrokes. I created an “execute mode” in which I can open programs with a single keystorke. However, it doesn’t have to be a program, I can also define a keystroke for opening a particular document or do anything that can be done through a bash shell. Furthermore, i3 handles multiple displays very well. Exactly like how I want it. i3 became my favorite window manager.

This combination of i3 + XFCE provides the bedrock of my work environment. It gives me a way to focus on my work without having to think about window management.

The operating system

My choice of operating system is GNU/Linux. The reasons are simple.

  1. I still use a decade old Pentium 4 computer with a 2.4GHz cpu and 512MB RAM (Yes, I know phones have more RAM these days…) I could just use good old windows xp, but, I don’t want to use a decade old operating system when I can use a brand new one for free of cost. Which beats windows in many aspects. However, even if I had a powerful system, I still would be running linux on top of it because it’s simply more tailored for my needs. I wouldn’t be able to do with Windows or OSX what I have done with linux. It’s very flexible.
  2. I like the package management of linux. Give one command and software is downloaded and installed ready at your disposal.
  3. Since I have started to use linux, I’ve grown to love the simple and powerful tools that it provides. Bash, vim, elinks… what’s not to like? Even if I don’t have access to graphical user interface, I can work perfectly fine with the command line. This also has helped me in recent times as at work, I need to ssh into a hosting server and set up web applications.
  4. I am a tinkerer and I like the choice and the customizability of linux. Without this aspect of it, I wouldn’t be writing this post.

Now, the question is, which distro do I use? Currently I am using Debian wheezy(which is currently a testing release). Previously I have used Arch linux for about 2 years. Before then, I did some time on Ubuntu. So, I’m not an expert in everything linux, however, I can say that I would be comfortable with pretty much any sane distro.

So, currently, the operating system that I use is Debian wheezy.