diff --git a/cmd/cmd.go b/cmd/cmd.go index 7b5a390..3218b50 100644 --- a/cmd/cmd.go +++ b/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 +} diff --git a/config.toml b/config.toml deleted file mode 100644 index 6dd18cd..0000000 --- a/config.toml +++ /dev/null @@ -1,115 +0,0 @@ -config = '' -headless = true - -[dotfiles] -enable = false -git_repo = 'https://codeberg.org/Pata1704/dotfiles.git' - -[package_managers] -[package_managers.cargo] -enable = true -packages = ['typst-cli'] - -[package_managers.flatpak] -enable = true -packages = [ - 'com.spotify.Client', - 'us.zoom.Zoom', - 'org.zotero.Zotero', - 'com.google.AndroidStudio', - 'io.freetubeapp.FreeTube', - 'com.discordapp.Discord', - 'com.nextcloud.desktopclient.nextcloud', - 'com.github.tchx84.Flatseal', - 'io.github.flattool.Warehouse', - 'org.onlyoffice.desktopeditors', -] - -[package_managers.go] -enable = true -packages = [ - 'github.com/stefanlogue/meteor', - 'golang.org/x/tools/gopls', - 'github.com/go-delve/delve/cmd/dlv', - 'github.com/air-verse/air', -] - -[package_managers.homebrew] -enable = true -packages = [ - 'oh-my-posh', - 'fd', - 'fzf', - 'ripgrep', - 'neovim', - 'helix', - 'node', - 'yazi', - 'zk', - 'bat', - 'bottom', - 'btop', - 'git-cliff', - 'glow', - 'lazygit', - 'goreleaser', - 'harlequin', - 'mage', - 'posting', - 'typst', - 'wails', - 'zoxide', - 'lsd', - 'jq', - 'yq', - 'timewarrior', - 'tmux', - 'fastfetch', - 'stow', - 'distrobox', -] - -[package_managers.pipx] -enable = true -packages = ['euporie'] - -[package_managers.os] -enable = true -packages = [ - 'git', - 'curl', - 'wget', - 'biber', - 'bear', - 'docker', - 'docker-compose', - 'zsh', - 'npm', - 'task', - 'tree-sitter-cli', - 'python3-pip', - 'latexmk', - 'luarocks', - 'flameshot', - 'fuzzel', - 'hyprcursor', - 'hypridle', - 'hyprland', - 'hyprland-qtutils', - 'hyprlock', - 'hyprpaper', - 'hyprutils', - 'kitty', - 'mako', - 'mpv', - 'pidgin', - 'remmina', - 'thunderbird-i18n-de', - 'virt-manager', - 'vlc', - 'waybar', - 'nwg-look', - 'xdg-desktop-portal-hyprland', - 'zathura', - 'zathura-pdf-mupdf', -]