]> git.lizzy.rs Git - micro.git/blob - internal/config/config.go
better top
[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: " + err.Error())
26                         }
27                         xdgHome = home + "/.config"
28                 }
29
30                 microHome = xdgHome + "/micro"
31         }
32         ConfigDir = microHome
33
34         if len(flagConfigDir) > 0 {
35                 if _, err := os.Stat(flagConfigDir); os.IsNotExist(err) {
36                         e = errors.New("Error: " + flagConfigDir + " does not exist. Defaulting to " + ConfigDir + ".")
37                 } else {
38                         ConfigDir = flagConfigDir
39                         return nil
40                 }
41         }
42
43         // Create micro config home directory if it does not exist
44         // This creates parent directories and does nothing if it already exists
45         err := os.MkdirAll(ConfigDir, os.ModePerm)
46         if err != nil {
47                 return errors.New("Error creating configuration directory: " + err.Error())
48         }
49
50         return e
51 }