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