diff --git a/constant/path.go b/constant/path.go index 4eff23f7..087a6777 100644 --- a/constant/path.go +++ b/constant/path.go @@ -11,32 +11,38 @@ const Name = "clash" var Path *path type path struct { - homedir string + homeDir string + configFile string } func init() { - homedir, err := os.UserHomeDir() + homeDir, err := os.UserHomeDir() if err != nil { - homedir, _ = os.Getwd() + homeDir, _ = os.Getwd() } - homedir = P.Join(homedir, ".config", Name) - Path = &path{homedir: homedir} + homeDir = P.Join(homeDir, ".config", Name) + Path = &path{homeDir: homeDir, configFile: "config.yaml"} } // SetHomeDir is used to set the configuration path func SetHomeDir(root string) { - Path = &path{homedir: root} + Path.homeDir = root +} + +// SetConfig is used to set the configuration file +func SetConfig(file string) { + Path.configFile = file } func (p *path) HomeDir() string { - return p.homedir + return p.homeDir } func (p *path) Config() string { - return P.Join(p.homedir, "config.yaml") + return p.configFile } func (p *path) MMDB() string { - return P.Join(p.homedir, "Country.mmdb") + return P.Join(p.homeDir, "Country.mmdb") } diff --git a/main.go b/main.go index cb8b89bc..a08a5eb5 100644 --- a/main.go +++ b/main.go @@ -17,12 +17,14 @@ import ( ) var ( - version bool - homedir string + version bool + homeDir string + configFile string ) func init() { - flag.StringVar(&homedir, "d", "", "set configuration directory") + flag.StringVar(&homeDir, "d", "", "set configuration directory") + flag.StringVar(&configFile, "f", "", "specify configuration file") flag.BoolVar(&version, "v", false, "show current version of clash") flag.Parse() } @@ -33,12 +35,23 @@ func main() { return } - if homedir != "" { - if !filepath.IsAbs(homedir) { + if homeDir != "" { + if !filepath.IsAbs(homeDir) { currentDir, _ := os.Getwd() - homedir = filepath.Join(currentDir, homedir) + homeDir = filepath.Join(currentDir, homeDir) } - C.SetHomeDir(homedir) + C.SetHomeDir(homeDir) + } + + if configFile != "" { + if !filepath.IsAbs(configFile) { + currentDir, _ := os.Getwd() + configFile = filepath.Join(currentDir, configFile) + } + C.SetConfig(configFile) + } else { + configFile := filepath.Join(C.Path.HomeDir(), C.Path.Config()) + C.SetConfig(configFile) } if err := config.Init(C.Path.HomeDir()); err != nil {