diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-11 02:52:32 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-11 04:56:42 +0900 |
| commit | e99d7affb0c128fa82722f9b3d79c99b5e5918cd (patch) | |
| tree | 387e08d6c4363d8b9e0462f069c140fbdb15c917 /cmd/hpkg/paths.go | |
| parent | 41ac2be9658b49c68cb793f3a6f0c5932d82e1c2 (diff) | |
container: use absolute for pathname
This is simultaneously more efficient and less error-prone. This change caused minor API changes in multiple other packages.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd/hpkg/paths.go')
| -rw-r--r-- | cmd/hpkg/paths.go | 82 |
1 files changed, 48 insertions, 34 deletions
diff --git a/cmd/hpkg/paths.go b/cmd/hpkg/paths.go index b7cc926a..095c24e5 100644 --- a/cmd/hpkg/paths.go +++ b/cmd/hpkg/paths.go @@ -4,7 +4,6 @@ import ( "log" "os" "os/exec" - "path" "strconv" "sync/atomic" @@ -13,19 +12,34 @@ import ( "hakurei.app/internal/hlog" ) +const bash = "bash" + var ( - dataHome string + dataHome *container.Absolute ) func init() { // dataHome - if p, ok := os.LookupEnv("HAKUREI_DATA_HOME"); ok { - dataHome = p + if a, err := container.NewAbs(os.Getenv("HAKUREI_DATA_HOME")); err == nil { + dataHome = a } else { - dataHome = container.FHSVarLib + "hakurei/" + strconv.Itoa(os.Getuid()) + dataHome = container.AbsFHSVarLib.Append("hakurei/" + strconv.Itoa(os.Getuid())) } } +var ( + pathBin = container.AbsFHSRoot.Append("bin") + + pathNix = container.MustAbs("/nix/") + pathNixStore = pathNix.Append("store/") + pathCurrentSystem = container.AbsFHSRun.Append("current-system") + pathSwBin = pathCurrentSystem.Append("sw/bin/") + pathShell = pathSwBin.Append(bash) + + pathData = container.MustAbs("/data") + pathDataData = pathData.Append("data") +) + func lookPath(file string) string { if p, err := exec.LookPath(file); err != nil { log.Fatalf("%s: command not found", file) @@ -51,52 +65,52 @@ func mustRun(name string, arg ...string) { type appPathSet struct { // ${dataHome}/${id} - baseDir string + baseDir *container.Absolute // ${baseDir}/app - metaPath string + metaPath *container.Absolute // ${baseDir}/files - homeDir string + homeDir *container.Absolute // ${baseDir}/cache - cacheDir string + cacheDir *container.Absolute // ${baseDir}/cache/nix - nixPath string + nixPath *container.Absolute } func pathSetByApp(id string) *appPathSet { pathSet := new(appPathSet) - pathSet.baseDir = path.Join(dataHome, id) - pathSet.metaPath = path.Join(pathSet.baseDir, "app") - pathSet.homeDir = path.Join(pathSet.baseDir, "files") - pathSet.cacheDir = path.Join(pathSet.baseDir, "cache") - pathSet.nixPath = path.Join(pathSet.cacheDir, "nix") + pathSet.baseDir = dataHome.Append(id) + pathSet.metaPath = pathSet.baseDir.Append("app") + pathSet.homeDir = pathSet.baseDir.Append("files") + pathSet.cacheDir = pathSet.baseDir.Append("cache") + pathSet.nixPath = pathSet.cacheDir.Append("nix") return pathSet } func appendGPUFilesystem(config *hst.Config) { - config.Container.Filesystem = append(config.Container.Filesystem, []*hst.FilesystemConfig{ + config.Container.Filesystem = append(config.Container.Filesystem, []hst.FilesystemConfig{ // flatpak commit 763a686d874dd668f0236f911de00b80766ffe79 - {Src: "/dev/dri", Device: true}, + {Src: container.AbsFHSDev.Append("dri"), Device: true}, // mali - {Src: "/dev/mali", Device: true}, - {Src: "/dev/mali0", Device: true}, - {Src: "/dev/umplock", Device: true}, + {Src: container.AbsFHSDev.Append("mali"), Device: true}, + {Src: container.AbsFHSDev.Append("mali0"), Device: true}, + {Src: container.AbsFHSDev.Append("umplock"), Device: true}, // nvidia - {Src: "/dev/nvidiactl", Device: true}, - {Src: "/dev/nvidia-modeset", Device: true}, + {Src: container.AbsFHSDev.Append("nvidiactl"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia-modeset"), Device: true}, // nvidia OpenCL/CUDA - {Src: "/dev/nvidia-uvm", Device: true}, - {Src: "/dev/nvidia-uvm-tools", Device: true}, + {Src: container.AbsFHSDev.Append("nvidia-uvm"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia-uvm-tools"), Device: true}, // flatpak commit d2dff2875bb3b7e2cd92d8204088d743fd07f3ff - {Src: "/dev/nvidia0", Device: true}, {Src: "/dev/nvidia1", Device: true}, - {Src: "/dev/nvidia2", Device: true}, {Src: "/dev/nvidia3", Device: true}, - {Src: "/dev/nvidia4", Device: true}, {Src: "/dev/nvidia5", Device: true}, - {Src: "/dev/nvidia6", Device: true}, {Src: "/dev/nvidia7", Device: true}, - {Src: "/dev/nvidia8", Device: true}, {Src: "/dev/nvidia9", Device: true}, - {Src: "/dev/nvidia10", Device: true}, {Src: "/dev/nvidia11", Device: true}, - {Src: "/dev/nvidia12", Device: true}, {Src: "/dev/nvidia13", Device: true}, - {Src: "/dev/nvidia14", Device: true}, {Src: "/dev/nvidia15", Device: true}, - {Src: "/dev/nvidia16", Device: true}, {Src: "/dev/nvidia17", Device: true}, - {Src: "/dev/nvidia18", Device: true}, {Src: "/dev/nvidia19", Device: true}, + {Src: container.AbsFHSDev.Append("nvidia0"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia1"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia2"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia3"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia4"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia5"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia6"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia7"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia8"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia9"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia10"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia11"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia12"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia13"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia14"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia15"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia16"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia17"), Device: true}, + {Src: container.AbsFHSDev.Append("nvidia18"), Device: true}, {Src: container.AbsFHSDev.Append("nvidia19"), Device: true}, }...) } |
