diff --git a/Makefile b/Makefile index 9b9d24f..cf8d743 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ MANDIR?=$(PREFIX)/share/man GO?=go GOFLAGS?= LDFLAGS+=-X main.Version=$(VERSION) +LDFLAGS+=-X git.sr.ht/~rjarry/aerc/config.shareDir=$(SHAREDIR) GOSRC!=find * -name '*.go' GOSRC+=go.mod go.sum diff --git a/README.md b/README.md index e562c23..fabed0c 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,25 @@ To install aerc locally: # make install +By default, aerc will install config files to directories under `/usr/local/aerc`, +and will search for templates and stylesets in these locations in order: + +- `${XDG_CONFIG_HOME:-~/.config}/aerc` +- `${XDG_DATA_HOME:-~/.local/share}/aerc` +- `/usr/local/share/aerc` +- `/usr/share/aerc` + +At build time it is possible to add an extra location to this list and to use +that location as the default install location for config files by setting the +`PREFIX` option like so: + + # make PREFIX=/custom/location + # make install PREFIX=/custom/location + +This will install templates and other config files to `/custom/location/share/aerc`, +and man pages to `/custom/location/share/man`. This extra location will have lower +priority than the XDG locations but higher than the fixed paths. + ## Contribution Quick Start Anyone can contribute to aerc. First you need to clone the repository and build diff --git a/config/aerc.conf b/config/aerc.conf index 631a566..a7628e3 100644 --- a/config/aerc.conf +++ b/config/aerc.conf @@ -105,8 +105,8 @@ next-message-on-delete=true # list of directories. If this is unset or if a styleset cannot be found, the # following paths will be used as a fallback in that order: # -# ~/.config/aerc/stylesets -# ~/.local/share/aerc/stylesets +# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets +# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets # /usr/local/share/aerc/stylesets # /usr/share/aerc/stylesets # @@ -251,8 +251,8 @@ new-email= # list of directories. If this is unset or if a template cannot be found, the # following paths will be used as a fallback in that order: # -# ~/.config/aerc/templates -# ~/.local/share/aerc/templates +# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates +# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates # /usr/local/share/aerc/templates # /usr/share/aerc/templates # diff --git a/config/config.go b/config/config.go index d2512d2..f5d43ec 100644 --- a/config/config.go +++ b/config/config.go @@ -297,13 +297,38 @@ func parseCredential(cred, command string) (string, error) { return u.String(), nil } -var defaultDirs []string = []string{ - path.Join(xdg.ConfigHome(), "aerc"), - path.Join(xdg.DataHome(), "aerc"), - "/usr/local/share/aerc", - "/usr/share/aerc", +// Set at build time +var shareDir string + +func buildDefaultDirs() []string { + var defaultDirs []string + + prefixes := []string{ + xdg.ConfigHome(), + xdg.DataHome(), + } + + // Add XDG_CONFIG_HOME and XDG_DATA_HOME + for _, v := range prefixes { + if v != "" { + defaultDirs = append(defaultDirs, path.Join(v, "aerc")) + } + } + + // Add custom buildtime shareDir + if shareDir != "" && shareDir != "/usr/local/share/aerc" { + defaultDirs = append(defaultDirs, shareDir) + } + + // Add fixed fallback locations + defaultDirs = append(defaultDirs, "/usr/local/share/aerc") + defaultDirs = append(defaultDirs, "/usr/share/aerc") + + return defaultDirs } +var searchDirs = buildDefaultDirs() + func installTemplate(root, name string) error { var err error if _, err = os.Stat(root); os.IsNotExist(err) { @@ -313,7 +338,7 @@ func installTemplate(root, name string) error { } } var data []byte - for _, dir := range defaultDirs { + for _, dir := range searchDirs { data, err = ioutil.ReadFile(path.Join(dir, name)) if err == nil { break @@ -464,7 +489,7 @@ func (config *AercConfig) LoadConfig(file *ini.File) error { } // append default paths to template-dirs and styleset-dirs - for _, dir := range defaultDirs { + for _, dir := range searchDirs { config.Ui.StyleSetDirs = append( config.Ui.StyleSetDirs, path.Join(dir, "stylesets"), ) diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index ae8ce1b..9e8451f 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -219,8 +219,8 @@ These options are configured in the *[ui]* section of aerc.conf. be found, the following paths will be used as a fallback in that order: ``` - ~/.config/aerc/stylesets - ~/.local/share/aerc/stylesets + ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets + ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets /usr/local/share/aerc/stylesets /usr/share/aerc/stylesets ``` @@ -417,8 +417,8 @@ These options are configured in the *[templates]* section of aerc.conf. be found, the following paths will be used as a fallback in that order: ``` - ~/.config/aerc/templates - ~/.local/share/aerc/templates + ${XDG_CONFIG_HOME:-~/.config}/aerc/templates + ${XDG_DATA_HOME:-~/.local/share}/aerc/templates /usr/local/share/aerc/templates /usr/share/aerc/templates ```