72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
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
|
|
}
|