goroutines
This commit is contained in:
parent
abcbb0eed6
commit
3f892b6605
@ -6,6 +6,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
func pathExists(path string) bool {
|
func pathExists(path string) bool {
|
||||||
@ -44,28 +45,46 @@ func getPmPackages(packagerName string, packagerPath string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetPkgs() string {
|
func GetPkgs() string {
|
||||||
rawPkgs := []string{
|
managers := []struct {
|
||||||
getPmPackages("pacman", "/var/lib/pacman/local"),
|
name, path string
|
||||||
getPmPackages("apt", "/var/lib/apt"),
|
}{
|
||||||
getPmPackages("dnf", "/var/lib/dnf"),
|
{"pacman", "/var/lib/pacman/local"},
|
||||||
getPmPackages("zypper", "/var/lib/zypp"),
|
{"nix-user", "~/.nix-profile/lib/nix/profiles/per-user"},
|
||||||
getPmPackages("xbps", "/var/db/xbps"),
|
{"nix", "/nix/store"},
|
||||||
getPmPackages("emerge", "/var/lib/portage"),
|
{"apt", "/var/lib/apt"},
|
||||||
getPmPackages("nix-user", "~/.nix-profile/lib/nix/profiles/per-user"),
|
{"dnf", "/var/lib/dnf"},
|
||||||
getPmPackages("nix", "/nix/store"),
|
{"zypper", "/var/lib/zypp"},
|
||||||
getPmPackages("apk", "/etc/apk/"),
|
{"xbps", "/var/db/xbps"},
|
||||||
getPmPackages("flatpak", "/var/lib/flatpak/app"),
|
{"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
|
var pkgsList []string
|
||||||
for _, p := range rawPkgs {
|
for _, p := range results {
|
||||||
if p != "" {
|
if p != "" {
|
||||||
pkgsList = append(pkgsList, p)
|
pkgsList = append(pkgsList, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(pkgsList) == 0 {
|
if len(pkgsList) == 0 {
|
||||||
return "unknown package manager"
|
return "unknown package manager"
|
||||||
}
|
}
|
||||||
|
|
||||||
return strings.Join(pkgsList[:], ", ")
|
return strings.Join(pkgsList, ", ")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,8 @@ import (
|
|||||||
|
|
||||||
var id, prettyName string
|
var id, prettyName string
|
||||||
|
|
||||||
|
const gpuCacheFile = "/tmp/gogofetch_gpu_cache"
|
||||||
|
|
||||||
func GetDist() (string, string) {
|
func GetDist() (string, string) {
|
||||||
f, _ := os.Open("/etc/os-release")
|
f, _ := os.Open("/etc/os-release")
|
||||||
defer func(f *os.File) {
|
defer func(f *os.File) {
|
||||||
@ -96,10 +98,28 @@ func GetCpu() string {
|
|||||||
return strings.TrimSpace(cpu)
|
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 {
|
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()
|
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 {
|
if err != nil || len(out) == 0 {
|
||||||
return "unknown GPU"
|
result := "unknown GPU"
|
||||||
|
writeGpuCache(result)
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||||
@ -118,10 +138,15 @@ func GetGpu() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var result string
|
||||||
if len(gpus) > 0 {
|
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 {
|
func cleanGpuString(raw string) string {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user