goroutines

This commit is contained in:
nekohepott 2026-06-17 04:16:28 +03:00
parent abcbb0eed6
commit 3f892b6605
No known key found for this signature in database
2 changed files with 60 additions and 16 deletions

View File

@ -6,6 +6,7 @@ import (
"os/exec"
"strconv"
"strings"
"sync"
)
func pathExists(path string) bool {
@ -44,28 +45,46 @@ func getPmPackages(packagerName string, packagerPath string) string {
}
func GetPkgs() string {
rawPkgs := []string{
getPmPackages("pacman", "/var/lib/pacman/local"),
getPmPackages("apt", "/var/lib/apt"),
getPmPackages("dnf", "/var/lib/dnf"),
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/"),
getPmPackages("flatpak", "/var/lib/flatpak/app"),
managers := []struct {
name, path string
}{
{"pacman", "/var/lib/pacman/local"},
{"nix-user", "~/.nix-profile/lib/nix/profiles/per-user"},
{"nix", "/nix/store"},
{"apt", "/var/lib/apt"},
{"dnf", "/var/lib/dnf"},
{"zypper", "/var/lib/zypp"},
{"xbps", "/var/db/xbps"},
{"emerge", "/var/lib/portage"},
{"apk", "/etc/apk/"},
{"flatpak", "/var/lib/flatpak/app"},
}
results := make([]string, len(managers))
var wg sync.WaitGroup
for i, m := range managers {
wg.Add(1)
go func(idx int, name, path string) {
defer wg.Done()
if p := getPmPackages(name, path); p != "" {
results[idx] = p
}
}(i, m.name, m.path)
}
wg.Wait()
var pkgsList []string
for _, p := range rawPkgs {
for _, p := range results {
if p != "" {
pkgsList = append(pkgsList, p)
}
}
if len(pkgsList) == 0 {
return "unknown package manager"
}
return strings.Join(pkgsList[:], ", ")
return strings.Join(pkgsList, ", ")
}

View File

@ -15,6 +15,8 @@ import (
var id, prettyName string
const gpuCacheFile = "/tmp/gogofetch_gpu_cache"
func GetDist() (string, string) {
f, _ := os.Open("/etc/os-release")
defer func(f *os.File) {
@ -96,10 +98,28 @@ func GetCpu() string {
return strings.TrimSpace(cpu)
}
func readGpuCache() (string, bool) {
data, err := os.ReadFile(gpuCacheFile)
if err != nil {
return "", false
}
return strings.TrimSpace(string(data)), true
}
func writeGpuCache(gpuData string) {
_ = os.WriteFile(gpuCacheFile, []byte(gpuData), 0644)
}
func GetGpu() string {
if cached, ok := readGpuCache(); ok && cached != "" {
return cached
}
out, err := exec.Command("sh", "-c", `lspci -mm | awk -F'"' '$2=="VGA compatible controller" || $2=="3D controller" || $2=="Display controller"'`).Output()
if err != nil || len(out) == 0 {
return "unknown GPU"
result := "unknown GPU"
writeGpuCache(result)
return result
}
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
@ -118,10 +138,15 @@ func GetGpu() string {
}
}
var result string
if len(gpus) > 0 {
return strings.Join(gpus, " / ")
result = strings.Join(gpus, " / ")
} else {
result = "GPU not found"
}
return "GPU not found"
writeGpuCache(result)
return result
}
func cleanGpuString(raw string) string {