Synchronize your dotfiles using github
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Forking dotfiles on github is pretty trendy. But what if you don't want a full-fledged fork of others' settings?

What if you just want to synchronize your own dotfiles, on different machines?

Then you want two repositories, not just one.

  1. dotfiles:
  • Your dotfiles. The things you want to version and synchronize.
  1. dotsync:
  • Dotfile management software
  • A github repository just like any other. Not forked (unless you want to develop it!)

Philosophy and goals

There's more than one way to put dotfiles on github! The dotsync philosophy is based on Eli Barzilay's comment, summarized below.

Dotfile repositories have to figure out what to do with the $HOME directory. Most take one of two approaches:

  1. dotfiles are symlinked from the repository
  • Pro: Cleaner setup. All the versioned files are in one place!
  • Con: Fragile. Too easy to whack changes.
  1. $HOME is a repository
  • Pro: Simple. Files really do live just where they seem to live.
  • Con: Messy. Everything you don't version will clutter up your git status
  • Con: Dangerous! Running git commands in the wrong directory could make a mess, instead of a harmless error message

dotsync takes a third approach: A git alias with predefined options

  • The dotfiles live in the HOME directory (no worries about whacking symlinks)
  • Yet, $HOME is not a repository (you won't mess it up if you git in the wrong directory)

Getting started

Install dotsync

These commands install dotsync to a directory called dotsync/, under your current working directory:

git clone git://

Setup dotsync

Now that you've got a repository



  • Should play nice with cron: the install script expands $HOME when it writes the bash settings file.