goGoFetch/src/providers/packages.go
2026-06-25 18:59:32 +03:00

71 lines
1.6 KiB
Go

package providers
import (
"fmt"
"os"
"os/exec"
"strconv"
"strings"
)
func pathExists(path string) bool {
_, err := os.Stat(path)
return err == nil
}
func getPmPackages(packagerName string, packagerPath string) string {
if pathExists(packagerPath) {
pkgs, err := os.ReadDir(packagerPath)
if err != nil {
return "error reading " + packagerPath
}
if packagerName == "pacman" {
return strconv.Itoa(len(pkgs)-1) + " (pacman)"
}
if packagerName == "apk" {
out, err := exec.Command("apk", "info").Output()
if err != nil {
return "error reading apk package list"
}
pkgsRaw := strings.TrimSpace(string(out))
pkgsList := strings.Split(pkgsRaw, "\n")
pkgCount := len(pkgsList)
if pkgsRaw == "" {
pkgCount = 0
}
return fmt.Sprintf("%d (apk)", pkgCount)
}
return strconv.Itoa(len(pkgs)) + " (" + packagerName + ")"
}
return ""
}
func GetPkgs() string {
rawPkgs := []string{
getPmPackages("pacman", "/var/lib/pacman/local"),
getPmPackages("apt", "/var/lib/apt"),
getPmPackages("dnf", "/var/lib/dnf"),
getPmPackages("flatpak", "/var/lib/flatpak"),
getPmPackages("zypper", "/var/lib/zypp"),
getPmPackages("xbps", "/var/db/xbps"),
getPmPackages("emerge", "/var/lib/portage"),
getPmPackages("nix-user", "~/.nix-profile/lib/nix/profiles/per-user"),
getPmPackages("nix", "/nix/store"),
getPmPackages("apk", "/etc/apk/"),
}
var pkgsList []string
for _, p := range rawPkgs {
if p != "" {
pkgsList = append(pkgsList, p)
}
}
if len(pkgsList) == 0 {
return "unknown package manager"
}
return strings.Join(pkgsList[:], ", ")
}