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") if managerName == "os" { managerName = "OS Package Manager" } opSys, err := getLinuxDistribution() if err != nil { log.Printf("error getting OS information: %v", err) return } managers := []PackageManager{ NewOSManager(opSys, "", nil), &HomebrewManager{}, &FlatpakManager{}, } if managerName != "" { for _, m := range managers { if strings.EqualFold(m.Name(), managerName) { searchAndDisplayResults(m, packageName) return } } fmt.Printf("Not supported for '%s'\n", managerName) return } for _, manager := range managers { searchAndDisplayResults(manager, packageName) } }, } 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 searchAndDisplayResults(manager PackageManager, packageName string) { fmt.Printf("Searching in %s:\n", manager.Name()) results := manager.SearchPackage(packageName) displayResults(results, manager.Name()) fmt.Println() }