3 ms·
I, too, saw this approach on HN first – here: https://news.ycombinator.com/item?id=11071754 https://news.ycombinator.com/item?id=11071754 I combined the bare r
by bewuethr 5y ago
I, too, saw this approach on HN first – here: https://news.ycombinator.com/item?id=11071754 https://news.ycombinator.com/item?id=11071754
I combined the bare repo approach with a per-machine custom branch approach described in https://www.anishathalye.com/2014/08/03/managing-your-dotfiles/ 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
if [[ -r $HOME/.bashrc_local ]]; then
. "$HOME/.bashrc_local"
fi
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/dotfiles https://github.com/bewuethr/dotfiles
This 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/ https://yadm.io/, which is using bare repos under the hood.
- tdfirth 5y agoYes that comment is where I first saw it, thanks for reminding me. Thanks for those pointers and the link to your dotfiles too. I will check that out and maybe steal a couple of ideas!!
- svieira 5y agoI 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/4b7e948b698b623a498395cfe186ed1f60f62a4f/profile#L22-L46 https://github.com/svieira/dotfiles/blob/4b7e948b698b623a498...