Optimising my desktop / my dotfiles repo

Since I started working professionally back in August, I've learnt a lot about software development. One thing that stands out to me as a huge learning experience is that your desktop environment can always be improved. A brief list of improvements I've made:

  • My desktop environment is much more usable (for me, not a regular user...)
  • My vim config is much better (read: doesn't suck)
  • I maintain my dotfiles with version control.

So what pushed me towards making these changes? At work, we do paired programming quite a lot. I noticed that my desktop environment was very clumsy compared to the setup others had. In particular, starting an application required I start a terminal to do it. If I wanted to find out the time, I had to start a terminal. Essentially, before doing something, start a terminal. By the end of the day, I'd have half a dozen terminals open that weren't doing anything.

Fixing My Desktop Environment

Window Manager

I've had a long(ish) history of desktop environments/window managers in computing. When I was younger and still used Windows, I used WindowBlinds to achieve a less-than-bad appearance. When I made the switch to Linux, the series of DEs/WMs I used went something like this:

Those with experience in Linux land will see a trend here: I like minimalism while maintaining configurability. I used Openbox for the longest time, and I still think it's a great window manager. Just not for me. While I like the keyboard shortcuts available for resizing and managing windows in Openbox, I didn't like that I had to do that at all. I spent a lot of time over my holidays trying out tiling window managers to find one I like. After a while I settled on Musca, as I felt it was very natural to use. I soon found out that the multihead support in Musca sucked, so I couldn't use it. I decided to try i3, and I was instantly sold. It's very configurable, the manual is fantastic, and it's very flexible.

Side note: I recently setup my girlfriend's Windows 7 laptop, and, well, I hadn't noticed how much I like tiling window managers now. I got lost in the deck of cards that is traditional window management in less than five minutes.

Starting Applications

So after a long time of starting a terminal to open pretty much anything, I realised there was a problem. Want to open firefox? Start a terminal, type firefox, and close the terminal. Three steps for opening a program? Even in a less optimal desktop environment, things weren't that painful.

As I mentioned earlier, I went through a 2 week stint of testing tiling window managers. During this time, I came across a tool called Dmenu, specifically made for creating dynamic menus along the top or bottom of your screen - I mapped Dmenu to a key (Mod4+x), and I was set. It took all of five minutes to adjust to, and starting applications was already much less cumbersome than it was originally. Definitely worth checking out. Because it's so configurable, you can set it up to do lots more stuff.

Using Vim was hard

So this solution came in two parts - fixing my config, and learning how to use Vim properly.

The largest problem with my configuration file was that I had no idea what a lot of settings were doing - I had thrown them in at some point, they had fixed a particular problem, and then forgotten about them. The solution to this was to do :help <setting> (how outlandish!) in vim to find out what it was for, and remove it if I didn't need it. Someone I worked with also pointed out that my colour scheme was awful because it was really low contrast, making code much harder to read than it should be.

The colour scheme I use now is one called blackboard. As the name implies, the aim is to emulate the colours of chalk on a blackboard - giving nice, high contrast colours while looking pretty.

Fixing the second problem was straight forward. I watched what I was doing, and if I noted anything repetitive, I would check documentation/Google for a command to do what I want with less typing. You know, the way it should be.

Using version control for my config files

The thing that had been quietly bothering me for a long time was the discrepancy configurations on multiple computers. Some computers had decent colour schemes, some had different plugins, and so on. Moving all of my dot files to a mercurial repository has been one of the most sane decisions I've ever made for managing configuration of my own desktop. Not only do I have everything backed up in the event something goes wrong, but reformatting a machine, or buying a new machine, will now take minutes to personalise, not hours, or days.

All of my configuration files are available at bitbucket.org/getoffmalawn/dotfiles. If you see something you like feel free to grab it.