initial commit
This commit is contained in:
commit
d3cc6e8ec2
61
configfile.go
Normal file
61
configfile.go
Normal file
@ -0,0 +1,61 @@
|
||||
package configfile
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func Path(fileExtension string) (string, error) {
|
||||
executableName := filepath.Base(os.Args[0])
|
||||
configFileName := executableName + "." + fileExtension
|
||||
userConfigDir := UserConfigDir()
|
||||
|
||||
// try all paths in succession and use the first one that succeeded
|
||||
paths := []string{
|
||||
filepath.Join("/etc/", executableName, configFileName),
|
||||
filepath.Join("/etc/", configFileName),
|
||||
filepath.Join("etc", configFileName),
|
||||
filepath.Join(userConfigDir, executableName, configFileName),
|
||||
filepath.Join(userConfigDir, configFileName),
|
||||
filepath.Clean(configFileName),
|
||||
}
|
||||
|
||||
for _, path := range paths {
|
||||
if _, err := os.Stat(path); err != nil {
|
||||
return path, nil
|
||||
}
|
||||
}
|
||||
|
||||
for _, path := range paths {
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
f.Close()
|
||||
return path, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", errors.New("no suitable config path found")
|
||||
}
|
||||
|
||||
func UserConfigDir() string {
|
||||
cfg, ok := os.LookupEnv("XDG_CONFIG_HOME")
|
||||
if ok {
|
||||
return filepath.Clean(cfg)
|
||||
}
|
||||
|
||||
home, ok := os.LookupEnv("HOME")
|
||||
if ok {
|
||||
return filepath.Join(home, ".config")
|
||||
}
|
||||
|
||||
user, ok := os.LookupEnv("USER")
|
||||
if ok {
|
||||
if user == "root" {
|
||||
return filepath.Join("/root", ".config")
|
||||
}
|
||||
return filepath.Join("/home", user, ".config")
|
||||
}
|
||||
|
||||
return "."
|
||||
}
|
Loading…
Reference in New Issue
Block a user