Dotfile is a version control system designed for dotfiles. It aliases file paths to short names and provides an interface to manage file state. Use a remote server like dotfilehub.com to push, pull, or find new files.
Most existing solutions are built on some combination of git/stow/symlinks. This introduces the complexities and potential pitfalls of these tools. Git is designed for a directory of related files, whereas dotfiles are often scattered unrelated files.
Dotfile is a self contained system designed from the ground up to make managing single files as simple as possible. Files are stored in their normal locations on disk without any symbolic links. Dotfile doesn’t care if tracked files are moved or edited with external tools.
Advantages over git based systems:
- Not limited to one parent directory - initialize any file, even
outside
$HOME
- No merge conflicts
- Pull or push a single file instead of the entire repo
- Revert a single file to a past revision without affecting other files
- Easily rewrite or delete file history
- Simple web interface for managing files remotely
Things Dotfile doesn’t do:
- File encryption
- Manage non text files
- Manage large files
- Templates
- Branches
- Install the CLI
- Create a Dotfilehub account to share files between machines
- Setup the CLI to use remote functions
Optionally self host a Dotfilehub instance.
Dotfile commands are like git but simplified.
Check a file in:
dotfile init ~/.bashrc
This creates an initial commit. Dotfile will store the path of the
file and give it a default alias of bashrc
. Use the alias to refer
to it at anytime.
Open ~/.bashrc
in $EDITOR
:
dotfile edit bashrc
Check the diff after making changes:
dotfile diff bashrc
Commit new changes:
dotfile commit bashrc "Add dotfile alias"
View commit history:
dotfile log bashrc
Revert its uncommitted changes:
dotfile checkout -f bashrc
Push to a remote server:
dotfile push bashrc
Install all of your dotfiles:
dotfile pull --all
Want to contribute? Open a pull request or an issue at github.com/knoebber/dotfile
Feedback is always appreciated - contact me at knoebber@gmail.com