From 1ac689cd04f03a6071095eb3c4f9bd769f83fafa Mon Sep 17 00:00:00 2001 From: Anna Rose Wiggins Date: Mon, 11 Aug 2025 21:44:05 -0400 Subject: [PATCH] Add the initial rough skeleton for a config tool. --- cmd/joyful-config/main.go | 33 +++++++++++++++++++++++++++ internal/configparser/configparser.go | 6 ++++- internal/configparser/errors.go | 11 +++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 cmd/joyful-config/main.go create mode 100644 internal/configparser/errors.go diff --git a/cmd/joyful-config/main.go b/cmd/joyful-config/main.go new file mode 100644 index 0000000..8ca321a --- /dev/null +++ b/cmd/joyful-config/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "fmt" + "os" + "strings" + + "git.annabunches.net/annabunches/joyful/internal/configparser" + "git.annabunches.net/annabunches/joyful/internal/logger" + flag "github.com/spf13/pflag" +) + +func getConfigDir(dir string) string { + configDir := strings.ReplaceAll(dir, "~", "${HOME}") + return os.ExpandEnv(configDir) +} + +func main() { + var configDir string + flag.StringVarP(&configDir, "config", "c", "~/.config/joyful", "Directory to read configuration from.") + flag.Parse() + configDir = getConfigDir(configDir) + + config, err := configparser.ParseConfig(configDir) + switch err.(type) { + case *configparser.EmptyConfigError: + config = &configparser.Config{} + default: + logger.FatalIfError(err, "Fatal error reading config") + } + + fmt.Printf("Config: %v\n", config) +} diff --git a/internal/configparser/configparser.go b/internal/configparser/configparser.go index 3daa217..deceb8a 100644 --- a/internal/configparser/configparser.go +++ b/internal/configparser/configparser.go @@ -50,7 +50,7 @@ func getConfigFilePaths(directory string) ([]string, error) { if err != nil { return nil, errors.New("failed to create config directory at " + directory) } else { - return nil, errors.New("no config files found at " + directory) + return nil, &EmptyConfigError{directory} } } @@ -63,5 +63,9 @@ func getConfigFilePaths(directory string) ([]string, error) { paths = append(paths, filepath.Join(directory, file.Name())) } + if len(paths) == 0 { + return nil, &EmptyConfigError{directory} + } + return paths, nil } diff --git a/internal/configparser/errors.go b/internal/configparser/errors.go new file mode 100644 index 0000000..4698152 --- /dev/null +++ b/internal/configparser/errors.go @@ -0,0 +1,11 @@ +package configparser + +import "fmt" + +type EmptyConfigError struct { + directory string +} + +func (e *EmptyConfigError) Error() string { + return fmt.Sprintf("no config files found at %s", e.directory) +}