mirror of
https://github.com/cheat/cheat.git
synced 2024-12-18 10:45:05 +01:00
69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"path"
|
||
|
|
||
|
"github.com/mitchellh/go-homedir"
|
||
|
)
|
||
|
|
||
|
// Path returns the config file path
|
||
|
func Path(sys string) (string, error) {
|
||
|
|
||
|
var paths []string
|
||
|
|
||
|
// if CHEAT_CONFIG_PATH is set, return it
|
||
|
if os.Getenv("CHEAT_CONFIG_PATH") != "" {
|
||
|
|
||
|
// expand ~
|
||
|
expanded, err := homedir.Expand(os.Getenv("CHEAT_CONFIG_PATH"))
|
||
|
if err != nil {
|
||
|
return "", fmt.Errorf("failed to expand ~: %v", err)
|
||
|
}
|
||
|
|
||
|
return expanded, nil
|
||
|
|
||
|
// OSX config paths
|
||
|
} else if sys == "darwin" {
|
||
|
|
||
|
paths = []string{
|
||
|
path.Join(os.Getenv("XDG_CONFIG_HOME"), "/cheat/conf.yml"),
|
||
|
path.Join(os.Getenv("HOME"), ".config/cheat/conf.yml"),
|
||
|
path.Join(os.Getenv("HOME"), ".cheat/conf.yml"),
|
||
|
}
|
||
|
|
||
|
// Linux config paths
|
||
|
} else if sys == "linux" {
|
||
|
|
||
|
paths = []string{
|
||
|
path.Join(os.Getenv("XDG_CONFIG_HOME"), "/cheat/conf.yml"),
|
||
|
path.Join(os.Getenv("HOME"), ".config/cheat/conf.yml"),
|
||
|
path.Join(os.Getenv("HOME"), ".cheat/conf.yml"),
|
||
|
"/etc/cheat/conf.yml",
|
||
|
}
|
||
|
|
||
|
// Windows config paths
|
||
|
} else if sys == "windows" {
|
||
|
|
||
|
paths = []string{
|
||
|
fmt.Sprintf("%s/cheat/conf.yml", os.Getenv("APPDATA")),
|
||
|
fmt.Sprintf("%s/cheat/conf.yml", os.Getenv("PROGRAMDATA")),
|
||
|
}
|
||
|
|
||
|
// Unsupported platforms
|
||
|
} else {
|
||
|
return "", fmt.Errorf("unsupported os: %s", sys)
|
||
|
}
|
||
|
|
||
|
// check if the config file exists on any paths
|
||
|
for _, p := range paths {
|
||
|
if _, err := os.Stat(p); err == nil {
|
||
|
return p, nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// we can't find the config file if we make it this far
|
||
|
return "", fmt.Errorf("could not locate config file")
|
||
|
}
|