Files
yay/pkg/settings/dirs.go
T
JoandCopilot 3e3d5aa111 feat(ini): support ini config (#2774)
* support ini config

* support user ini config

* Update pkg/settings/ini.go

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-30 16:07:24 +01:00

91 lines
2.5 KiB
Go

package settings
import (
"os"
"path/filepath"
)
const (
configFileName string = "config.json" // configFileName holds the name of the config file.
iniConfigFileName string = "yay.conf" // iniConfigFileName holds the name of the INI config file.
vcsFileName string = "vcs.json" // vcsFileName holds the name of the vcs file.
completionFileName string = "completion.cache"
systemdCache string = "/var/cache/yay" // systemd should handle cache creation
)
func GetConfigPath() string {
if configHome := os.Getenv("XDG_CONFIG_HOME"); configHome != "" {
configDir := filepath.Join(configHome, "yay")
if err := initDir(configDir); err == nil {
return filepath.Join(configDir, configFileName)
}
}
if configHome := os.Getenv("HOME"); configHome != "" {
configDir := filepath.Join(configHome, ".config", "yay")
if err := initDir(configDir); err == nil {
return filepath.Join(configDir, configFileName)
}
}
return ""
}
// GetINIConfigPath returns the path to the user's INI config file (yay.conf).
// This is used for both loading (with priority over JSON) and saving.
func GetINIConfigPath() string {
if configHome := os.Getenv("XDG_CONFIG_HOME"); configHome != "" {
configDir := filepath.Join(configHome, "yay")
if err := initDir(configDir); err == nil {
return filepath.Join(configDir, iniConfigFileName)
}
}
if configHome := os.Getenv("HOME"); configHome != "" {
configDir := filepath.Join(configHome, ".config", "yay")
if err := initDir(configDir); err == nil {
return filepath.Join(configDir, iniConfigFileName)
}
}
return ""
}
func getCacheHome() (string, error) {
uid := os.Geteuid()
if cacheHome := os.Getenv("XDG_CACHE_HOME"); cacheHome != "" && uid != 0 {
cacheDir := filepath.Join(cacheHome, "yay")
if err := initDir(cacheDir); err == nil {
return cacheDir, nil
}
}
if cacheHome := os.Getenv("HOME"); cacheHome != "" && uid != 0 {
cacheDir := filepath.Join(cacheHome, ".cache", "yay")
if err := initDir(cacheDir); err == nil {
return cacheDir, nil
}
}
if uid == 0 && os.Getenv("SUDO_USER") == "" && os.Getenv("DOAS_USER") == "" {
return systemdCache, nil // Don't create directory if systemd-run takes care of it
}
tmpDir := filepath.Join(os.TempDir(), "yay")
return tmpDir, initDir(tmpDir)
}
func initDir(dir string) error {
if _, err := os.Stat(dir); os.IsNotExist(err) {
if err = os.MkdirAll(dir, 0o755); err != nil {
return &ErrRuntimeDir{inner: err, dir: dir}
}
} else if err != nil {
return err
}
return nil
}