package config import ( "fmt" "gitea.com/jolheiser/beaver" "github.com/BurntSushi/toml" "github.com/mitchellh/go-homedir" "os" "path" "strings" ) var ( configPath string cfg *config // Config items GPMURL string Packages []Package ) type config struct { GPMURL string `toml:"gpm-url"` Packages []Package `toml:"package"` } type Package struct { Name string `toml:"name"` URL string `toml:"url"` } // Load on init so that CLI contexts are correctly populated func init() { home, err := homedir.Dir() if err != nil { beaver.Fatalf("could not locate home directory: %v", err) } configPath = fmt.Sprintf("%s/.gpm/config.toml", home) if _, err := os.Stat(configPath); os.IsNotExist(err) { if err := os.MkdirAll(path.Dir(configPath), os.ModePerm); err != nil { beaver.Fatalf("could not create Sip home: %v", err) } if _, err := os.Create(configPath); err != nil { beaver.Fatalf("could not create Sip config: %v", err) } } if _, err := toml.DecodeFile(configPath, &cfg); err != nil { beaver.Fatalf("could not decode Sip config: %v", err) } dupe := make(map[string]bool) for _, pkg := range cfg.Packages { name := strings.ToLower(pkg.Name) if ok := dupe[name]; ok { beaver.Fatalf("duplicate package for %s", pkg.Name) } dupe[name] = true } GPMURL = cfg.GPMURL Packages = cfg.Packages } func Save() error { cfg.GPMURL = GPMURL cfg.Packages = Packages fi, err := os.Create(configPath) if err != nil { return err } defer fi.Close() if err := toml.NewEncoder(fi).Encode(cfg); err != nil { return err } return nil } func PackageMap() map[string]string { pkgs := make(map[string]string) for _, pkg := range Packages { pkgs[pkg.Name] = pkg.URL } return pkgs }