package config import ( "github.com/adrg/xdg" "github.com/pelletier/go-toml" "os" "path/filepath" ) var confPath string var Conf *Config var DefaultConf *Config func init() { confPath = filepath.Join(xdg.ConfigHome, "<@var(context.project.name)>", "config.toml") Conf = &Config{} DefaultConf = &Config{ Server: Server{ Host: "127.0.0.1", Port: 8080, FrontendUrls: []string{"http://localhost:5173"}, }, Database: Database{ User: "pp", Password: "<@var(context.project.name)>", Host: "127.0.0.1", Port: 5432, Name: "<@var(context.project.name)>", }, } } func Load() error { confContent, err := os.ReadFile(confPath) if err != nil { return err } return toml.Unmarshal(confContent, Conf) } func Write(config Config) error { confContent, err := toml.Marshal(config) if err != nil { return err } dir := filepath.Dir(confPath) if err := os.MkdirAll(dir, 0755); err != nil { return err } if err := os.WriteFile(confPath, confContent, 0644); err != nil { return err } if err := Load(); err != nil { return err } return nil } type Server struct { Host string Port int FrontendUrls []string } type Database struct { User string Password string Host string Port int Name string } type Config struct { Server Server Database Database }