Sheepdog is a system1 for managing shell .files across multiple unix machines so you can keep a fairly consistent environment (paths, aliases, etc) across all your machines while still keeping machine-specific customizations.
The main job of the script is to put files in the right places. Once things are going, you just need to make changes to the right files (by convention) and keep things up to date via your scm.
Right now the script is fairly minimal, but appears to work. Mostly. I think.
This is pre-alpha software. It's so far from alpha it might as well be omega from the last epoch. Use at your own risk, after making backups. Seriously: this has been in use on my own machines for a few months, but there's no guarantee it works elsewhere. This is a test release.
Standard test disclaimer:
Actually, this has been a feature of Unix for years now. A process may have all of its child processes reaped without warning, lose its entire flock, and even find itself afflicted by boils, all at the whims of the scheduler. This is why the operating system refers to a suspended process as a "stopped Job". Unfortunately, most implementations fail to capitalize the name, leading to widespread confusion and mispronunciation among users. -Dan Martinez
Do not use it without reading and understanding this page. Alternatively, make peace with your new lack of files.
Download the script from here.
The environment files (.profile, .cshrc, etc. -- ".files") are replaced with symbolic links pointing to scripts in the .sheepdog directory. Each script then calls files in order, if available:
For example, say you have two desktop machines and a laptop, and most of your environment is the same on all three machines, but:
Sheepdog would make all your "generic" aliases available on all machines, and handle the two exception cases:
For example, you'll have files which look something like this:
.bashrc@ -> .sheepdog/scripts/.bashrc .profile@ -> .sheepdog/scripts/.profile .sheepdogrc .sheepdog/ scripts/ .bashrc .profile pre/ .profile.desktopextra main/ .bashrc .profile post/ .profile.laptop
On the desktop with extra software, .profile will consist of running pre/.profile.desktopextra and then main/.profile. On the laptop, .profile will consist or running main/.profile and then post/.profile.laptop.
sheepdog initializeThis will initalize the environment.
cp ~/.sheepdog/configs/sample ~/.sheepdogrc
sheepdog importThis will move your existing files to ~/.sheepdog/scripts/post/[filename].[machinename]. For example, the .profile on your "work" machine should wind up in ~/.sheepdog/scripts/post/.profile.work. This step means that your original .files will now be called after any generic files (which you haven't created yet.)
sheepdog lninstallThis creates the symbolic links.
sheepdog importAlternatively, move . files into the post dir and add an extension to the name to include the machine name (e.g. ~/.profile on your "laptop" would become ~/.sheepdog/scripts/post/.profile.laptop).
sheepdog lninstallOnce again, creates the symlinks.
Some things that are probably worth doing:
Please mail comments to faisal AT faisal DOT com.