github.com/omnigres/cli@v0.1.4/orb/config.go (about) 1 package orb 2 3 import ( 4 "errors" 5 "github.com/charmbracelet/log" 6 "github.com/omnigres/cli/internal/fileutils" 7 "github.com/spf13/viper" 8 "os" 9 "path/filepath" 10 ) 11 12 type Config struct { 13 Orbs []OrbCfg 14 Image ImageConfig 15 path string 16 } 17 18 type OrbCfg struct { 19 Name string 20 Extensions []string 21 } 22 23 type ImageConfig struct { 24 Name string 25 Digest string `mapstructure:",omitempty"` 26 } 27 28 func NewConfig() *Config { 29 return &Config{Image: ImageConfig{Name: "ghcr.io/omnigres/omnigres-17"}} 30 } 31 32 func (c *Config) Save() (err error) { 33 if c.path != "" { 34 c.SaveAs(c.path) 35 } else { 36 err = errors.New("Config has no path") 37 } 38 return 39 } 40 func (c *Config) SaveAs(path string) (err error) { 41 v := viper.New() 42 v.SetConfigName("omnigres") 43 v.SetConfigType("yaml") 44 v.AddConfigPath(path) 45 46 v.Set("orbs", c.Orbs) 47 v.Set("image", c.Image) 48 49 err = fileutils.CreateIfNotExists(filepath.Join(path, "omnigres.yaml"), false) 50 if err != nil { 51 return 52 } 53 54 err = v.WriteConfig() 55 if err != nil { 56 return 57 } 58 return 59 } 60 61 func LoadConfig(path string) (cfg *Config, err error) { 62 v := viper.New() 63 configPath := filepath.Join(path, "omnigres.yaml") 64 log.Debug("Loading config", "path", configPath) 65 v.SetConfigFile(configPath) 66 err = v.ReadInConfig() 67 if err != nil { 68 if _, ok := err.(*os.PathError); ok { 69 log.Debug("Creating blank config") 70 cfg = NewConfig() 71 err = nil 72 return 73 } 74 return 75 } 76 77 cfg = NewConfig() 78 cfg.path = path 79 err = v.Unmarshal(cfg) 80 if err != nil { 81 return 82 } 83 return 84 }