From 56f6ef28d56f3f95b650971add3e1de9a85956d4 Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Fri, 27 Dec 2024 10:02:21 +0100 Subject: [PATCH] fix(config,cli): add unavailable list --- config.toml | 20 +++++++++++++++++--- main.go | 42 +++++++++++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/config.toml b/config.toml index 1ff08db..dcd2721 100644 --- a/config.toml +++ b/config.toml @@ -13,9 +13,22 @@ headless = [ "docker", "docker-compose", "fd", - "bat", - "lazygit", "lsd", + "zsh", + "oh-my-posh", + "jq", + "neofetch", + "neovim", + "helix", + "npm", + "stow", + "task", + "timew", + "typst", + "typst-lsp", + "tree-sitter-cli", + "tmux", + "zoxide", ] non_headless = [ @@ -52,10 +65,11 @@ non_headless = [ [special_packages] go = [ - # "github.com/jesseduffield/lazygit", + "github.com/jesseduffield/lazygit", "github.com/stefanlogue/meteor", "golang.org/x/tools/gopls", "github.com/go-delve/delve/cmd/dlv", + "github.com/air-verse/air" ] cargo = [ diff --git a/main.go b/main.go index 6ba94d7..8f171a9 100644 --- a/main.go +++ b/main.go @@ -107,26 +107,44 @@ func getInstallCommand(pm string) (string, error) { case "apt": return "apt install -y", nil case "pacman": - return "pacman -S --noconfirm", nil + return "pacman -S --noconfirm --needed", nil case "dnf": - return "dnf install -y", nil + // return "dnf install -y --best", nil + return "dnf install -y --skip-unavailable --best", nil default: return "", fmt.Errorf("no install command found for package manager: %s", pm) } } +var unavailablePackages []string + func installPackage(cmd, pkg, sudoPassword string) error { fullCmd := fmt.Sprintf("%s %s", cmd, pkg) command := exec.Command("sudo", "-S", "sh", "-c", fullCmd) - command.Stdin = strings.NewReader(sudoPassword + "\n") output, err := command.CombinedOutput() if err != nil { + if strings.Contains(string(output), "not found") || strings.Contains(string(output), "no matching package") || strings.Contains(string(output), "Keine Übereinstimmung") { + unavailablePackages = append(unavailablePackages, pkg) + return nil + } return fmt.Errorf("failed to install %s: %v\n%s", pkg, err, string(output)) } return nil } +// func installPackage(cmd, pkg, sudoPassword string) error { +// fullCmd := fmt.Sprintf("%s %s", cmd, pkg) +// command := exec.Command("sudo", "-S", "sh", "-c", fullCmd) + +// command.Stdin = strings.NewReader(sudoPassword + "\n") +// output, err := command.CombinedOutput() +// if err != nil { +// return fmt.Errorf("failed to install %s: %v\n%s", pkg, err, string(output)) +// } +// return nil +// } + // func installPackage(cmd, pkg string) error { // fullCmd := fmt.Sprintf("%s %s", cmd, pkg) // command := exec.Command("sudo", "sh", "-c", fullCmd) @@ -168,7 +186,7 @@ func downloadGolang(golangVersion string) error { return nil } -func installSpecialSoftware() error { +func (m model) installSpecialSoftware() error { if _, err := exec.LookPath("go"); err == nil { fmt.Println("Go ist bereits installiert.") } else { @@ -177,7 +195,7 @@ func installSpecialSoftware() error { return fmt.Errorf("Fehler beim Herunterladen von Go: %v", err) } golangCommand := fmt.Sprintf("sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go%s.linux-%s.tar.gz", golangVersion, runtime.GOARCH) - if err := installPackage(golangCommand, "", ""); err != nil { + if err := installPackage(golangCommand, "", m.sudoPassword); err != nil { return err } } @@ -185,7 +203,7 @@ func installSpecialSoftware() error { if _, err := exec.LookPath("rustc"); err == nil { fmt.Println("Rust ist bereits installiert.") } else { - rustupCommand := "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -- -q -y" + rustupCommand := "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q -y" if err := installPackage(rustupCommand, "", ""); err != nil { return err } @@ -455,7 +473,7 @@ func run(cmd *cobra.Command, args []string) { } if installSpecial { - if err := installSpecialSoftware(); err != nil { + if err := m.installSpecialSoftware(); err != nil { log.Printf("Fehler beim Installieren der speziellen Software: %v", err) } else { fmt.Println("Spezielle Software erfolgreich installiert") @@ -467,6 +485,16 @@ func run(cmd *cobra.Command, args []string) { if err := installSpecialPackages(cfg.SpecialPackages); err != nil { log.Printf("Fehler bei der Installation spezieller Pakete: %v", err) } + printUnavailablePackages() +} + +func printUnavailablePackages() { + if len(unavailablePackages) > 0 { + fmt.Println("\nFolgende Pakete waren nicht verfügbar:") + for _, pkg := range unavailablePackages { + fmt.Printf("- %s\n", pkg) + } + } } func main() {