dot should have some way to preview changes without actually applying them. Something like a dry run feature. This could either be a flag to apply (ex: dot apply --dry-run) or a separate command (ex: dot diff).
Currently most of the functionality around managing the dotfiles lives in config. This should not be the place for it. config should only be concerned with storing any app state. There should be a separate module (ex: dotfiles) that has the actual logic for working with dotfiles. This should be designed in a way that allows it to be easily tested.