package config import ( "os" "path/filepath" "pulsegate-gui/internal/models" "gopkg.in/yaml.v3" ) func DefaultPath() string { configDir, err := os.UserConfigDir() if err != nil { home, _ := os.UserHomeDir() return filepath.Join(home, ".config", "pulsegate", "config.yaml") } return filepath.Join(configDir, "pulsegate", "config.yaml") } func EnsureExists(path string) error { if _, err := os.Stat(path); err == nil { return nil } if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil { return err } cfg := models.AppConfig{ Settings: models.Settings{ Theme: "neon-green", Terminal: models.TerminalSettings{ Term: "xterm-256color", EnableKittyFix: true, }, }, Servers: []models.Server{ { Name: "Example Server", Host: "10.0.0.10", User: "root", Port: 22, Group: "Homelab", Auth: "key", Key: "~/.ssh/id_ed25519", KittyFix: true, }, }, QuickCommands: []models.QuickCommand{ {Name: "Disk Usage", Command: "df -h"}, {Name: "RAM Usage", Command: "free -h"}, {Name: "Uptime", Command: "uptime"}, }, } return Save(path, cfg) } func Load(path string) (models.AppConfig, error) { var cfg models.AppConfig data, err := os.ReadFile(path) if err != nil { return cfg, err } if err := yaml.Unmarshal(data, &cfg); err != nil { return cfg, err } normalize(&cfg) return cfg, nil } func Save(path string, cfg models.AppConfig) error { normalize(&cfg) data, err := yaml.Marshal(&cfg) if err != nil { return err } if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil { return err } return os.WriteFile(path, data, 0600) } func normalize(cfg *models.AppConfig) { if cfg.Settings.Theme == "" { cfg.Settings.Theme = "neon-green" } if cfg.Settings.Terminal.Term == "" { cfg.Settings.Terminal.Term = "xterm-256color" } for i := range cfg.Servers { if cfg.Servers[i].Port == 0 { cfg.Servers[i].Port = 22 } if cfg.Servers[i].Auth == "" { cfg.Servers[i].Auth = "key" } } }