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) } } }