Reflections on dotfiles

dotfiles define settings in Unix environments, and have maintained a certain importance throughout the past few decades for computer nerds around the world. There are lots of different things you can do in a dotfile.

Make command aliases:

alias s='git status'
alias d='git diff'
alias l='git log'

alias e='emacs -nw'
        

Maybe the alias needs to do something slightly different based on what operating system family you're using:

if [[ "$OSTYPE" == "linux-gnu" ]]; then
  alias ls='ls -F --color'
elif [[ "$OSTYPE" == "darwin"* ]]; then
  alias ls='ls -FG'
fi
        

For turning off my laptop's touchpad tap behavior, I have this script at .bin/touchpad.sh:

#!/usr/bin/env bash
synclient MaxTapTime=0
        

You could have a script called jcc that submits a file to Google's JavaScript compiler. If you put that in your dotfile repository, you can now use this anywhere your dotfiles are installed without worrying about copying over this script itself.

Over the years, collections of dotfiles, and the contents of these files, evolve slowly and steadily - particularly the often-used ones like .bashrc.

To manage my dotfiles, I chose to use a tool called homeshick because it only requires bash to be installed, no dependencies like python or ruby. It works for me, but I've always wondered if there's a better way to do it. The reasoning behind having a central place to store my dotfiles is that I can make a single change to be used on the handful of computers and servers I use regularly.

I don't always want or need to clone my central dotfiles wherever I ssh to, though. I don't have them set up on cunix, because all I do here log in and use emacs to write blog entries once in a while. It would be nice to have the same emacs configuration that I use everywhere else when writing these posts, but the version of emacs on cunix is a few years old, and it just doesn't matter enough to put in the work of making my emacs configuration compatible with it.