83 lines
2.3 KiB
Go
83 lines
2.3 KiB
Go
|
package configdir
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
// VERSION is the semantic version number of the configdir library.
|
||
|
const VERSION = "0.1.0"
|
||
|
|
||
|
func init() {
|
||
|
findPaths()
|
||
|
}
|
||
|
|
||
|
// Refresh will rediscover the config paths, checking current environment
|
||
|
// variables again.
|
||
|
//
|
||
|
// This function is automatically called when the program initializes. If you
|
||
|
// change the environment variables at run-time, though, you may call the
|
||
|
// Refresh() function to reevaluate the config paths.
|
||
|
func Refresh() {
|
||
|
findPaths()
|
||
|
}
|
||
|
|
||
|
// SystemConfig returns the system-wide configuration paths, with optional path
|
||
|
// components added to the end for vendor/application-specific settings.
|
||
|
func SystemConfig(folder ...string) []string {
|
||
|
if len(folder) == 0 {
|
||
|
return systemConfig
|
||
|
}
|
||
|
|
||
|
var paths []string
|
||
|
for _, root := range systemConfig {
|
||
|
p := append([]string{root}, filepath.Join(folder...))
|
||
|
paths = append(paths, filepath.Join(p...))
|
||
|
}
|
||
|
|
||
|
return paths
|
||
|
}
|
||
|
|
||
|
// LocalConfig returns the local user configuration path, with optional
|
||
|
// path components added to the end for vendor/application-specific settings.
|
||
|
func LocalConfig(folder ...string) string {
|
||
|
if len(folder) == 0 {
|
||
|
return localConfig
|
||
|
}
|
||
|
|
||
|
return filepath.Join(localConfig, filepath.Join(folder...))
|
||
|
}
|
||
|
|
||
|
// LocalCache returns the local user cache folder, with optional path
|
||
|
// components added to the end for vendor/application-specific settings.
|
||
|
func LocalCache(folder ...string) string {
|
||
|
if len(folder) == 0 {
|
||
|
return localCache
|
||
|
}
|
||
|
|
||
|
return filepath.Join(localCache, filepath.Join(folder...))
|
||
|
}
|
||
|
|
||
|
// DefaultFileMode controls the default permissions on any paths created by
|
||
|
// using MakePath.
|
||
|
var DefaultFileMode = os.FileMode(0755)
|
||
|
|
||
|
// MakePath ensures that the full path you wanted, including vendor or
|
||
|
// application-specific components, exists. You can give this the output of
|
||
|
// any of the config path functions (SystemConfig, LocalConfig or LocalCache).
|
||
|
//
|
||
|
// In the event that the path function gives multiple answers, e.g. for
|
||
|
// SystemConfig, MakePath() will only attempt to create the sub-folders on
|
||
|
// the *first* path found. If this isn't what you want, you may want to just
|
||
|
// use the os.MkdirAll() functionality directly.
|
||
|
func MakePath(paths ...string) error {
|
||
|
if len(paths) >= 1 {
|
||
|
err := os.MkdirAll(paths[0], DefaultFileMode)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|