aboutsummaryrefslogtreecommitdiffstats
path: root/config/config.go
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2022-02-19 14:06:57 +0100
committerRobin Jarry <robin@jarry.cc>2022-02-19 15:24:55 +0100
commitbb0f1801402e98266d2554a5f002dc8ce0419808 (patch)
treef1100f9abb31293895b58ce7522ebe73e5262073 /config/config.go
parent05ad96a30cb8ea17970c84ea7c72f8f3def5afa5 (diff)
downloadaerc-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/config.go')
-rw-r--r--config/config.go66
1 files changed, 45 insertions, 21 deletions
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 {