Skip to content
This repository

Your files, anywhere.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 homefiles
Octocat-spinner-32 tests
Octocat-spinner-32 .gitignore
Octocat-spinner-32 README.rst
Octocat-spinner-32 setup.py
README.rst

homefiles

Your files, anywhere.

What is homefiles?

homefiles is a program that helps you keep your files synced across machines. Unlike Dropbox which syncs to-and-from a single location (the Dropbox folder), homefiles allows you track files anywhere in your home directory and sync them back to their original location, even when syncing across machines.

This makes homefiles perfect for tracking your dot-files, like your .bashrc and .vimrc. You're not limited to that, however. With homefiles, you can track any type of file--a text file of important phone numbers, perhaps-- or even entire directories, for, say, keeping notes folder on all you machines in sync.

Also unlike Dropbox, homefiles stores your files in a git repository, giving you the ability to track and rollback to earlier versions of files if necessary.

homefiles is not a replacement for Dropbox or Google Drive--you wouldn't want to store movies or photos in it. But for configuration and text files, homefiles is a simple way to manage, version-control, and distribute these across all your machines.

What do you need to use homefiles?

  • Git
  • Python 2.7+
  • GitHub Repo to store your files remotely

Features

  • Track files or directories
  • Easily clone files to another machine
  • Sync updates back to GitHub
  • OS bundles for OS-specific configurations (OS is detected automatically)
  • Custom bundles for machine-specific configurations

Getting Started

Install:

pip install homefiles

Track Your Files:

homefiles init
homefiles track ~/.vimrc

Sync Your Files To GitHub:

homefiles sync 'Added vimrc'

Clone Your Files On Another Machine:

homefiles clone rconradharris
homefiles link

Bundles

The data repo is composed of directories called 'bundles'. Each bundle represents a set of files to be copied onto the target machine.

Bundles come in two flavors, OS-specific and custom. OS-specific bundles will only be synced to machines that have a matching OS, for example Mac's will sync OS-Darwin bundles whereas Ubuntu will sync Linux, Ubuntu, and potentially Ubuntu-13.04 bundles.

All machines will receive the Default bundle.

In addition, custom bundles can be defined which will be synced only when directed to.

Bundle Layout

Within the bundle, the layout is relative to your home directory, so Default/bin/foo.sh will be symlinked as $HOME/bin/foo.sh.

Likewise, OS-Darwin/Documents/code/mac_only.sh will symlink to $HOME/Documents/code/mac_only.sh but only on Macs.

If a whole directory is being tracked, the .trackeddir marker file will be present in it. This will cause the directory to be symlinked as a single unit, rather than symlinking the individual files.

Repo Layout

.homefiles/
    Default/
        .vimrc
        bin/
            all_platforms.sh
    OS-Darwin/
        Documents/
            code/
                mac_only.sh
            notes/
                .trackeddir
    OS-Linux/
        bin/
            linux_only.sh
    OS-Ubuntu/
        bin/
            ubuntu_only.sh
    OS-Ubuntu-13.04/
        bin/
            raring_only.sh

Advanced

Determine available platforms for current machine:

$ homefiles bundles
- Default
- OS-Darwin

$ homefiles bundles
- Default
- OS-Linux
- OS-Ubuntu
- OS-Ubuntu-13.04

Tracking a Mac specific file:

$ homefiles --bundle OS-Darwin track ~/.mac-specific-file.txt

Link using custom bundles:

$ homefiles --bundle=Laptop,Personal link

You can override the directories homefiles uses for the root and repo by using environment variables:

$ HOMEFILES_REMOTE_REPO=.test_repo HOMEFILES_ROOT=~/.test_root HOMEFILES_REPO=~/.test_repo homefiles sync

Environment Variables

HOMEFILES_REMOTE_REPO
Name or URL of the remote repo. Default: .homefiles
HOMEFILES_REPO
Where to store the homefiles configuration repo. Default: $HOME/.homefiles
HOMEFILES_ROOT
File are symlinked relative to this root directory. Default: $HOME
Something went wrong with that request. Please try again.