package remote import ( "flag" "os" ) type Config struct { remote string password string args []string } var globalConfig *Config func NewConfig() (*Config, error) { globalConfig = &Config{} if err := globalConfig.fromEnv(); err != nil { return nil, err } if err := globalConfig.fromFlags(); err != nil { return nil, err } return globalConfig, nil } func (c *Config) fromFlags() error { fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError) remote := fs.String("remote", "https://todo.home.blapointe.com", "remote mytinytodo") password := fs.String("p", "", "mytinytodo password") if err := fs.Parse(os.Args[1:]); err != nil { panic(err) } c.remote = *remote c.password = *password c.args = fs.Args() return nil } func (c *Config) fromEnv() error { return nil } func getEnvOrDefault(key, def string) string { if v, ok := os.LookupEnv(key); ok { return v } return def }