aboutsummaryrefslogtreecommitdiff
path: root/datadir
diff options
context:
space:
mode:
Diffstat (limited to 'datadir')
-rw-r--r--datadir/datadir.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/datadir/datadir.go b/datadir/datadir.go
new file mode 100644
index 0000000..9019e5d
--- /dev/null
+++ b/datadir/datadir.go
@@ -0,0 +1,48 @@
+// data directory
+package datadir
+
+import (
+ "errors"
+ "io/fs"
+ "os"
+ "path/filepath"
+)
+
+// Get data directory path.
+func DataDir() (string, error) {
+ var dir string
+
+ // check environment
+ if val, ok := os.LookupEnv("CVEZ_DATA_DIR"); ok {
+ return val, nil
+ }
+
+ // get config dir
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ return dir, err
+ }
+
+ // build path to data directory in config dir
+ dir = filepath.Join(configDir, "cvez")
+ if _, err = os.Stat(dir); err != nil {
+ if errors.Is(err, fs.ErrNotExist) {
+ // create data directory
+ return dir, os.MkdirAll(dir, 0700)
+ } else {
+ // return error
+ return "", err
+ }
+ } else {
+ return dir, nil
+ }
+}
+
+// Build path to file in cvez data directory.
+func Join(args ...string) (string, error) {
+ if dir, err := DataDir(); err != nil {
+ return "", err
+ } else {
+ return filepath.Join(dir, filepath.Join(args...)), nil
+ }
+}