package main import ( "fmt" "log" "os/exec" ) type FlatpakConfig struct { Enable bool `mapstructure:"enable"` Remotes []Remote `mapstructure:"remotes"` Packages []string `mapstructure:"packages"` } type Remote struct { Name string `mapstructure:"name"` URL string `mapstructure:"url"` } func installFlatpak(os *OS, sudoPassword string) error { var command string switch os.PackageManager { case "pacman": command = "pacman -S --noconfirm --needed flatpak" case "apt": command = "apt install -y flatpak" case "dnf": command = "dnf install -y flatpak" default: return fmt.Errorf("keine Flatpak-Installation für OS %s definiert", os.ID) } if err := installPackage(command, "", sudoPassword); err != nil { return fmt.Errorf("fehler bei der Flatpak-Installation: %v", err) } return nil } func addFlatpakRemotes(remotes []Remote) error { for _, remote := range remotes { cmd := exec.Command("flatpak", "remote-add", "--if-not-exists", remote.Name, remote.URL) if err := cmd.Run(); err != nil { return fmt.Errorf("fehler beim Hinzufügen des Remotes %s: %v", remote.Name, err) } } return nil } func installFlatpakPackages(packages []string) error { if len(packages) == 0 { return nil } fmt.Println("\nInstalliere Flatpak-Pakete...") for _, pkg := range packages { err := installPackageWithProgress(pkg, func() error { cmd := exec.Command("flatpak", "install", "-y", pkg) return cmd.Run() }) if err != nil { log.Printf("Fehler bei der Installation von %s: %v", pkg, err) } } return nil }