package main import ( "fmt" "log" "strings" "github.com/spf13/cobra" ) var searchCmd = &cobra.Command{ Use: "search [package_name]", Short: "Search for a package across package managers (will search in os|flatpak|homebrew)", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") // var manager PackageManager if managerName == "" { managers := []string{"brew", "os", "flatpak"} for _, manager := range managers { fmt.Printf("Searching in %s:\n", manager) results := searchPackage(packageName, manager) displayResults(results, manager) fmt.Println() } } }, } func displayResults(results []string, manager string) { if len(results) == 0 { fmt.Printf("No results found in %s\n", manager) return } for _, result := range results { fmt.Printf("- %s\n", result) } } func searchPackage(packageName, manager string) []string { switch manager { case "brew": cmd := execCommand("brew", "search", packageName) packages, err := cmd.Output() if err != nil { log.Printf("error fetching %s packages: %v", manager, err) } packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList case "os": opSys, err := getLinuxDistribution() if err != nil { log.Printf("Error getting OS information: %v", err) return []string{} } cmdParts := strings.Fields(opSys.SearchCommand) if len(cmdParts) == 0 { log.Printf("Invalid search command for OS package manager") return []string{} } cmd := execCommand(cmdParts[0], append(cmdParts[1:], packageName)...) packages, err := cmd.Output() if err != nil { log.Printf("Error fetching %s packages: %v", manager, err) return []string{} } packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList case "flatpak": cmd := execCommand("flatpak", "search", packageName) packages, err := cmd.Output() if err != nil { log.Printf("error fetching %s packages: %v", manager, err) } packageList := strings.Split(strings.TrimSpace(string(packages)), "\n") return packageList } return []string{} }