diff --git a/caddy.go b/caddy.go index fefe50b22..ab7c01483 100644 --- a/caddy.go +++ b/caddy.go @@ -61,11 +61,10 @@ type Config struct { Logging *Logging `json:"logging,omitempty"` // StorageRaw is a storage module that defines how/where Caddy - // stores assets (such as TLS certificates). By default, this is - // the local file system (`caddy.storage.file_system` module). - // If the `XDG_DATA_HOME` environment variable is set, then - // `$XDG_DATA_HOME/caddy` is the default folder. Otherwise, - // `$HOME/.local/share/caddy` is the default folder. + // stores assets (such as TLS certificates). The default storage + // module is `caddy.storage.file_system` (the local file system), + // and the default path + // [depends on the OS and environment](/docs/conventions#data-directory). StorageRaw json.RawMessage `json:"storage,omitempty" caddy:"namespace=caddy.storage inline_key=module"` // AppsRaw are the apps that Caddy will load and run. The diff --git a/storage.go b/storage.go index b7dcfe44f..03f769176 100644 --- a/storage.go +++ b/storage.go @@ -84,14 +84,13 @@ func homeDirUnsafe() string { // // Ref: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html func AppConfigDir() string { - basedir := os.Getenv("XDG_CONFIG_HOME") - if basedir == "" { - var err error - basedir, err = os.UserConfigDir() - if err != nil { - Log().Warn("unable to determine directory for user configuration; falling back to current directory", zap.Error(err)) - return "./caddy" - } + if basedir := os.Getenv("XDG_CONFIG_HOME"); basedir != "" { + return filepath.Join(basedir, "caddy") + } + basedir, err := os.UserConfigDir() + if err != nil { + Log().Warn("unable to determine directory for user configuration; falling back to current directory", zap.Error(err)) + return "./caddy" } subdir := "caddy" switch runtime.GOOS {