package config import ( "errors" "os" "github.com/spf13/viper" ) type Config struct { Server string Port uint16 Username string Privkey string Nick string Channel string } func LoadConfigFile(path string) (Config, error) { viper.SetDefault("Server", "tilde.town") viper.SetDefault("Port", 22) viper.SetConfigName("config") viper.SetConfigType("toml") viper.AddConfigPath(".") viper.AddConfigPath(os.ExpandEnv("$HOME/.config/hubbub")) if path != "" { viper.SetConfigFile(path) } var config Config if err := viper.ReadInConfig(); err != nil { return config, err } if err := viper.Unmarshal(&config); err != nil { return config, err } if config.Username == "" { return config, errors.New("username is required") } if config.Privkey == "" { return config, errors.New("privkey is required") } if config.Nick == "" { return config, errors.New("nick is required") } if config.Channel == "" { return config, errors.New("channel is required") } return config, nil }