]> git.lizzy.rs Git - micro.git/blob - internal/config/config.go
Add literate plugin support
[micro.git] / internal / config / config.go
1 package config
2
3 import (
4         "errors"
5         "os"
6
7         homedir "github.com/mitchellh/go-homedir"
8 )
9
10 var ConfigDir string
11
12 // InitConfigDir finds the configuration directory for micro according to the XDG spec.
13 // If no directory is found, it creates one.
14 func InitConfigDir(flagConfigDir string) error {
15         var e error
16
17         xdgHome := os.Getenv("XDG_CONFIG_HOME")
18         if xdgHome == "" {
19                 // The user has not set $XDG_CONFIG_HOME so we should act like it was set to ~/.config
20                 home, err := homedir.Dir()
21                 if err != nil {
22                         return errors.New("Error finding your home directory\nCan't load config files")
23                 }
24                 xdgHome = home + "/.config"
25         }
26         ConfigDir = xdgHome + "/micro"
27
28         if len(flagConfigDir) > 0 {
29                 if _, err := os.Stat(flagConfigDir); os.IsNotExist(err) {
30                         e = errors.New("Error: " + flagConfigDir + " does not exist. Defaulting to " + ConfigDir + ".")
31                 } else {
32                         ConfigDir = flagConfigDir
33                         return nil
34                 }
35         }
36
37         if _, err := os.Stat(xdgHome); os.IsNotExist(err) {
38                 // If the xdgHome doesn't exist we should create it
39                 err = os.Mkdir(xdgHome, os.ModePerm)
40                 if err != nil {
41                         return errors.New("Error creating XDG_CONFIG_HOME directory: " + err.Error())
42                 }
43         }
44
45         if _, err := os.Stat(ConfigDir); os.IsNotExist(err) {
46                 // If the micro specific config directory doesn't exist we should create that too
47                 err = os.Mkdir(ConfigDir, os.ModePerm)
48                 if err != nil {
49                         return errors.New("Error creating configuration directory: " + err.Error())
50                 }
51         }
52
53         return e
54 }