There are a lot of ways to manage your dotfiles. dotGit implements an idea that has been floating around on the internet for a while: a bare git repo for storing your dotfiles. A quick search finds this post, but there may be older sources.
dotGit has modest aims:
- π‘ keep config files where tools expect them in
$HOME
- π stay as light and close to git and the shell as possible
- π reduce friction and make config changes quick and convenient
dotGit gives you a handful of shell aliases (tested with zsh
π and bash
) to make dotfile management quick and easy. The shortcuts mimic a subset of those found in the oh-my-zsh git plugin.
.g
is the alias for runninggit
with correct--git-dir
and--work-tree
.ga
runsgit add
.gc
runsgit commmit
.gco
runsgit checkout
.gd
runsgit diff
.gss
shows thegit status --short
.gp
willgit push
the changes to the origin.gl
willgit pull
changes from the origin.glo
runsgit log --oneline --decorate
.glg
runsgit log --stat
.glgp
runsgit log --stat --patch
.gg
runsgit grep
on your dotfiles. If FZF is installed it will be used to present the matches, and make it easy open your$EDITOR
on the right line (works with vi, emacs, nano, micro, and any editor that accepts the+<number>
syntax to indicate the line number)..ge
(requires FZF) lists all files using FZF and opens the selected file in your$EDITOR
.lazygit
(requires lazygit) will runlazygit
with the correct-g
and-w
.gitui
(requires gitui) will rungitui
with the correct-d
and-w
There are two additional aliases used to (re)set up the bare git setup.
.ginit
creates the bare git repository in$DOT_FILES
directory..gclone
will clone the repository set in$DOT_ORIGIN
into the$DOT_FILES
directory Both of these aliases also set git'sstatus.showUntrackedFiles
tono
. This prevents every file in$DOT_HOME
from showing as "untracked" by git.
- clone this repository or simply copy the dotgit.sh
- add some config sauce to your shell initialization (.i.e.
.zshrc
or.bashrc
). TheDOT_FILES
andDOT_HOME
variables must be set for the dotGit.sh to load!
export DOT_FILES="${HOME}/.dotfiles"
export DOT_HOME="${HOME}"
export DOT_ORIGIN="[email protected]:user/your-dotfiles-repo.git" # optional
source <path to dotgit.sh>`
- restart your shell or
source ~/.zshrc
orsource ~/.bashrc
- run
.ginit
or.gclone
(see the initial clone setup below, if cloning) .gc <branch>
to checkout the config files
Existing config files will prevent checking out the files. To list the files causing the checkout to fail, run the following.
.g checkout 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"
To remove all the conflicting files, simply change the echo
in the above command to rm
. This will delete files, so be sure you want to remove them. Once the files are removed the checkout will succeed.
- GNU Stow
- dotbare (this is close in spirit to dotGit, and can be used together with dotGit from what I can tell)
- Home Manager