package config import ( "log" "path/filepath" "github.com/adrg/xdg" ) type ServerConfig struct { Address string TemplateDir string StaticDir string } type Config struct { Database string Server ServerConfig AllowRoot bool } var config = Config{ Database: "feedizer@localhost:5432/feedizer?sslmode=require&search_path=public", Server: ServerConfig{ Address: ":3000", TemplateDir: "", StaticDir: "", }, } const appName = "feedizer" func SearchPaths() []string { numXdgDirs := len(xdg.ConfigDirs) paths := make([]string, numXdgDirs+2) for i, path := range xdg.ConfigDirs { paths[numXdgDirs-i-1] = filepath.Join(path, appName, appName+".yaml") } paths[numXdgDirs] = filepath.Join(xdg.ConfigHome, appName, appName+".yaml") paths[numXdgDirs+1] = appName + ".yaml" return paths } func Load() (*Config, error) { paths := SearchPaths() used, err := ReadFiles(paths, &config) if err != nil { return nil, err } log.Println("config: search paths are:", paths) log.Println("config: using config files:", used) envAvailable, envUsed := ReadEnv(&config, appName) log.Println("config: usable env vars:", envAvailable) log.Println("config: using env vars:", envUsed) return &config, nil }