fix(config,cli): add unavailable list
This commit is contained in:
parent
adce222433
commit
56f6ef28d5
2 changed files with 52 additions and 10 deletions
20
config.toml
20
config.toml
|
|
@ -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
42
main.go
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue