aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/aerc.conf (renamed from config/aerc.conf.in)29
-rw-r--r--config/config.go66
2 files changed, 65 insertions, 30 deletions
diff --git a/config/aerc.conf.in b/config/aerc.conf
index 98cd679c..2c928f69 100644
--- a/config/aerc.conf.in
+++ b/config/aerc.conf
@@ -96,10 +96,16 @@ sort=
next-message-on-delete=true
# The directories where the stylesets are stored. It takes a colon-separated
-# list of directories.
+# 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:
#
-# default: @SHAREDIR@/stylesets/
-stylesets-dirs=@SHAREDIR@/stylesets/
+# ~/.config/aerc/stylesets
+# ~/.local/share/aerc/stylesets
+# /usr/local/share/aerc/stylesets
+# /usr/share/aerc/stylesets
+#
+# default: ""
+stylesets-dirs=
# Uncomment to use box-drawing characters for vertical and horizontal borders.
#
@@ -215,9 +221,8 @@ reply-to-self=true
# You can also match on non-mimetypes, by prefixing with the header to match
# against (non-case-sensitive) and a comma, e.g. subject,text will match a
# subject which contains "text". Use header,~regex to match against a regex.
-subject,~^\[PATCH=awk -f @SHAREDIR@/filters/hldiff
-#text/html=@SHAREDIR@/filters/html
-text/*=awk -f @SHAREDIR@/filters/plaintext
+#subject,~^\[PATCH=colordiff
+#text/html=pandoc -f html -t plain
#image/*=catimg -w $(tput cols) -
[triggers]
@@ -236,10 +241,16 @@ new-email=
#
# The directories where the templates are stored. It takes a colon-separated
-# list of directories.
+# 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
+# /usr/local/share/aerc/templates
+# /usr/share/aerc/templates
#
-# default: @SHAREDIR@/templates/
-template-dirs=@SHAREDIR@/templates/
+# default: ""
+template-dirs=
# The default template to be used for new messages.
#
diff --git a/config/config.go b/config/config.go
index 185a14c0..f730fe45 100644
--- a/config/config.go
+++ b/config/config.go
@@ -296,14 +296,28 @@ func parseCredential(cred, command string) (string, error) {
return u.String(), nil
}
-func installTemplate(root, sharedir, name string) error {
- if _, err := os.Stat(root); os.IsNotExist(err) {
- err := os.MkdirAll(root, 0755)
+var defaultDirs []string = []string{
+ path.Join(xdg.ConfigHome(), "aerc"),
+ path.Join(xdg.DataHome(), "aerc"),
+ "/usr/local/share/aerc",
+ "/usr/share/aerc",
+}
+
+func installTemplate(root, name string) error {
+ var err error
+ if _, err = os.Stat(root); os.IsNotExist(err) {
+ err = os.MkdirAll(root, 0755)
if err != nil {
return err
}
}
- data, err := ioutil.ReadFile(path.Join(sharedir, name))
+ var data []byte
+ for _, dir := range defaultDirs {
+ data, err = ioutil.ReadFile(path.Join(dir, name))
+ if err == nil {
+ break
+ }
+ }
if err != nil {
return err
}
@@ -446,20 +460,30 @@ func (config *AercConfig) LoadConfig(file *ini.File) error {
if templateDirs != "" {
config.Templates.TemplateDirs = strings.Split(templateDirs, ":")
}
- for key, val := range templatesSec.KeysHash() {
- if key == "template-dirs" {
- continue
- }
- // we want to fail during startup if the templates are not ok
- // hence we do a dummy execute here
- _, err := templates.ParseTemplateFromFile(
- val, config.Templates.TemplateDirs, templates.DummyData())
- if err != nil {
- return err
- }
- }
}
+ // append default paths to template-dirs and styleset-dirs
+ for _, dir := range defaultDirs {
+ config.Ui.StyleSetDirs = append(
+ config.Ui.StyleSetDirs, path.Join(dir, "stylesets"),
+ )
+ config.Templates.TemplateDirs = append(
+ config.Templates.TemplateDirs, path.Join(dir, "templates"),
+ )
+ }
+
+ // we want to fail during startup if the templates are not ok
+ // hence we do dummy executes here
+ t := config.Templates
+ if err := templates.CheckTemplate(t.NewMessage, t.TemplateDirs); err != nil {
+ return err
+ }
+ if err := templates.CheckTemplate(t.QuotedReply, t.TemplateDirs); err != nil {
+ return err
+ }
+ if err := templates.CheckTemplate(t.Forwards, t.TemplateDirs); err != nil {
+ return err
+ }
if err := config.Ui.loadStyleSet(
config.Ui.StyleSetDirs); err != nil {
return err
@@ -506,7 +530,7 @@ func validateBorderChars(section *ini.Section, config *UIConfig) error {
return nil
}
-func LoadConfigFromFile(root *string, sharedir string, logger *log.Logger) (*AercConfig, error) {
+func LoadConfigFromFile(root *string, logger *log.Logger) (*AercConfig, error) {
if root == nil {
_root := path.Join(xdg.ConfigHome(), "aerc")
root = &_root
@@ -519,7 +543,7 @@ func LoadConfigFromFile(root *string, sharedir string, logger *log.Logger) (*Aer
// if it doesn't exist copy over the template, then load
if _, err := os.Stat(filename); errors.Is(err, os.ErrNotExist) {
- if err := installTemplate(*root, sharedir, "aerc.conf"); err != nil {
+ if err := installTemplate(*root, "aerc.conf"); err != nil {
return nil, err
}
}
@@ -572,7 +596,7 @@ func LoadConfigFromFile(root *string, sharedir string, logger *log.Logger) (*Aer
NextMessageOnDelete: true,
CompletionDelay: 250 * time.Millisecond,
CompletionPopovers: true,
- StyleSetDirs: []string{path.Join(sharedir, "stylesets")},
+ StyleSetDirs: []string{},
StyleSetName: "default",
// border defaults
BorderCharVertical: ' ',
@@ -602,7 +626,7 @@ func LoadConfigFromFile(root *string, sharedir string, logger *log.Logger) (*Aer
},
Templates: TemplateConfig{
- TemplateDirs: []string{path.Join(sharedir, "templates")},
+ TemplateDirs: []string{},
NewMessage: "new_message",
QuotedReply: "quoted_reply",
Forwards: "forward_as_body",
@@ -636,7 +660,7 @@ func LoadConfigFromFile(root *string, sharedir string, logger *log.Logger) (*Aer
filename = path.Join(*root, "binds.conf")
binds, err := ini.Load(filename)
if err != nil {
- if err := installTemplate(*root, sharedir, "binds.conf"); err != nil {
+ if err := installTemplate(*root, "binds.conf"); err != nil {
return nil, err
}
if binds, err = ini.Load(filename); err != nil {