Skip to content
VimL Perl Shell Other
Find file


This is my HOME, including shell environment, vim
configuration, and other misc dotfiles and scripts.

Have fun.


I've received a few emails inquiring as to how this
repository is managed and how I intend for others to use
it. There's multiple techniques for keeping a home
directory under version control -- I'll try to lay out my
goals and strategy here.

First, a few things I'm not trying to accomplish: I don't
use this repository to distribute or sync my common files
between multiple machines (that's what the ~/bin/sync-home
script is for). I also don't intend to use this repository
as a source of backup -- I have a separate incremental backup
and snapshotting tool for that.

This repository exists mainly so that I can publish my
environment and misc scripts, since I often find myself
referencing them in conversations, email, IRC, blog posts,
etc. I also like having a proper annotated change history
for these files when things break.

I don't suggest using this as some kind of prefab home
environment (although that's certainly possible). Look
through the stuff and take what you find useful with copy
and paste or by copying specific files and directories
into your own home - such is the tradition of UNIX home


My home directory is a real git work tree. The repository
data is stored in ~/.git. Some people like to keep the
actual work tree somewhere else and symlink files into
their home. I don't do that.

One issue with this approach is that 'git status' can be
overly noisy, since most files are not tracked and show up
as "other" files. I get around this by ignoring all files
that I haven't added explicitly -- this is as simple as
adding a "*" line to the ~/.git/info/exclude file.

Another issue is how best to handle machine specific or
sensitive information (usernames / passwords, API keys,
etc.) included in dotfiles. I simply do not add any files
to the repository unless they're "clean". In some cases,
that means not adding stuff that I'd otherwise like to
have tracked. For example, I'd like to publish my
~/.gitconfig file but it contains my secret github API

In other cases, I've built up systems for dealing with
this issue specifically. My ~/.bashrc file is machine
generic but sources an ~/.shenv file (untracked) if it
exists. This lets me separate machine-specific and
sensitive information from stuff I want to publish. If I
can figure out how to include a ~/.gitconfig-private or
some such file into ~/.gitconfig, I'll start tracking the
non-sensitive stuff under the repository as well.


I didn't write all of this stuff, or even most of it.
I've tried to include proper attribution and info on
distribution and licensing in each of the file's I
found elsewhere. Please contact me if you see something
not so attributed.

Something went wrong with that request. Please try again.