package config import ( "errors" "os" "os/user" "path/filepath" "strings" "go.wit.com/log" ) // loads your applications config file from // ~/.config//config.text func (pb *Config) Load() error { filename, err := getConfigFilenameTEXT() if err != nil { return err } _, err = SetFilename(pb, filename) if err != nil { return err } saveMu.Lock() defer saveMu.Unlock() err = loadTEXT(pb, filename) return err } func loadENV() error { if configPB != nil { log.Info("configPB already loaded") return errors.New("configPB already loaded") } filename, err := getConfigFilenameENV() if err != nil { return err } log.Info("loadENV()", filename) stuff, err := os.ReadFile(filename) if err != nil { return err } saveMu.Lock() defer saveMu.Unlock() configPB = NewConfigs() for i, line := range strings.Split(string(stuff), "\n") { line = strings.TrimSpace(line) if line == "" { continue } parts := strings.Split(line, "=") if len(parts) != 2 { log.Info("INVALID LINE:", i, line) continue } c := new(Config) c.Key = parts[0] c.Value = parts[1] configPB.Append(c) log.Printf("ENV LINE: (%v)\n", c) } return err } func getConfigFilenameENV() (string, error) { appname, err := GetAppname() // already configured by your application if err != nil { return "", err } configdir, err := getConfigDir() if err != nil { return "", err } filename := filepath.Join(configdir, appname+".ENV") return filename, nil } func getConfigFilenameTEXT() (string, error) { appname, err := GetAppname() // already configured by your application if err != nil { return "", err } configdir, err := getConfigDir() if err != nil { return "", err } filename := filepath.Join(configdir, appname+".text") return filename, nil } func GetAppname() (string, error) { if APPNAME != "" { return APPNAME, nil } return "", errors.New("your application must setup config.Init()") } func GetUsername() string { if Get("username") != "" { return Get("username") } usr, _ := user.Current() if usr.Username != "" { return usr.Username } return "notsure" // OS Idiocracy } func getCacheDir() (string, error) { if Get("cacheDir") != "" { return Get("cacheDir"), nil } cacheDir, _ := os.UserCacheDir() appname, err := GetAppname() // application should have already configured this if err != nil { return cacheDir, err } return filepath.Join(cacheDir, appname), nil } func getConfigDir() (string, error) { if Get("configDir") != "" { return Get("configDir"), nil } configDir, _ := os.UserConfigDir() appname, err := GetAppname() // application should have already configured this if err != nil { return configDir, err } return filepath.Join(configDir, appname), nil }