fix(config,cli): add unavailable list

This commit is contained in:
Patryk Hegenberg 2024-12-27 10:02:21 +01:00
parent adce222433
commit 56f6ef28d5
2 changed files with 52 additions and 10 deletions

View file

@ -13,9 +13,22 @@ headless = [
"docker", "docker",
"docker-compose", "docker-compose",
"fd", "fd",
"bat",
"lazygit",
"lsd", "lsd",
"zsh",
"oh-my-posh",
"jq",
"neofetch",
"neovim",
"helix",
"npm",
"stow",
"task",
"timew",
"typst",
"typst-lsp",
"tree-sitter-cli",
"tmux",
"zoxide",
] ]
non_headless = [ non_headless = [
@ -52,10 +65,11 @@ non_headless = [
[special_packages] [special_packages]
go = [ go = [
# "github.com/jesseduffield/lazygit", "github.com/jesseduffield/lazygit",
"github.com/stefanlogue/meteor", "github.com/stefanlogue/meteor",
"golang.org/x/tools/gopls", "golang.org/x/tools/gopls",
"github.com/go-delve/delve/cmd/dlv", "github.com/go-delve/delve/cmd/dlv",
"github.com/air-verse/air"
] ]
cargo = [ cargo = [

42
main.go
View file

@ -107,26 +107,44 @@ func getInstallCommand(pm string) (string, error) {
case "apt": case "apt":
return "apt install -y", nil return "apt install -y", nil
case "pacman": case "pacman":
return "pacman -S --noconfirm", nil return "pacman -S --noconfirm --needed", nil
case "dnf": case "dnf":
return "dnf install -y", nil // return "dnf install -y --best", nil
return "dnf install -y --skip-unavailable --best", nil
default: default:
return "", fmt.Errorf("no install command found for package manager: %s", pm) return "", fmt.Errorf("no install command found for package manager: %s", pm)
} }
} }
var unavailablePackages []string
func installPackage(cmd, pkg, sudoPassword string) error { func installPackage(cmd, pkg, sudoPassword string) error {
fullCmd := fmt.Sprintf("%s %s", cmd, pkg) fullCmd := fmt.Sprintf("%s %s", cmd, pkg)
command := exec.Command("sudo", "-S", "sh", "-c", fullCmd) command := exec.Command("sudo", "-S", "sh", "-c", fullCmd)
command.Stdin = strings.NewReader(sudoPassword + "\n") command.Stdin = strings.NewReader(sudoPassword + "\n")
output, err := command.CombinedOutput() output, err := command.CombinedOutput()
if err != nil { 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 fmt.Errorf("failed to install %s: %v\n%s", pkg, err, string(output))
} }
return nil 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 { // func installPackage(cmd, pkg string) error {
// fullCmd := fmt.Sprintf("%s %s", cmd, pkg) // fullCmd := fmt.Sprintf("%s %s", cmd, pkg)
// command := exec.Command("sudo", "sh", "-c", fullCmd) // command := exec.Command("sudo", "sh", "-c", fullCmd)
@ -168,7 +186,7 @@ func downloadGolang(golangVersion string) error {
return nil return nil
} }
func installSpecialSoftware() error { func (m model) installSpecialSoftware() error {
if _, err := exec.LookPath("go"); err == nil { if _, err := exec.LookPath("go"); err == nil {
fmt.Println("Go ist bereits installiert.") fmt.Println("Go ist bereits installiert.")
} else { } else {
@ -177,7 +195,7 @@ func installSpecialSoftware() error {
return fmt.Errorf("Fehler beim Herunterladen von Go: %v", err) 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) 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 return err
} }
} }
@ -185,7 +203,7 @@ func installSpecialSoftware() error {
if _, err := exec.LookPath("rustc"); err == nil { if _, err := exec.LookPath("rustc"); err == nil {
fmt.Println("Rust ist bereits installiert.") fmt.Println("Rust ist bereits installiert.")
} else { } 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 { if err := installPackage(rustupCommand, "", ""); err != nil {
return err return err
} }
@ -455,7 +473,7 @@ func run(cmd *cobra.Command, args []string) {
} }
if installSpecial { if installSpecial {
if err := installSpecialSoftware(); err != nil { if err := m.installSpecialSoftware(); err != nil {
log.Printf("Fehler beim Installieren der speziellen Software: %v", err) log.Printf("Fehler beim Installieren der speziellen Software: %v", err)
} else { } else {
fmt.Println("Spezielle Software erfolgreich installiert") fmt.Println("Spezielle Software erfolgreich installiert")
@ -467,6 +485,16 @@ func run(cmd *cobra.Command, args []string) {
if err := installSpecialPackages(cfg.SpecialPackages); err != nil { if err := installSpecialPackages(cfg.SpecialPackages); err != nil {
log.Printf("Fehler bei der Installation spezieller Pakete: %v", err) 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() { func main() {