From 91a413584cd34bdb8cd13b7d0ff0fd5be6110f55 Mon Sep 17 00:00:00 2001 From: nekohepott Date: Wed, 17 Jun 2026 04:16:27 +0300 Subject: [PATCH] redefined getPkgs logic, added new distros logos and package managers --- logos/alpine.png | 3 + src/providers/logo.go | 27 +++++++ src/providers/packages.go | 151 +++++++++++++++++++++++++++-------- src/providers/systemstats.go | 2 +- 4 files changed, 149 insertions(+), 34 deletions(-) create mode 100644 logos/alpine.png diff --git a/logos/alpine.png b/logos/alpine.png new file mode 100644 index 0000000..cebb64c --- /dev/null +++ b/logos/alpine.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec1c2cfdfd6b1fad430886104c9490efbeeceb79d54e60e1befba97072cb1c01 +size 7508 diff --git a/src/providers/logo.go b/src/providers/logo.go index 7b3cd88..faed783 100644 --- a/src/providers/logo.go +++ b/src/providers/logo.go @@ -20,6 +20,33 @@ func GetLogo(id string) string { return "logos/nixos.png" case strings.HasPrefix(id, "debian"): return "logos/debian.png" + case strings.HasPrefix(id, "ubuntu"): + return "logos/ubuntu.png" + case strings.HasPrefix(id, "pop"): + return "logos/pop.png" + case strings.HasPrefix(id, "fedora"): + return "logos/fedora.png" + case strings.HasPrefix(id, "manjaro"): + return "logos/manjaro.png" + case strings.HasPrefix(id, "alpine"): + return "logos/alpine.png" + case strings.HasPrefix(id, "gentoo"): + return "logos/gentoo.png" + case strings.HasPrefix(id, "void"): + return "logos/void.png" + case strings.HasPrefix(id, "opensuse"): + return "logos/opensuse.png" + case strings.HasPrefix(id, "linuxmint"): + return "logos/mint.png" + case strings.HasPrefix(id, "kali"): + return "logos/kali.png" + case strings.HasPrefix(id, "cachyos"): + return "logos/cachyos.png" + case strings.HasPrefix(id, "endevaouros"): + return "logos/endevaouros.png" + case strings.HasPrefix(id, "artix"): + return "logos/artix.png" + default: return "logos/linux.png" } diff --git a/src/providers/packages.go b/src/providers/packages.go index 8748068..9da3319 100644 --- a/src/providers/packages.go +++ b/src/providers/packages.go @@ -2,50 +2,135 @@ package providers import ( "os" - "os/exec" "strconv" "strings" ) -func checkNix() bool { - _, err := os.Stat("/nix") - if err != nil { - return false - } - return true +func pathExists(path string) bool { + _, err := os.Stat(path) + return err == nil } -func addNix() string { - out, _ := exec.Command("sh", "-c", "nix-env -q | wc -l").Output() - nixPkgs := strings.TrimSpace(string(out)) + " (nix)" - return nixPkgs +func getNixOS() string { + if pathExists("/nix/store") { + pkgs, err := os.ReadDir("/nix/store") + if err != nil { + return "error reading /nix/store" + } + return strconv.Itoa(len(pkgs)) + " (nix)" + } + return "" +} + +func getPacman() string { + if pathExists("/var/lib/pacman/local") { + pkgs, err := os.ReadDir("/var/lib/pacman/local") + if err != nil { + return "error reading /var/lib/pacman/local" + } + return strconv.Itoa(len(pkgs)-1) + " (pacman)" + } + return "" +} + +func getApt() string { + if pathExists("/var/lib/apt") { + pkgs, err := os.ReadDir("/var/lib/apt") + if err != nil { + return "error reading /var/lib/apt" + } + return strconv.Itoa(len(pkgs)) + " (apt)" + } + return "" +} + +func getDnf() string { + if pathExists("/var/lib/dnf") { + pkgs, err := os.ReadDir("/var/lib/dnf") + if err != nil { + return "error reading /var/lib/dnf" + } + return strconv.Itoa(len(pkgs)) + " (dnf)" + } + return "" +} + +func getFlatpak() string { + if pathExists("/usr/bin/flatpak") { + pkgs, err := os.ReadDir("/var/lib/flatpak") + if err != nil { + return "error reading /var/lib/flatpak" + } + return strconv.Itoa(len(pkgs)) + " (flatpak)" + } + return "" +} + +func getZypper() string { + if pathExists("/var/lib/zypp") { + pkgs, err := os.ReadDir("/var/lib/zypp") + if err != nil { + return "error reading /var/lib/zypp" + } + return strconv.Itoa(len(pkgs)) + " (zypper)" + } + return "" +} + +func getXbps() string { + if pathExists("/var/db/xbps") { + pkgs, err := os.ReadDir("/var/db/xbps") + if err != nil { + return "error reading /var/db/xbps" + } + return strconv.Itoa(len(pkgs)) + " (xbps)" + } + return "" +} + +func getPortage() string { + if pathExists("/var/lib/portage") { + pkgs, err := os.ReadDir("/var/lib/portage") + if err != nil { + return "error reading /var/lib/portage" + } + return strconv.Itoa(len(pkgs)) + " (emerge)" + } + return "" +} + +func getNix() string { + if pathExists("~/.nix-profile") { + pkgs, err := os.ReadDir("~/.nix-profile/lib/nix/profiles/per-user") + if err != nil { + return "error reading ~/.nix-profile/lib/nix/profiles/per-user" + } + return strconv.Itoa(len(pkgs)) + " (nix)" + } + return "" } func GetPkgs() string { - var pkgs string - haveNix := checkNix() - if strings.HasPrefix(id, "arch") { - out, _ := exec.Command("sh", "-c", "pacman -Qq | wc -l").Output() - pkgs = strings.TrimSpace(string(out)) + " (pacman)" - if haveNix { - pkgs = strings.TrimSpace(pkgs + ", " + addNix()) - } - return pkgs + rawPkgs := []string{ + getPacman(), + getNixOS(), + getNix(), + getXbps(), + getDnf(), + getZypper(), + getApt(), + getPortage(), + getFlatpak(), } - if strings.HasPrefix(id, "debian") { - out, _ := exec.Command("sh", "-c", "dpkg -l | grep ^ii | wc -l").Output() - pkgs = strings.TrimSpace(string(out)) + " (apt)" - if haveNix { - pkgs = strings.TrimSpace(pkgs + ", " + addNix()) + var pkgsList []string + for _, p := range rawPkgs { + if p != "" { + pkgsList = append(pkgsList, p) } - return pkgs } - if strings.HasPrefix(id, "nixos") { - entries, err := os.ReadDir("/run/current-system/sw/bin") - if err != nil { - return "can't get nix packages" - } - return strconv.Itoa(len(entries)) + " (nix)" + if len(pkgsList) == 0 { + return "unknown package manager" } - return "unknown" + + return strings.Join(pkgsList[:], ", ") } diff --git a/src/providers/systemstats.go b/src/providers/systemstats.go index 62007bb..3f996f0 100644 --- a/src/providers/systemstats.go +++ b/src/providers/systemstats.go @@ -66,7 +66,7 @@ func GetRam() string { availableMB := available / 1024 usedMB := totalMB - availableMB - ram := fmt.Sprintf("%d / %d MiB (%d MiB available)", usedMB, totalMB, availableMB) + ram := fmt.Sprintf("%d / %d MiB", usedMB, totalMB) ram = strings.TrimSpace(ram) return ram