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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"system_setup_tool/tui"
|
"system_setup_tool/tui"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
@ -51,11 +53,68 @@ func initConfig() {
|
||||||
} else {
|
} else {
|
||||||
viper.SetConfigName("config")
|
viper.SetConfigName("config")
|
||||||
viper.SetConfigType("toml")
|
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 {
|
if err := viper.ReadInConfig(); err != nil {
|
||||||
fmt.Println("Error reading configuration file:", err)
|
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
|
||||||
os.Exit(1)
|
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