57 lines
1.4 KiB
Go
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
|
|
}
|