nullprogram.com/blog/2012/06/25/
With my dotfiles repository established I now
have a common configuration and environment for Bash, Git, Emacs
(separate repository), and even Firefox! This wouldn’t normally be
possible because Firefox doesn’t have tidy dotfiles by default, but
the wonderful Pentadactyl made it possible. My
script sets up keybindings, bookmark keywords, and quickmarks so that
my browser feels identical across all my computers. Now that it’s easy
to add tweaks, I’m sure I’ll be putting more in there in the future.
However, one major application remained and I was really itching to
capture its configuration too, since even my web browser is part of
the experience. I could drop my dotfiles into a new computer within
minutes and be ready to start hacking, except for my desktop
environment. This was still a tedious, manual step, plagued by the
configuration propagation issue. I wouldn’t to get too fancy with
keybindings since I couldn’t rely on them being everywhere.
The problem was I was using KDE at the time and KDE’s configuration
isn’t really version-friendly. Some of it is binary, making it
unmergable, it doesn’t play well between different versions, and it’s
unclear what needs to be captured and what can be ignored.
I wasn’t exactly a happy KDE user and really felt no attachment to
it. I had only been using it a few months. I’ve used a number of
desktops since 2004, the main ones being Xfce (couple years), IceWM
(couple years), xmonad (8 months), and Gnome 2 (the rest of the
time). Gnome 2 was my fallback, the familiar environment where I could
feel at home and secure — that is, until Gnome 3 / Unity. The coming
of Gnome 3 marked the death of Gnome 2. It became harder and harder to
obtain version 2 and I lost my fallback.
I gave Gnome 3 and Unity each a couple of weeks but I just couldn’t
stand them. Unremovable mouse hotspots, all new alt-tab behavior,
regular crashing (after restoring old alt-tab behavior), and extreme
unconfigurability even with a third-party tweak tool. I jumped for KDE
4, hoping to establish a comfortable fallback for myself.
KDE is pretty and configurable enough for me to get work done. There’s
a lot of bloat (“activities” and widgets), but I can safely ignore
it. The areas where it’s lacking didn’t bother me much, like the
inability/non-triviality of custom application launchers.
My short time with Gnome 3 and now with KDE 4 did herald a new, good
change to my habits: keyboard application launching. I got used to
using the application menu to type my application name and launch
it. I did use dmenu during my xmonad trial, but I didn’t quite make
a habit out of it. It was also on a slower computer, slow enough for
dmenu to be a problem. For years I was just launching things from a
terminal. However, the Gnome and KDE menus both have a big common
annoyance. If you want to add a custom item, you need to write a
special desktop file and save it to the right location. Bleh! dmenu
works right off your PATH
— the way it should work — so no
special work needed.
Gnome 2 has been revived with a fork called MATE, but with the lack
of a modern application launcher, I’m now too spoiled to be
interested. Plus I wanted to find a suitable environment that I could
integrate with my dotfiles repository.
After being a little embarrassed at
Luke’s latest Show Me Your Desktop
(what kind of self-respecting Linux geek uses a heavyweight desktop?!)
I shopped around for a clean desktop environment with a configuration
that would version properly. Perhaps I might find that perfect desktop
environment I’ve been looking for all these years, if it even
exists. It wasn’t too long before I ended up in Openbox. I’m pleased
to report that I’m exceptionally happy with it.
Its configuration is two XML files and a shell script. The XML can be
generated by a GUI configuration editor and/or edited by hand. The GUI
was nice for quickly seeing what Openbox could do when I first logged
into it, so I did use it once and find it useful. The configuration
is very flexible too! I created keyboard bindings to slosh windows
around the screen, resize them, move them across desktops, maximize in
only one direction, change focus in a direction, and launch specific
applications (for example super-n launches a new terminal
window). It’s like the perfect combination of tiling and stacking
window managers. Not only is it more configurable than KDE, but it’s
done cleanly.
Openbox is pretty close to the perfect environment I want. There are
still some annoying little bugs, mostly related to window positioning,
but they’ve mostly been fixed. The problem is that they haven’t made
an official release for a year and a half, so these fixes aren’t yet
available. I might normally think to myself, “Why haven’t I been using
Openbox for years?” but I know better than that. Versions of Openbox
from just two years ago, like the one in Debian Squeeze (the current
stable), aren’t very good. So I haven’t actually been missing out on
anything. This is something really new.
I’m not using a desktop environment on top of Openbox, so there are no
panels or any of the normal stuff. This is perfectly fine for me; I
have better things to spend that real estate on. I am using a window
composite manager called xcompmgr
to make things pretty through
proper transparency and subtle drop shadows. Without panels, there
were a couple problems to deal with. I was used to my desktop
environment performing removable drive mounting and wireless network
management for me, so I needed to find standalone applications to do
the job.
Removable filesystems can be mounted the old fashioned way, where I
create a mount point, find the device name, then mount the device on
the mount point as root. This is annoying and unacceptable after
experiencing automounting for years. I found two applications to do
this: Thunar, Xfce’s file manager; and pmount
, a somewhat-buggy
command-line tool.
I chose Wicd to do network management. It has both a GTK client and an
ncurses client, so I can easily manage my wireless network
connectivity with and without a graphical environment — something I
could have used for years now (goodbye iwconfig
)! Unfortunately Wicd
is rigidly inflexible, allowing only one network interface to be up at
a time. This is a problem when I want to be on both a wired and
wireless network at the same time. For example, sometimes I use my
laptop as a gateway between a wired and wireless network. In these
cases I need to shut down Wicd and go back to manual networking for
awhile.
The next issue was wallpapers. I’ve always liked having
natural landscape wallpapers. So far,
I could move onto a new computer and have everything functionally
working, but I’d have a blank gray background. KDE 4 got me used to
slideshow wallpaper, changing the landscape image to a new one every
10-ish minutes. For a few years now, I’ve made a habit of creating a
.wallpapers
directory in my home directory and dumping interesting
wallpapers in there as I come across them. When picking a new
wallpaper, or telling KDE where to look for random wallpapers, I’d
grab one from there. I’ve decided to continue this with my dotfiles
repository.
I wrote a shell script that uses feh
to randomly set the root
(wallpaper) image every 10 minutes. It gets installed in .wallpapers
from the dotfiles repository. Openbox runs this script in the
background when it starts. I don’t actually store the hundreds of
images in my repository. There’s a fetch.sh
that grabs them all from
Amazon S3 automatically. This is just another small step I take after
running the dotfiles install script. Any new images I throw in
.wallpaper
get put int the rotation, but only for that computer.
I’ve now got all this encoded into my configuration files and checked
into my dotfiles repository. It’s incredibly satisfying to have this
in common across each of my computers and to have it instantly
available on any new installs. I’m that much closer to having the
ideal (and ultimately unattainable) computing experience!