package main import ( "errors" "os" "path/filepath" ) type Conf struct { Source string Dest string } func loadConf() (*Conf, error) { source := os.Getenv("CONF_SOURCE") info, err := os.Stat(source) if err != nil { return nil, err } if !info.IsDir() { return nil, errors.New("CONF_SOURCE is not a directory") } home, err := os.UserHomeDir() if err != nil { return nil, err } return &Conf{Source: source, Dest: home}, nil } func (c *Conf) FileNames() ([]string, error) { var names []string dir := filepath.Join(c.Source, "templates") err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil } name, err := filepath.Rel(dir, path) if err != nil { return err } names = append(names, name) return nil }) if err != nil { return nil, err } return names, nil }