103 lines
2.4 KiB
Go
103 lines
2.4 KiB
Go
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
|
|
}
|