feat(config): add creation of default config if no config exists
This commit is contained in:
parent
70dbc9e062
commit
f8abf29594
2 changed files with 62 additions and 118 deletions
65
cmd/cmd.go
65
cmd/cmd.go
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue