feat(config): add creation of default config if no config exists

This commit is contained in:
Patryk Hegenberg 2025-01-24 08:10:09 +01:00
parent 70dbc9e062
commit f8abf29594
2 changed files with 62 additions and 118 deletions

View file

@ -2,7 +2,9 @@ package cmd
import (
"fmt"
"log"
"os"
"path/filepath"
"system_setup_tool/tui"
"github.com/spf13/cobra"
@ -51,11 +53,68 @@ func initConfig() {
} else {
viper.SetConfigName("config")
viper.SetConfigType("toml")
viper.AddConfigPath(".")
dirname, err := os.UserConfigDir()
if err != nil {
log.Println("cant obtain config dir")
} else {
viper.AddConfigPath(filepath.Join(dirname, "sst"))
}
}
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Error reading configuration file:", err)
os.Exit(1)
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("no config file found, creating a new one...")
if err := createDefaultConfig(); err != nil {
log.Printf("error creating default config: %v\n", err)
os.Exit(1)
}
} else {
log.Printf("error reading config file: %v\n", err)
os.Exit(1)
}
}
}
func createDefaultConfig() error {
v := viper.New()
v.SetDefault("config", "")
v.SetDefault("headless", true)
v.SetDefault("dotfiles.enable", false)
v.SetDefault("dotfiles.git_repo", "")
v.SetDefault("package_managers.cargo.enable", false)
v.SetDefault("package_managers.cargo.packages", []string{})
v.SetDefault("package_managers.flatpak.enable", false)
v.SetDefault("package_managers.flatpak.packages", []string{})
v.SetDefault("package_managers.go.enable", false)
v.SetDefault("package_managers.go.packages", []string{})
v.SetDefault("package_managers.homebrew.enable", false)
v.SetDefault("package_managers.homebrew.packages", []string{})
v.SetDefault("package_managers.pipx.enable", false)
v.SetDefault("package_managers.pipx.packages", []string{})
v.SetDefault("package_managers.os.enable", true)
v.SetDefault("package_managers.os.packages", []string{})
configDir := filepath.Join(os.Getenv("HOME"), ".config", "sst")
if err := os.MkdirAll(configDir, 0755); err != nil {
return fmt.Errorf("error creating config dir: %w", err)
}
configPath := filepath.Join(configDir, "config.toml")
v.SetConfigFile(configPath)
v.SetConfigType("toml")
if err := v.WriteConfig(); err != nil {
return fmt.Errorf("error writing default config: %w", err)
}
fmt.Println("default config created:", configPath)
return nil
}