package main
import "encoding/json"
import "fmt"
import "os"
import "path/filepath"
type Config struct {
Host string `json:"host"`
ApiKey string `json:"api_key"`
}
func configPath() string {
home, err := os.UserHomeDir()
if err != nil {
return ""
}
return filepath.Join(home, ".config", "okg", "config.json")
}
func loadConfig() (*Config, error) {
c := &Config{}
// Load from file.
path := configPath()
if path != "" {
data, err := os.ReadFile(path)
if err == nil {
json.Unmarshal(data, c)
}
}
// Env overrides.
if v := os.Getenv("OKG_HOST"); v != "" {
c.Host = v
}
if v := os.Getenv("KLEX_API_KEY"); v != "" {
c.ApiKey = v
}
// Defaults.
if c.Host == "" {
c.Host = "http://localhost:42069"
}
return c, nil
}
func saveConfig(c *Config) error {
path := configPath()
if path == "" {
return fmt.Errorf("cannot determine home directory")
}
dir := filepath.Dir(path)
if err := os.MkdirAll(dir, 0700); err != nil {
return fmt.Errorf("mkdir %s: %v", dir, err)
}
data, err := json.MarshalIndent(c, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, data, 0600)
}