package main import ( "fmt" // "io" "log" // "net/http" "os" "os/exec" // "runtime" "github.com/charmbracelet/huh" "github.com/schollz/progressbar/v3" ) func getSudoPassword() (string, error) { var password string form := huh.NewForm( huh.NewGroup( huh.NewInput(). Title("Bitte geben Sie Ihr sudo-Passwort ein"). EchoMode(huh.EchoModePassword). Value(&password), ), ).WithTheme(huh.ThemeCatppuccin()) err := form.Run() if err != nil { return "", fmt.Errorf("fehler bei der Passwortabfrage: %v", err) } return password, nil } // func downloadGolang(golangVersion string) error { // var link string // if runtime.GOARCH == "arm64" { // link = "https://go.dev/dl/go" + golangVersion + ".linux-arm64.tar.gz" // } else { // link = "https://go.dev/dl/go" + golangVersion + ".linux-amd64.tar.gz" // } // resp, err := http.Get(link) // if err != nil { // return fmt.Errorf("fehler beim Herunterladen von Go: %v", err) // } // defer resp.Body.Close() // if resp.StatusCode != http.StatusOK { // return fmt.Errorf("unerwarteter HTTP-Status: %s", resp.Status) // } // outFile, err := os.Create("go" + golangVersion + ".linux-" + runtime.GOARCH + ".tar.gz") // if err != nil { // return fmt.Errorf("fehler beim Erstellen der Ausgabedatei: %v", err) // } // defer outFile.Close() // _, err = io.Copy(outFile, resp.Body) // if err != nil { // return fmt.Errorf("fehler beim Schreiben der Ausgabedatei: %v", err) // } // return nil // } func max(a, b int) int { if a > b { return a } return b } // func installPackageWithProgress(name string, installFunc func() error) error { // err := installFunc() // if err != nil { // fmt.Printf("\r❌ %s\n", name) // return err // } // fmt.Printf("\r✓ %s\n", name) // return nil // } func executeShellCommand(command string, env string) error { cmd := exec.Command("bash", "-c", command) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, env) output, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("befehl fehlgeschlagen: %v\nAusgabe: %s", err, output) } return nil } func installWithProgress(manager PackageManager, packages []string) error { bar := progressbar.Default(int64(len(packages)), "Installiere "+manager.Name()+"-Pakete...") for _, pkg := range packages { err := manager.InstallPackage(pkg) if err != nil { log.Printf("\nError installing %s: %v\n", pkg, err) } bar.Add(1) } return nil }