diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-22 12:35:44 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-22 12:35:44 -0400 |
commit | f42724caf3b374df0fa4eb170b3527cd20814eed (patch) | |
tree | 6efdb42ce0423e25c172382565a3c317b836737b /config/config.go | |
parent | 80704f242206e56d4c07669a5ca42827c1d59b59 (diff) | |
download | aerc-f42724caf3b374df0fa4eb170b3527cd20814eed.tar.gz |
Install default configs to XDG config if not found
Diffstat (limited to 'config/config.go')
-rw-r--r-- | config/config.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/config/config.go b/config/config.go index 1019297b..1fb764b0 100644 --- a/config/config.go +++ b/config/config.go @@ -3,6 +3,7 @@ package config import ( "errors" "fmt" + "io/ioutil" "net/url" "os" "os/exec" @@ -189,7 +190,25 @@ func parseCredential(cred, command string) (string, error) { return u.String(), nil } -func LoadConfig(root *string) (*AercConfig, error) { +func installTemplate(root, sharedir, name string) 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)) + if err != nil { + return err + } + err = ioutil.WriteFile(path.Join(root, name), data, 0644) + if err != nil { + return err + } + return nil +} + +func LoadConfig(root *string, sharedir string) (*AercConfig, error) { if root == nil { _root := path.Join(xdg.ConfigHome(), "aerc") root = &_root @@ -201,7 +220,12 @@ func LoadConfig(root *string) (*AercConfig, error) { filename = path.Join(*root, "aerc.conf") file, err := ini.Load(filename) if err != nil { - return nil, err + if err := installTemplate(*root, sharedir, "aerc.conf"); err != nil { + return nil, err + } + if file, err = ini.Load(filename); err != nil { + return nil, err + } } file.NameMapper = mapName config := &AercConfig{ @@ -291,9 +315,15 @@ func LoadConfig(root *string) (*AercConfig, error) { } else { config.Accounts = accounts } - binds, err := ini.Load(path.Join(*root, "binds.conf")) + filename = path.Join(*root, "binds.conf") + binds, err := ini.Load(filename) if err != nil { - return nil, err + if err := installTemplate(*root, sharedir, "binds.conf"); err != nil { + return nil, err + } + if binds, err = ini.Load(filename); err != nil { + return nil, err + } } groups := map[string]**KeyBindings{ "default": &config.Bindings.Global, |