diff options
author | Robin Jarry <robin@jarry.cc> | 2022-02-19 14:06:57 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-02-19 15:24:55 +0100 |
commit | bb0f1801402e98266d2554a5f002dc8ce0419808 (patch) | |
tree | f1100f9abb31293895b58ce7522ebe73e5262073 /config | |
parent | 05ad96a30cb8ea17970c84ea7c72f8f3def5afa5 (diff) | |
download | aerc-bb0f1801402e98266d2554a5f002dc8ce0419808.tar.gz |
config: do not hardcode sharedir
Instead of using a static SHAREDIR at compile time, use a list of
standard paths to use at runtime for templates, config files and
stylesets.
This implies removing all default filters in the default configuration.
Replace them with basic commands. New users can configure the filters as
they wish.
Signed-off-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'config')
-rw-r--r-- | config/aerc.conf (renamed from config/aerc.conf.in) | 29 | ||||
-rw-r--r-- | config/config.go | 66 |
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 { |