aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/paths.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/app/paths.go')
-rw-r--r--internal/app/paths.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/internal/app/paths.go b/internal/app/paths.go
new file mode 100644
index 00000000..3316a22e
--- /dev/null
+++ b/internal/app/paths.go
@@ -0,0 +1,36 @@
+package app
+
+import (
+ "strconv"
+
+ "hakurei.app/container"
+ "hakurei.app/hst"
+)
+
+// CopyPaths populates a [hst.Paths] struct.
+func CopyPaths(v *hst.Paths, userid int) { copyPaths(direct{}, v, userid) }
+
+// copyPaths populates a [hst.Paths] struct.
+func copyPaths(k syscallDispatcher, v *hst.Paths, userid int) {
+ const xdgRuntimeDir = "XDG_RUNTIME_DIR"
+
+ if tempDir, err := container.NewAbs(k.tempdir()); err != nil {
+ k.fatalf("invalid TMPDIR: %v", err)
+ } else {
+ v.TempDir = tempDir
+ }
+
+ v.SharePath = v.TempDir.Append("hakurei." + strconv.Itoa(userid))
+ k.verbosef("process share directory at %q", v.SharePath)
+
+ r, _ := k.lookupEnv(xdgRuntimeDir)
+ if a, err := container.NewAbs(r); err != nil {
+ // fall back to path in share since hakurei has no hard XDG dependency
+ v.RunDirPath = v.SharePath.Append("run")
+ v.RuntimePath = v.RunDirPath.Append("compat")
+ } else {
+ v.RuntimePath = a
+ v.RunDirPath = v.RuntimePath.Append("hakurei")
+ }
+ k.verbosef("runtime directory at %q", v.RunDirPath)
+}