115 lines
3 KiB
Go
115 lines
3 KiB
Go
package tui
|
|
|
|
import (
|
|
"codeberg.org/Pata1704/system_setup_tool/internal/config"
|
|
"codeberg.org/Pata1704/system_setup_tool/internal/dotfiles"
|
|
"codeberg.org/Pata1704/system_setup_tool/internal/utils"
|
|
"fmt"
|
|
"log"
|
|
|
|
pm "codeberg.org/Pata1704/system_setup_tool/pkg/packagemanager"
|
|
|
|
"github.com/charmbracelet/huh"
|
|
"github.com/mitchellh/mapstructure"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type installedPkgMsg string
|
|
|
|
func Run(cmd *cobra.Command, args []string) {
|
|
sudoPassword, err := utils.GetSudoPassword()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var cfg config.Config
|
|
if err := viper.Unmarshal(&cfg); err != nil {
|
|
log.Fatalf("Fehler beim Lesen der Konfiguration: %v", err)
|
|
}
|
|
|
|
// form := huh.NewForm(
|
|
// huh.NewGroup(
|
|
// huh.NewConfirm().
|
|
// Title("Möchten Sie eine headless Installation durchführen?").
|
|
// Value(&cfg.Headless),
|
|
// ),
|
|
// ).WithTheme(huh.ThemeCatppuccin())
|
|
//
|
|
// if err := form.Run(); err != nil {
|
|
// log.Fatalf("Fehler bei der Benutzerabfrage: %v", err)
|
|
// }
|
|
//
|
|
// osManager := pm.NewOSManager(sudoPassword)
|
|
//
|
|
// if err := osManager.Install(cfg.Packages.Headless); err != nil {
|
|
// log.Printf("Warnung bei der Installation der Headless-Pakete: %v", err)
|
|
// }
|
|
// if !cfg.Headless {
|
|
// if err := osManager.Install(cfg.Packages.NonHeadless); err != nil {
|
|
// log.Printf("Warnung bei der Installation der Non-Headless-Pakete: %v", err)
|
|
// }
|
|
// }
|
|
//
|
|
|
|
for name, config := range cfg.PackageManagers {
|
|
if config.Enable {
|
|
var manager pm.PackageManager
|
|
switch name {
|
|
case "os":
|
|
manager = pm.NewOSManager(sudoPassword)
|
|
case "homebrew":
|
|
manager = &pm.HomebrewManager{}
|
|
case "go":
|
|
manager = &pm.GolangManager{}
|
|
case "cargo":
|
|
manager = &pm.CargoManager{}
|
|
case "pipx":
|
|
manager = &pm.PipxManager{}
|
|
case "flatpak":
|
|
flatpakConfig := pm.FlatpakConfig{}
|
|
if err := mapstructure.Decode(config, &flatpakConfig); err != nil {
|
|
log.Printf("error decoding flatpak config: %v", err)
|
|
continue
|
|
}
|
|
manager = pm.NewFlatpakManager(sudoPassword, flatpakConfig)
|
|
default:
|
|
log.Printf("unknown packagemanager: %s", name)
|
|
continue
|
|
}
|
|
if err := manager.InstallManager(); err != nil {
|
|
log.Printf("warning packagemanager %s not installed and could not be installed: %v", manager.Name(), err)
|
|
}
|
|
|
|
if err := manager.Install(config.Packages); err != nil {
|
|
log.Printf("warning at %s-packages: %v", manager.Name(), err)
|
|
}
|
|
}
|
|
}
|
|
osManager := pm.NewOSManager(sudoPassword)
|
|
var installBuild bool
|
|
form := huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewConfirm().
|
|
Title("Möchten Sie die Build Essentials installieren?").
|
|
Value(&installBuild),
|
|
),
|
|
).WithTheme(huh.ThemeCatppuccin())
|
|
|
|
err = form.Run()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if installBuild {
|
|
if err := osManager.InstallBuildEssentials(); err != nil {
|
|
log.Printf("Warnung: %v", err)
|
|
}
|
|
}
|
|
if cfg.Dotfiles.Enable {
|
|
fmt.Println("\nconfiguring dotfiles...")
|
|
if err := dotfiles.SetupDotfiles(cfg.Dotfiles); err != nil {
|
|
log.Printf("Warnung bei Dotfiles-Setup: %v", err)
|
|
}
|
|
}
|
|
}
|