I do that too, with a function in my .profile that I can call in the `dotfiles/local` [1]. That lets me "advise" the global version of the file with before:
cat ~/dotfiles/local/profile
SETUP=goes.here
load-global-config "$BASH_SOURCE"
after: cat ~/dotfiles/local/profile
load-global-config "$BASH_SOURCE"
MODIFY=${EXISTING:settings}
OVERWRITE=options
OTHER=things.too
and "around": cat ~/dotfiles/local/profile
echo "BEFORE"
load-global-config "$BASH_SOURCE"
echo "AND AFTER"
The nice thing about keeping local dotfiles in a separate directory is that you can `.gitignore` it for your "public" dotfiles repository, but still keep the local dotfiles under source control easily.[1]: https://github.com/svieira/dotfiles/blob/4b7e948b698b623a498...
I combined the bare repo approach with a per-machine custom branch approach described in https://www.anishathalye.com/2014/08/03/managing-your-dotfil...
The idea is that you have the shared configuration in one repo, and at the end of each config file, you include a local version. The local versions live in a separate repository and use a separate branch for each machine.
For example, at the end of .bashrc, you'd have
and so on, for each config file. My general dotfiles repo is public here, if you want to take a look how I did it for the tools I use: https://github.com/bewuethr/dotfilesThis still isn't ideal. For example, I use Git submodules for Vim plugins in the shared repo – but maybe I don't need all of that on my Raspberry pi. I feel like at some point, a config file based solution could be better; or using a tool such as https://yadm.io/, which is using bare repos under the hood.