package config // this is an experiment at this point to // see how this turns out import ( "errors" "fmt" "os" "path/filepath" ) var configPB *Configs // these are normally what are sent from ldflags var APPNAME string var BUILDTIME string var VERSION string var argv []string func Init(appname, version, buildtime string, fromargv []string) error { APPNAME = appname VERSION = version BUILDTIME = buildtime argv = fromargv configDir, err := os.UserConfigDir() if err != nil { fmt.Println("OS isn't returning UserConfigDir()", err) return err } fullname := filepath.Join(configDir, appname, "config.text") configPB = NewConfigs() err = loadTEXT(configPB, fullname) if err == nil { return nil } if errors.Is(err, os.ErrNotExist) { // file doesn't exist, make a new file return makeNewConfigFile(appname) } if errors.Is(err, ErrEmpty) { fmt.Printf("config file size was empty. out of diskspace? %s\n", fullname) return err } fmt.Println("config.Init()", err) // panic("config") return err } func makeNewConfigFile(appname string) error { configDir, err := os.UserConfigDir() if err != nil { fmt.Println("OS isn't returning UserConfigDir()", err) return err } fullname := filepath.Join(configDir, appname, "config.text") configPB = NewConfigs() configPB.Filename = fullname newvar := new(Config) newvar.Key = "example config var" newvar.Value = "protobufs are neat" configPB.Clone(newvar) newvar.Key = "Verbose" newvar.Value = "true" configPB.Clone(newvar) // writes the config file to disk err = Save() return err }