software.
Like many UNIX users, I have a tendency to spend lots of time engineering
a perfect operating environment. Here are some details on the software I
like to use on my desktops, with all the tweaks I've made to them, excluding
things like vi and basic UNIX utilities. All the tweaking took too much
time, but it made me happy. One thing I've learned over the years is that
usability and learning curve are completely separate things, and are often
inversely proportional. Many software packages that take longer to learn
make you more productive in the long run. If you're a casual computer user,
this often means that traditional GUI apps with short learning curves are
best for you. If you spend a serious amount of time on them, it's worth
investing in more challenging, but ultimately more rewarding software.
FreeBSD
The OS that I use for almost everything. I do have to keep OSX around
for audio recording and sequencing, but having an OS that isn't ruled by
a corporation and where all applications are free, modifiable and have
no DRM is simply a beautiful thing. No license headaches, no "warez", no
viruses, and low resource consumption. I've tried most every OS, and I
always come back to FreeBSD. It's not for everyone, but it's very much
for me.
zsh
zsh is my shell of choice, because it's forgiving of my wanton
mashing together of csh and ksh-isms, and because its tab completion
is brilliant. I've set up completions to finish URLs for w3m,
hostnames for ssh, package names on remote FTP servers, hostnames
from LDAP servers, etc. It does many tricks. My zshrc.
awesome
Awesome is a very configurable, minimal, but still feature-rich tiling window manager.
The idea of tiling window managers is that all screen real-estate should be maximally
used. Ideas like docks or menubars are not generally compatible with this. So, rather
than cluster apps in a menubar, windows take up as much space as they can get and
arrange themselves automatically. Resizing or moving windows manually is almost
never necessary, and the keyboard can be used for almost all navigation. Virtual
desktops are replaced with "tags", which can be merged into each other. After
probably 10 years of using WindowMaker/Blackbox/Openbox, awesome finally pulled
me away.
My .awesomerc is here.
The statusbar.sh script, started from my .xsession file,
sets the status bar to have the current machine load, battery life, and time/date.
mutt
Mutt is hands down the best mail client I've found. I've tried many, and
I still like Thunderbird, but mutt is so much faster, more flexible and
featureful that I can't stop using it. I love it in the worst way - there's nothing
it cannot do. It handles mailing lists great, supports pattern matching for
tagging or deleting, and does proper threading. I have a little mailcap
that uses the mutt_bgrun script
to spawn a GUI app for handling attachments, or just converts the attachment
to text and views it inline (if I'm not using a GUI desktop). It uses programs
to convert Excel, Word, HTML, and images to plain text. Check out my .muttrc.
cmus
cmus is to music what mutt is to e-mail. It's console-based, very fast, and
has pretty much every feature you'd want. I used to be very into Amarok, and
I still use it for some things, but cmus starts instantly, is unobtrusive,
and can be made to do lots of nice tricks like integrate into last.fm.
I particularly like the lqueue and tqueue functions (my ideas!), which are basically
"party shuffle" for albums or tracks, respectively.
I use this status script to update things on
track change. It does the following:
- Submits track data to the last.fm helper, "post.fm".
- Changes Pidgin's status message to the currently playing track.
- Tells cmus I want it to move to the currently playing track.
- Updates the awesome status bar of the second monitor to display the track info.
- Looks for cover art in the folder of the currently playing track. If there is some,
it will be displayed along with the track info in a libnotify popup.
w3m
w3m is deceptively featureful. It's a text-only web browser, but it does a great
many things, and I find myself using it quite often. Among its many features:
- Not rendering images
- Not showing Flash
- Not supporting JavaScript
- Tabbed browsing (!)
- Actually being fast
- Compact enough to exist without obscuring other windows
- Text boxes can be edited with your favorite editor
- Fast vi-like search
publicfile
A vastly under-appreciated HTTP and FTP server. There are relatively
few services facing the external world that I run, and I demand that
the ones that I do (with the sad exception of OpenSSH) be bulletproof,
lightweight, and never have any security problems. Publicfile is all of
those things, plus it's trivial to set up and configure and delightfully
minimal.
djbdns
As with publicfile, I run this because it's simple, easy and has no
possibility of security issues. On most of my systems I use a local
dnscache, so I never have to worry about DNS issues when moving my
systems around or external DNS servers going down. It's fun to sit
around watching the same BIND exploits happen over and over again
and never have to worry.
mplayer
audacity
I actually use this as my home recording solution. It's cross-platform,
functional, and free. Quality audio software is really hard to find for
free - it turns out audio programming is hard - so I appreciate this
software all the more.
screen
LaTeX
I had never used LaTeX before last year, but took to it quite quickly.
I'm becoming more and more convinced that WYSIWYG document creation
has some serious disadvantages. Using LaTeX at work has made document
creation much less stressful and easier for me. It certainly has its
infuriating annoyances, but not nearly to the degree which OpenOffice
and MS Word have. Well, to be perfectly honest, LaTeX sucks, but I
haven't found anything that sucks less. And as is probably readily
apparent, I enjoy learning arcane skills that yield superior results.