base_dirs.go raw
1 package xdg
2
3 import (
4 "os"
5
6 "github.com/adrg/xdg/internal/pathutil"
7 )
8
9 // XDG Base Directory environment variables.
10 const (
11 envDataHome = "XDG_DATA_HOME"
12 envDataDirs = "XDG_DATA_DIRS"
13 envConfigHome = "XDG_CONFIG_HOME"
14 envConfigDirs = "XDG_CONFIG_DIRS"
15 envStateHome = "XDG_STATE_HOME"
16 envCacheHome = "XDG_CACHE_HOME"
17 envRuntimeDir = "XDG_RUNTIME_DIR"
18
19 // Non-standard.
20 envBinHome = "XDG_BIN_HOME"
21 )
22
23 type baseDirectories struct {
24 dataHome string
25 data []string
26 configHome string
27 config []string
28 stateHome string
29 cacheHome string
30 runtime string
31
32 // Non-standard.
33 binHome string
34 fonts []string
35 applications []string
36 }
37
38 func (bd baseDirectories) dataFile(relPath string) (string, error) {
39 return pathutil.Create(relPath, append([]string{bd.dataHome}, bd.data...))
40 }
41
42 func (bd baseDirectories) configFile(relPath string) (string, error) {
43 return pathutil.Create(relPath, append([]string{bd.configHome}, bd.config...))
44 }
45
46 func (bd baseDirectories) stateFile(relPath string) (string, error) {
47 return pathutil.Create(relPath, []string{bd.stateHome})
48 }
49
50 func (bd baseDirectories) cacheFile(relPath string) (string, error) {
51 return pathutil.Create(relPath, []string{bd.cacheHome})
52 }
53
54 func (bd baseDirectories) runtimeFile(relPath string) (string, error) {
55 var paths []string
56 for _, p := range pathutil.Unique([]string{bd.runtime, os.TempDir()}) {
57 if pathutil.Exists(p) {
58 paths = append(paths, p)
59 }
60 }
61 return pathutil.Create(relPath, paths)
62 }
63
64 func (bd baseDirectories) searchDataFile(relPath string) (string, error) {
65 return pathutil.Search(relPath, append([]string{bd.dataHome}, bd.data...))
66 }
67
68 func (bd baseDirectories) searchConfigFile(relPath string) (string, error) {
69 return pathutil.Search(relPath, append([]string{bd.configHome}, bd.config...))
70 }
71
72 func (bd baseDirectories) searchStateFile(relPath string) (string, error) {
73 return pathutil.Search(relPath, []string{bd.stateHome})
74 }
75
76 func (bd baseDirectories) searchCacheFile(relPath string) (string, error) {
77 return pathutil.Search(relPath, []string{bd.cacheHome})
78 }
79
80 func (bd baseDirectories) searchRuntimeFile(relPath string) (string, error) {
81 return pathutil.Search(relPath, pathutil.Unique([]string{bd.runtime, os.TempDir()}))
82 }
83