]> git.lizzy.rs Git - micro.git/blob - internal/config/config.go
Merge branch 'master' into highlight-nimscript
[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         microHome := os.Getenv("MICRO_CONFIG_HOME")
18         if microHome == "" {
19                 // The user has not set $MICRO_CONFIG_HOME so we'll try $XDG_CONFIG_HOME
20                 xdgHome := os.Getenv("XDG_CONFIG_HOME")
21                 if xdgHome == "" {
22                         // The user has not set $XDG_CONFIG_HOME so we should act like it was set to ~/.config
23                         home, err := homedir.Dir()
24                         if err != nil {
25                                 return errors.New("Error finding your home directory\nCan't load config files")
26                         }
27                         xdgHome = home + "/.config"
28                 }
29                 microHome = xdgHome + "/micro"
30         }
31         ConfigDir = microHome
32
33         if len(flagConfigDir) > 0 {
34                 if _, err := os.Stat(flagConfigDir); os.IsNotExist(err) {
35                         e = errors.New("Error: " + flagConfigDir + " does not exist. Defaulting to " + ConfigDir + ".")
36                 } else {
37                         ConfigDir = flagConfigDir
38                         return nil
39                 }
40         }
41
42         if _, err := os.Stat(microHome); os.IsNotExist(err) {
43                 // If the microHome doesn't exist we should create it
44                 err = os.Mkdir(microHome, os.ModePerm)
45                 if err != nil {
46                         return errors.New("Error creating XDG_CONFIG_HOME directory: " + err.Error())
47                 }
48         }
49
50         if _, err := os.Stat(ConfigDir); os.IsNotExist(err) {
51                 // If the micro specific config directory doesn't exist we should create that too
52                 err = os.Mkdir(ConfigDir, os.ModePerm)
53                 if err != nil {
54                         return errors.New("Error creating configuration directory: " + err.Error())
55                 }
56         }
57
58         return e
59 }