dirs.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package settings
  2. import (
  3. "os"
  4. "path/filepath"
  5. )
  6. // configFileName holds the name of the config file.
  7. const configFileName string = "config.json"
  8. // vcsFileName holds the name of the vcs file.
  9. const vcsFileName string = "vcs.json"
  10. const completionFileName string = "completion.cache"
  11. func getConfigPath() string {
  12. if configHome := os.Getenv("XDG_CONFIG_HOME"); configHome != "" {
  13. configDir := filepath.Join(configHome, "yay")
  14. if err := initDir(configDir); err == nil {
  15. return filepath.Join(configDir, configFileName)
  16. }
  17. }
  18. if configHome := os.Getenv("HOME"); configHome != "" {
  19. configDir := filepath.Join(configHome, ".config", "yay")
  20. if err := initDir(configDir); err == nil {
  21. return filepath.Join(configDir, configFileName)
  22. }
  23. }
  24. return ""
  25. }
  26. func getCacheHome() string {
  27. uid := os.Geteuid()
  28. if cacheHome := os.Getenv("XDG_CACHE_HOME"); cacheHome != "" && uid != 0 {
  29. cacheDir := filepath.Join(cacheHome, "yay")
  30. if err := initDir(cacheDir); err == nil {
  31. return cacheDir
  32. }
  33. }
  34. if cacheHome := os.Getenv("HOME"); cacheHome != "" && uid != 0 {
  35. cacheDir := filepath.Join(cacheHome, ".cache", "yay")
  36. if err := initDir(cacheDir); err == nil {
  37. return cacheDir
  38. }
  39. }
  40. if uid == 0 && os.Getenv("SUDO_USER") == "" && os.Getenv("DOAS_USER") == "" {
  41. return "/var/cache/yay" // Don't create directory if systemd-run takes care of it
  42. }
  43. return os.TempDir()
  44. }
  45. func initDir(dir string) error {
  46. if _, err := os.Stat(dir); os.IsNotExist(err) {
  47. if err = os.MkdirAll(dir, 0o755); err != nil {
  48. return &ErrRuntimeDir{inner: err, dir: dir}
  49. }
  50. } else if err != nil {
  51. return err
  52. }
  53. return nil
  54. }