package config import ( "log" "path/filepath" "github.com/adrg/xdg" ) type DatabaseConfig struct { Socket string Host string Port int Username string Password string Database string Options string } type ServerConfig struct { Address string TemplateDir string StaticDir string } type Config struct { Database DatabaseConfig Server ServerConfig AllowRoot bool } var config = Config{ Database: DatabaseConfig{ Host: "localhost", Port: 5432, Database: "feedizer", Options: "sslmode=require", }, Server: ServerConfig{ Address: ":3000", TemplateDir: "../../templates", StaticDir: "../../static", }, } const appName = "feedizer" func Load() (*Config, error) { 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" 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 }