summaryrefslogtreecommitdiff
path: root/init.go
diff options
context:
space:
mode:
Diffstat (limited to 'init.go')
-rw-r--r--init.go67
1 files changed, 62 insertions, 5 deletions
diff --git a/init.go b/init.go
index a20b5d2..dd176e2 100644
--- a/init.go
+++ b/init.go
@@ -1,9 +1,15 @@
package ENV
+import (
+ "os"
+ "path/filepath"
+ "strings"
+)
+
// this is an experiment at this point to
// see how this turns out
-
-func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) error {
+// normally called by "argv" (go.wit.com/lib/protobuf/argvpb)
+func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) {
APPNAME = appname
VERSION = version
BUILDTIME = buildtime
@@ -11,13 +17,44 @@ func Init(appname, version, buildtime string, fromargv []string, goodFunc func(s
goodExit = goodFunc
badExit = badFunc
- err := loadENV()
- if err == nil {
- envPB.Init = true
+ if envPB != nil {
+ // log.Info("Init() already ran")
+ return
}
+ envPB = NewKeys()
+ envPB.Init = true
+
SetGlobal("lib/ENV", "APPNAME", APPNAME)
SetGlobal("lib/ENV", "VERSION", VERSION)
SetGlobal("lib/ENV", "BUILDTIME", BUILDTIME)
+}
+
+// if it exists, loads ~/.config/<appname>/<appname>.ENV
+func InitENV() error {
+ err := loadAppENV()
+
+ // TODO: load /usr/share/doc/<appname>.ENV
+ // TODO: load /etc/default/<appname>
+ return err
+}
+
+// if it exists, loads ~/.config/<appname>/<appname>.ENV
+func loadAppENV() error {
+ saveMu.Lock()
+ saveMu.Unlock()
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ return err
+ }
+
+ envPB.Filename = filepath.Join(configDir, APPNAME+".ENV")
+
+ data, err := os.ReadFile(envPB.Filename)
+ if err != nil {
+ return err
+ }
+
+ parseENV(string(data))
return err
}
@@ -29,3 +66,23 @@ func InitValid() bool {
}
return envPB.Init
}
+
+func parseENV(data string) {
+ // log.Info("loadENV()", filename)
+ for _, line := range strings.Split(data, "\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(Key)
+ c.Var = parts[0]
+ c.Value = parts[1]
+ envPB.Append(c)
+ // log.Printf("ENV LINE: (%v)\n", c)
+ }
+}