I have several reasons for my custom make + stow + shell scripts:<p>* git status only shows me changes to config. Similarly it is easy to determine if I've forgotten to add something when adding a new config.<p>* accidentally adding giant directory trees to the repo is much, much harder - absentmindedly "cd .."ing one too many times and committing a bunch of proprietary work code causes a lot more work to cleanup than a lifetime of extra character strokes in "cd dotfiles/repo/dir && git commit -a".<p>* it allows me to have some goodies for the heterogeneous environments I compute in. Depending on if I'm on a mac or linux, if the machine is at home or work, a server or desktop, etc. I can tailor the subset of configs and details thereof. The net result is ironically a more consistent personal compute environment across systems.<p>* it allows me to store examples, notes, documentation, etc in my dotfiles repo without cluttering up my homedir<p>* i don't have to remember if config live in .prog, .prog/config, .config/prog/, etc<p>* it lets me store system setup scripts in my repo too. I can log onto (or install) a new machine and run my initialization script (os appropriate) and be 95% or moreready to go in a few moments. [note: things like vim + plugins, fontconfig, etc that need extra commands to set up are all automated in these], without always having those commands in my ~/bin path.<p>Overall, for me it boils down to: I get more control over my environment on multiple, different machines by using a bit of scripting in my dotfiles repo.