A minimalist dotfiles manager inspired by a 2012 blog post (archived)
by Brandon Invergo in which they show how to use GNU stow to manage dotfiles. I
found this solution very elegant, however if you happen to use different path
for, e.g, $XDG_CONFIG_HOME between your computers, this won't work. xdot is
my answer to that.
A package is a directory that contains config for an application.
xdot will look for packages in $XDG_CONFIG_HOME/xdot (defaults to
~/.config/xdot).
If a package subdirectory's name begins with a U+0040 AT SIGN (@), the
remaining characters will be interpreted as an environment variable name (with
spec compliant defaults for XDG Base Directory vars), e.g:
PACKAGE/@HOME/FILEwill be symlinked to$HOME/FILE,PACKAGE/@XDG_CONFIG_HOME/FILEwill be symlinked to$XDG_CONFIG_HOME/FILE.
Otherwise, xdot will link the content of said package relative to /, e.g:
PACKAGE/FILEwill be symlinked to/FILE,PACKAGE/DIR/FILEwill be symlinked to/DIR/FILE.
Usage: xdot [options] [--] [package...]
Symlink your dotfiles from `$XDG_CONFIG_HOME/xdot` (defaults to `~/.config/xdot`).
Options:
--all Symlink all packages.
--unlink Remove symlinks.
--dry-run Don't modify the file system.
-v, --verbose Increase verbosity.
-h, --help Show this help message and exit.
--version Show version information and exit.
Running xdot is idempotent and won't overwrite existing files, if a directory
already exists it will descend into it until it is able to symlink or fails.
--unlink will remove symlinks that would otherwise be created (except if the
existing link points to a location outside of the packages directory).