diff options
Diffstat (limited to 'internal/app/paths.go')
| -rw-r--r-- | internal/app/paths.go | 36 |
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) +} |
