Hello, here’s a code review. Thanks for sharing here.
These are my unfiltered opinions that may be wrong, and I hope they are useful for you.
Have you considered including an open source license like BSD? There’s a base GitHub license applied now.
func CreateRelative(
path string,
confPath string,
scope string,
) string {
could be
func CreateRelative(path, confPath, scope string) {
In package notifier the Notifier interface is unused. Directly writing in beeep.Alert and beeep.Notify is clearer than assuming the implementation might need to be varied in the future, and these symbols, if necessary, should be part of package main, having a separate package just to define an interface is unnecessary. If you need to vary the notification implementation later then add in the interface then. An interface definition should be an input in the same package.
Config is too general of a package name. These symbols should also be part of package main. This is another case where the interface is defined but not consumed.
Packages shouldn't be used for application structuring like you have with config. Packages should be made when portability between projects is possible or another package main is needed.
Often Go tools don’t have any text output unless there’s an error. Perhaps a flag could surround the watched files print?
This seems like it could be a useful part of a development workflow.
Matt