Skip to content
This repository has been archived by the owner on Jan 10, 2020. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Welcome to HomeDir

Do you have a home directory? Want to keep it sane, safe, and easy to use on multiple systems?

Then you want HomeDir!

What is homedir?

It is, in essence, a package manager for your home directory.

It stores packages in your ~/.homedir/packages directory. These packages can be pulled from my examples or you can set up your own!

This allows you to:

  • Version control your home directory files. Your home directory files represent lots and lots of effort. Why wouldn't you want them archived?
  • Share home directory files across multiple hosts. It's much nicer when all the systems you work on behave the same.


You must have python 2.5 or newer.

Quick Start

If you've never used HomeDir, then just run this from the command line:

curl -L -o- | python

If you don't have curl, then just download (usually right-click and then select "save as...") the file and run it with your copy of python.

If you already have ~/bin in your path, then homedir will "Just Work™".

Previous HomeDir users

If you've using the pre-2.0 version of HomeDir (hosted on then you should back up your .homedir directory before running the above script.

The main change is that everything in ~/.homedir/files has been moved to ~/.homedir/packages and the packages will no longer be automatically updated.

The Story So Far…

Since about 1999 I've been keeping my home directory config files in CVS. As the number of config files I've been storing has grown and as the number of different systems I use it on (my work desktop, my home desktop, my laptop, Gerf, my pda) increases. As the complexity has grown it has become harder to maintain.

So, I started looking around for a better solution. I noticed that SVN is a much better version control system. I was already familiar with stow as well. So I tinkered around with combining them.

And thus homedir was born!

Since then, I rewrote HomeDir completely in python. This gives me more control over the help and error messages. I can do better when conflicts arrive. As well as I can add an elementry package format, which allows me to solve the problem that uninstalling a stow package can take forever if you have a lot of directories in your home.

A friend pointed out that the most important part was the package manager. The various .dotfiles are interesting to look at, but most people have their own. So I moved just the package manager portion to github

Similar Ideas

Changes since version 1

The original HomeDir, which was hosted on, is going to be considered version 1.

No Configuration File

Version 1 had a configuration file that kept track of where your packages were located.

In this new version packages can be placed anyplace under the directory ~/.homedir/packages (except inside another package, of course).

This allows for more flexability for managing packages.

This also means that sync/synccmd is no longer supported.


  • Finish moving out the package and dependency checking stuff into a Catalog class.
  • Fix cache-tool package in examples.
  • Add homedir-pkg <pkg-name> <file-to-add>... command to make building a package from existing files easier.
  • Get a dedicated freenode #homedir channel: "hello freenode" to mrmist


[NO LONGER MAINTAINED] Have a home directory? Keep it sane!






No packages published