From 7d121c330d6511a6e19ce0f8b77299f1b694d213 Mon Sep 17 00:00:00 2001 From: EnumDev Date: Fri, 21 Mar 2025 09:57:36 +0200 Subject: [PATCH] Move package count detection to go code --- config/fetch_script.sh | 4 +-- config/fetch_script_functions.sh | 40 ------------------------ go.mod | 5 ++- go.sum | 2 -- main.go | 1 + pms.go | 53 ++++++++++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 48 deletions(-) delete mode 100644 config/fetch_script_functions.sh create mode 100644 pms.go diff --git a/config/fetch_script.sh b/config/fetch_script.sh index b33c259..6881ec3 100644 --- a/config/fetch_script.sh +++ b/config/fetch_script.sh @@ -1,9 +1,7 @@ -source fetch_script_functions.sh - echo -e "${C3}Distribution: ${C4}${DISTRO_LONG_NAME} ($(uname -m))" echo -e "${C3}Hostname: ${C4}$(cat /etc/hostname)" echo -e "${C3}Kernel: ${C4}$(uname -s) $(uname -r)" -echo -e "${C3}Packages: ${C4}$(get_packages)" +echo -e "${C3}Packages: ${C4}${PACKAGES}" echo -e "${C3}Shell: ${C4}${USER_SHELL}" echo -e "${C3}Init: ${C4}${INIT_SYSTEM}" echo -e "${C3}Libc: ${C4}${LIBC}" diff --git a/config/fetch_script_functions.sh b/config/fetch_script_functions.sh deleted file mode 100644 index c093773..0000000 --- a/config/fetch_script_functions.sh +++ /dev/null @@ -1,40 +0,0 @@ -command_exists() { - if [ -z "$1" ]; then - return 1 - fi - if command -v "$1" &> /dev/null; then - return 0 - else - return 1 - fi -} - -get_packages() { - ARRAY=() - if command_exists dpkg; then - ARRAY+=("$(dpkg-query -f '.\n' -W | wc -l) (dpkg)") - fi - if command_exists pacman; then - ARRAY+=("$(pacman -Q | wc -l) (pacman)") - fi - if command_exists rpm; then - ARRAY+=("$(rpm -qa | wc -l) (rpm)") - fi - if command_exists xbps-query; then - ARRAY+=("$(xbps-query -l | wc -l) (xbps)") - fi - if command_exists bpm; then - ARRAY+=("$(bpm list -c) (bpm)") - fi - if command_exists emerge; then - ARRAY+=("$(ls -l /var/db/pkg/* | wc -l) (emerge)") - fi - if command_exists flatpak; then - ARRAY+=("$(flatpak list | wc -l) (flatpak)") - fi - if command_exists snap; then - ARRAY+=("$(snap list | wc -l) (snap)") - fi - echo "${ARRAY[@]}" - unset ARRAY -} diff --git a/go.mod b/go.mod index 45298f0..a034f2b 100644 --- a/go.mod +++ b/go.mod @@ -3,19 +3,18 @@ module stormfetch go 1.22 require ( - github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc + github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a github.com/jackmordaunt/ghw v1.0.4 github.com/mitchellh/go-ps v1.0.0 + github.com/moby/sys/mountinfo v0.7.1 gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/jackmordaunt/pcidb v1.0.1 // indirect github.com/jackmordaunt/wmi v1.2.4 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/moby/sys/mountinfo v0.7.1 // indirect golang.org/x/sys v0.3.0 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) diff --git a/go.sum b/go.sum index 6117293..acb7b50 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc h1:7D+Bh06CRPCJO3gr2F7h1sriovOZ8BMhca2Rg85c2nk= -github.com/BurntSushi/xgb v0.0.0-20210121224620-deaf085860bc/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+xzxf1jTJKMKZw3H0swfWk9RpWbBbDK5+0= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= diff --git a/main.go b/main.go index 8f406b6..5941655 100644 --- a/main.go +++ b/main.go @@ -125,6 +125,7 @@ func SetupFetchEnv(showTimeTaken bool) []string { fmt.Println(fmt.Sprintf("Setting '%s' took %d milliseconds", key, end-start)) } } + setVariable("PACKAGES", func() string { return GetInstalledPackages() }) setVariable("DISTRO_LONG_NAME", func() string { return getDistroInfo().LongName }) setVariable("DISTRO_SHORT_NAME", func() string { return getDistroInfo().ShortName }) setVariable("CPU_MODEL", func() string { return getCPUName() }) diff --git a/pms.go b/pms.go new file mode 100644 index 0000000..fab5931 --- /dev/null +++ b/pms.go @@ -0,0 +1,53 @@ +package main + +import ( + "fmt" + "os/exec" + "strings" +) + +type PackageManager struct { + Name string + ExecutableName string + PackageListCommand string +} + +var PackageManagers = []PackageManager{ + {Name: "dpkg", ExecutableName: "dpkg", PackageListCommand: "dpkg-query -f '${Package}\\n' -W"}, + {Name: "pacman", ExecutableName: "pacman", PackageListCommand: "pacman -Q"}, + {Name: "rpm", ExecutableName: "rpm", PackageListCommand: "rpm -qa"}, + {Name: "xbps", ExecutableName: "xbps-query", PackageListCommand: "xbps-query -l"}, + {Name: "bpm", ExecutableName: "bpm", PackageListCommand: "bpm list -n"}, + {Name: "portage", ExecutableName: "emerge", PackageListCommand: "find /var/db/pkg/*/ -mindepth 1 -maxdepth 1"}, + {Name: "flatpak", ExecutableName: "flatpak", PackageListCommand: "flatpak list"}, + {Name: "snap", ExecutableName: "snap", PackageListCommand: "snap list | tail +2"}, +} + +func (pm *PackageManager) CountPackages() int { + // Return 0 if package manager is not found + if _, err := exec.LookPath(pm.ExecutableName); err != nil { + return 0 + } + + output, err := exec.Command("/bin/sh", "-c", pm.PackageListCommand).Output() + if err != nil { + return 0 + } + + return strings.Count(string(output), "\n") +} + +func GetInstalledPackages() (ret string) { + for _, pm := range PackageManagers { + count := pm.CountPackages() + if count > 0 { + if ret == "" { + ret += fmt.Sprintf("%d (%s)", count, pm.Name) + } else { + ret += fmt.Sprintf(" %d (%s)", count, pm.Name) + } + } + } + + return ret +}