71 lines
1.6 KiB
Go
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 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)
|
|
}
|
|
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)"
|
|
}
|
|
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", ""),
|
|
}
|
|
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[:], ", ")
|
|
}
|