Files
wehub-resource-sync ead81af521
Deploy to GitHub Pages / deploy (push) Failing after 0s
CI / go (push) Has been cancelled
CI / build (darwin, macos-14) (push) Has been cancelled
CI / build (windows, windows-2025) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

57 lines
1.4 KiB
Go

package appdir
import (
"os"
"path/filepath"
"runtime"
)
// Dir returns the cliamp configuration directory.
//
// Resolution order:
// - CLIAMP_CONFIG_DIR (explicit override)
// - XDG_CONFIG_HOME/cliamp
// - HOME/.config/cliamp
// - on Windows: APPDATA/cliamp
// - fallback: os.UserHomeDir()/.config/cliamp
func Dir() (string, error) {
if dir, ok := os.LookupEnv("CLIAMP_CONFIG_DIR"); ok && dir != "" {
return dir, nil
}
if xdg, ok := os.LookupEnv("XDG_CONFIG_HOME"); ok && xdg != "" {
return filepath.Join(xdg, "cliamp"), nil
}
if home, ok := os.LookupEnv("HOME"); ok && home != "" {
return filepath.Join(home, ".config", "cliamp"), nil
}
if runtime.GOOS == "windows" {
if appData, ok := os.LookupEnv("APPDATA"); ok && appData != "" {
return filepath.Join(appData, "cliamp"), nil
}
}
home, err := os.UserHomeDir()
if err != nil {
return "", err
}
return filepath.Join(home, ".config", "cliamp"), nil
}
// PluginDir returns the cliamp plugin directory.
func PluginDir() (string, error) {
dir, err := Dir()
if err != nil {
return "", err
}
return filepath.Join(dir, "plugins"), nil
}
// DataDir returns the cliamp data directory (~/.local/share/cliamp), used for
// state that is not user-edited config: plugin stores, downloaded assets, etc.
func DataDir() (string, error) {
home, err := os.UserHomeDir()
if err != nil {
return "", err
}
return filepath.Join(home, ".local", "share", "cliamp"), nil
}