aerc

Working clone of aerc-mail.org
git clone git://git.danielmoch.com/aerc.git
Log | Files | Refs | README | LICENSE

commit f42724caf3b374df0fa4eb170b3527cd20814eed
parent 80704f242206e56d4c07669a5ca42827c1d59b59
Author: Drew DeVault <sir@cmpwn.com>
Date:   Wed, 22 May 2019 12:35:44 -0400

Install default configs to XDG config if not found

Diffstat:
MMakefile | 22+++++++++++++---------
Maerc.go | 7++++++-
Mconfig/config.go | 38++++++++++++++++++++++++++++++++++----
3 files changed, 53 insertions(+), 14 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,7 +1,15 @@ +PREFIX?=/usr/local +_INSTDIR=$(DESTDIR)$(PREFIX) +BINDIR?=$(_INSTDIR)/bin +SHAREDIR?=$(_INSTDIR)/share/aerc +MANDIR?=$(_INSTDIR)/share/man GOFLAGS?= aerc: - go build $(GOFLAGS) -o aerc + go build $(GOFLAGS) \ + -ldflags "-X main.Prefix=$(PREFIX)" \ + -ldflags "-X main.ShareDir=$(SHAREDIR)" \ + -o aerc %.1: doc/%.1.scd scdoc < $< > $@ @@ -19,17 +27,13 @@ DOCS := \ aerc-smtp.5 \ aerc-tutorial.7 -all: aerc $(DOCS) +doc: $(DOCS) + +all: aerc doc clean: rm -f *.1 *.5 aerc -PREFIX?=/usr/local -_INSTDIR=$(DESTDIR)$(PREFIX) -BINDIR?=$(_INSTDIR)/bin -SHAREDIR?=$(_INSTDIR)/share/aerc -MANDIR?=$(_INSTDIR)/share/man - install: all mkdir -p $(BINDIR) $(MANDIR)/man1 $(MANDIR)/man5 \ $(SHAREDIR) $(SHAREDIR)/filters @@ -47,4 +51,4 @@ install: all .DEFAULT_GOAL := all -.PHONY: aerc clean install +.PHONY: aerc all doc clean install diff --git a/aerc.go b/aerc.go @@ -47,6 +47,11 @@ func getCommands(selected libui.Drawable) []*commands.Commands { } } +var ( + Prefix string + ShareDir string +) + func main() { var ( logOut io.Writer @@ -60,7 +65,7 @@ func main() { logger = log.New(logOut, "", log.LstdFlags) logger.Println("Starting up aerc") - conf, err := config.LoadConfig(nil) + conf, err := config.LoadConfig(nil, ShareDir) if err != nil { fmt.Printf("Failed to load config: %v\n", err) os.Exit(1) diff --git 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,