My yearly reminder for GNU stow as I don't change machines that often..
Mental model for me, stow basically takes whatever is in the directory you call it from, in this case ~/dotfiles (but could be anywhere you clone this), then looks at whatever is in the folder and symlinks from your actual $HOME to whatever is in the folder.
By default, Stow assumes the parent directory of the repository is the target. So ~/dotfiles → target is ~
Example:
~/dotfiles
/mypackage
/.config
/mypackage.config.yamlson
Running gnu stow mypackage will create a symlink:
~/.config/mypackage.config.yamlson -> ~/dotfiles/mypackage/.config/mypackage.config.yamlson
If a file already exists it will complain. If you want to take whatever is there and move it from there to your dotfiles adn create the symlink in one action use stow --adopt <package> but this of course only works for stuff you have already defined in dotfiles.
If for some app no config file exists yet, simply stow <app> to implement your dotfiles config for that app. If the default install already places config files there, you need to delete/move them, I don't think there is a force overwrite.