aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--README.md19
-rw-r--r--config/aerc.conf8
-rw-r--r--config/config.go39
-rw-r--r--doc/aerc-config.5.scd8
5 files changed, 60 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index 9b9d24f6..cf8d743c 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 e562c23a..fabed0c0 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 631a5667..a7628e39 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 d2512d2f..f5d43ec4 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 ae8ce1b8..9e8451ff 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
```