I (bignose) am trialling a "roaming profile" using a symlink-forest approach.

$HOME/.roam/common/ contains files and directories that should be common in my home directory on every machine.

These files are used by having a symlink in $HOME/ which points to the corresponding file in $HOME/.roam/common/. e.g. $HOME/.vim/vimrc-colours -> $HOME/.roam/common/.vim/vimrc-colours

Some of these configuration files will include configuration from corresponding $HOME/.site-local/.foo files, if they exist, to allow site-local home directories to contain site-specific configuration. e.g. $HOME/.roam/common/.profile will check for $HOME/.site-local/.profile and source it if it exists.

$HOME/.roam/bin/prep-home is a program that checks for any symlinks that need updating, and creates them. If the entries already exist but are not the expected symlinks, the program exits without changing anything and reports the files that need to be dealt with.

The entire $HOME/.roam/ directory is a VCS branch, so an initial deployment is:

cd $HOME
bzr checkout /path/to/repo/roaming-profile/ .roam/
~/.roam/bin/prep-home

When there are updates to apply, it's just as easy:

cd $HOME/.roam/
bzr update
~/.roam/bin/prep-home

—bignose 2008-06-23