code: func (c *commandeer) newWatcher(dirList ...string) (*watcher.Batcher, error) {
  	if runtime.GOOS == "darwin" {
  		tweakLimit()
  	}
  
  	staticSyncer, err := newStaticSyncer(c)
  	if err != nil {
  		return nil, err
  	}
  
  	watcher, err := watcher.New(1 * time.Second)
  
  	if err != nil {
  		return nil, err
  	}
  
  	for _, d := range dirList {
  		if d != "" {
  			_ = watcher.Add(d)
  		}
  	}
  
  	// Identifies changes to config (config.toml) files.
  	configSet := make(map[string]bool)
  
  	c.logger.FEEDBACK.Println("Watching for config changes in", strings.Join(c.configFiles, ", "))
  	for _, configFile := range c.configFiles {
  		watcher.Add(configFile)
  		configSet[configFile] = true
  	}
  
  	go func() {
  		for {
  			select {
  			case evs := <-watcher.Events:
  				c.handleEvents(watcher, staticSyncer, evs, configSet)
  				if c.showErrorInBrowser && c.errCount() > 0 {
  					// Need to reload browser to show the error
  					livereload.ForceRefresh()
  				}
  			case err := <-watcher.Errors:
  				if err != nil {
  					c.logger.ERROR.Println("Error while watching:", err)
  				}
  			}
  		}
  	}()
  
  	return watcher, nil
  }
docs: // newWatcher creates a new watcher to watch filesystem events.