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
|
||||
}
|
||||
|
|
|
|||
115
config.toml
115
config.toml
|
|
@ -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',
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue