mirror of
https://github.com/EnumeratedDev/stormfetch.git
synced 2026-09-16 07:56:12 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4c71fc49a | ||
|
|
efdbe94193 | ||
|
|
7b8c017ed0 | ||
|
|
66f3891b40 | ||
|
|
efae7c4b93 | ||
|
|
24da6ce083 | ||
|
|
b90b869643 | ||
|
|
720eb845ca | ||
|
|
81c4006e48 |
@@ -1,4 +0,0 @@
|
|||||||
.idea
|
|
||||||
build
|
|
||||||
stormfetch
|
|
||||||
stormfetch.tar.gz
|
|
||||||
@@ -34,3 +34,5 @@ run: build/stormfetch
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r build/
|
rm -r build/
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
#/1;7;3;15
|
#/1;7;3;15
|
||||||
${C1} .-/+oossssoo+\-.
|
${C1} .-/+oossssoo+\-.
|
||||||
´:+ssssssssssssssssss+:`
|
':+ssssssssssssssssss+:'
|
||||||
-+ssssssssssssssssssyyssss+-
|
-+ssssssssssssssssssyyssss+-
|
||||||
.ossssssssssssssssss${C2}dMMMNy${C1}sssso.
|
.ossssssssssssssssss${C2}dMMMNy${C1}sssso.
|
||||||
/sssssssssss${C2}hdmmNNmmyNMMMMh${C1}ssssss\
|
/sssssssssss${C2}hdmmNNmmyNMMMMh${C1}ssssss\
|
||||||
@@ -17,5 +17,5 @@ oss${C2}yNMMMNyMMh${C1}sssssssssssssshmmmh${C1}ssssssso
|
|||||||
\sssssssssss${C2}hdmNNNNmyNMMMMh${C1}ssssss/
|
\sssssssssss${C2}hdmNNNNmyNMMMMh${C1}ssssss/
|
||||||
.ossssssssssssssssss${C2}dMMMNy${C1}sssso.
|
.ossssssssssssssssss${C2}dMMMNy${C1}sssso.
|
||||||
-+sssssssssssssssss${C2}yyy${C1}ssss+-
|
-+sssssssssssssssss${C2}yyy${C1}ssss+-
|
||||||
`:+ssssssssssssssssss+:`
|
':+ssssssssssssssssss+:'
|
||||||
.-\+oossssoo+/-.
|
.-\+oossssoo+/-.
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ fetch_script: auto
|
|||||||
ansii_colors: []
|
ansii_colors: []
|
||||||
force_config_ansii: false
|
force_config_ansii: false
|
||||||
dependency_warning: true
|
dependency_warning: true
|
||||||
|
hidden_gpus: []
|
||||||
|
|||||||
@@ -6,7 +6,10 @@ echo -e "${C3}Kernel: ${C4}$(uname -s) $(uname -r)"
|
|||||||
echo -e "${C3}Packages: ${C4}$(get_packages)"
|
echo -e "${C3}Packages: ${C4}$(get_packages)"
|
||||||
echo -e "${C3}Shell: ${C4}${USER_SHELL}"
|
echo -e "${C3}Shell: ${C4}${USER_SHELL}"
|
||||||
if [ ! -z "$CPU_MODEL" ]; then echo -e "${C3}CPU: ${C4}${CPU_MODEL} (${CPU_THREADS} threads)"; fi
|
if [ ! -z "$CPU_MODEL" ]; then echo -e "${C3}CPU: ${C4}${CPU_MODEL} (${CPU_THREADS} threads)"; fi
|
||||||
if [ ! -z "$GPU_MODEL" ]; then echo -e "${C3}GPU: ${C4}${GPU_MODEL}"; fi
|
for i in $(seq ${CONNECTED_GPUS}); do
|
||||||
|
gpu="GPU$i"
|
||||||
|
echo -e "${C3}GPU: ${C4}${!gpu}"
|
||||||
|
done
|
||||||
if [ ! -z "$MEM_TOTAL" ] && [ ! -z "$MEM_USED" ]; then echo -e "${C3}Memory: ${C4}${MEM_USED} MiB / ${MEM_TOTAL} MiB"; fi
|
if [ ! -z "$MEM_TOTAL" ] && [ ! -z "$MEM_USED" ]; then echo -e "${C3}Memory: ${C4}${MEM_USED} MiB / ${MEM_TOTAL} MiB"; fi
|
||||||
for i in $(seq ${MOUNTED_PARTITIONS}); do
|
for i in $(seq ${MOUNTED_PARTITIONS}); do
|
||||||
device="PARTITION${i}_DEVICE"
|
device="PARTITION${i}_DEVICE"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ require (
|
|||||||
github.com/jackmordaunt/pcidb v1.0.1 // indirect
|
github.com/jackmordaunt/pcidb v1.0.1 // indirect
|
||||||
github.com/jackmordaunt/wmi v1.2.4 // indirect
|
github.com/jackmordaunt/wmi v1.2.4 // indirect
|
||||||
github.com/kr/pretty v0.1.0 // 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
|
golang.org/x/sys v0.3.0 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,7 +15,10 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
|
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
|
||||||
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
|
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
|
||||||
|
github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g=
|
||||||
|
github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
|
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
|
||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
yaml "gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
@@ -21,18 +22,24 @@ var config = StormfetchConfig{
|
|||||||
AnsiiColors: make([]int, 0),
|
AnsiiColors: make([]int, 0),
|
||||||
ForceConfigAnsii: false,
|
ForceConfigAnsii: false,
|
||||||
DependencyWarning: true,
|
DependencyWarning: true,
|
||||||
|
HiddenGPUS: make([]int, 0),
|
||||||
}
|
}
|
||||||
|
|
||||||
type StormfetchConfig struct {
|
type StormfetchConfig struct {
|
||||||
Ascii string `yaml:"distro_ascii"`
|
Ascii string `yaml:"distro_ascii"`
|
||||||
|
DistroName string `yaml:"distro_name"`
|
||||||
FetchScript string `yaml:"fetch_script"`
|
FetchScript string `yaml:"fetch_script"`
|
||||||
AnsiiColors []int `yaml:"ansii_colors"`
|
AnsiiColors []int `yaml:"ansii_colors"`
|
||||||
ForceConfigAnsii bool `yaml:"force_config_ansii"`
|
ForceConfigAnsii bool `yaml:"force_config_ansii"`
|
||||||
DependencyWarning bool `yaml:"dependency_warning"`
|
DependencyWarning bool `yaml:"dependency_warning"`
|
||||||
|
HiddenGPUS []int `yaml:"hidden_gpus"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
readConfig()
|
readConfig()
|
||||||
|
readFlags()
|
||||||
|
checkDependencies()
|
||||||
|
runStormfetch()
|
||||||
}
|
}
|
||||||
|
|
||||||
func readConfig() {
|
func readConfig() {
|
||||||
@@ -72,6 +79,15 @@ func readConfig() {
|
|||||||
} else {
|
} else {
|
||||||
log.Fatalf("Fetch script file not found: %s", err.Error())
|
log.Fatalf("Fetch script file not found: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func readFlags() {
|
||||||
|
flag.StringVar(&config.Ascii, "ascii", config.Ascii, "help message for flagname")
|
||||||
|
flag.StringVar(&config.DistroName, "distro-name", config.DistroName, "help message for flagname")
|
||||||
|
flag.Parse()
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkDependencies() {
|
||||||
// Show Dependency warning if enabled
|
// Show Dependency warning if enabled
|
||||||
if config.DependencyWarning {
|
if config.DependencyWarning {
|
||||||
var dependencies []string
|
var dependencies []string
|
||||||
@@ -89,6 +105,65 @@ func readConfig() {
|
|||||||
fmt.Println("You can disable this warning through your stormfetch config")
|
fmt.Println("You can disable this warning through your stormfetch config")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetupFetchEnv() []string {
|
||||||
|
var env = make(map[string]string)
|
||||||
|
env["DISTRO_LONG_NAME"] = getDistroInfo().LongName
|
||||||
|
env["DISTRO_SHORT_NAME"] = getDistroInfo().ShortName
|
||||||
|
env["CPU_MODEL"] = getCPUName()
|
||||||
|
env["CPU_THREADS"] = strconv.Itoa(getCPUThreads())
|
||||||
|
memory := GetMemoryInfo()
|
||||||
|
if memory != nil {
|
||||||
|
env["MEM_TOTAL"] = strconv.Itoa(memory.MemTotal)
|
||||||
|
env["MEM_USED"] = strconv.Itoa(memory.MemTotal - memory.MemAvailable)
|
||||||
|
env["MEM_FREE"] = strconv.Itoa(memory.MemAvailable)
|
||||||
|
}
|
||||||
|
partitions := getMountedPartitions()
|
||||||
|
if len(partitions) != 0 {
|
||||||
|
env["MOUNTED_PARTITIONS"] = strconv.Itoa(len(partitions))
|
||||||
|
for i, part := range partitions {
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_DEVICE"] = part.Device
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_MOUNTPOINT"] = part.MountPoint
|
||||||
|
if part.Label != "" {
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_LABEL"] = part.Label
|
||||||
|
}
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_TOTAL_SIZE"] = FormatBytes(part.TotalSize)
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_USED_SIZE"] = FormatBytes(part.UsedSize)
|
||||||
|
env["PARTITION"+strconv.Itoa(i+1)+"_FREE_SIZE"] = FormatBytes(part.FreeSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
env["DE_WM"] = GetDEWM()
|
||||||
|
env["USER_SHELL"] = GetShell()
|
||||||
|
env["DISPLAY_PROTOCOL"] = GetDisplayProtocol()
|
||||||
|
monitors := getMonitorResolution()
|
||||||
|
if len(monitors) != 0 {
|
||||||
|
env["CONNECTED_MONITORS"] = strconv.Itoa(len(monitors))
|
||||||
|
for i, monitor := range monitors {
|
||||||
|
env["MONITOR"+strconv.Itoa(i+1)] = monitor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gpus := getGPUNames()
|
||||||
|
if len(gpus) != 0 {
|
||||||
|
env["CONNECTED_GPUS"] = strconv.Itoa(len(gpus))
|
||||||
|
for i, gpu := range gpus {
|
||||||
|
if gpu == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
env["GPU"+strconv.Itoa(i+1)] = gpu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ret = make([]string, len(env))
|
||||||
|
i := 0
|
||||||
|
for key, value := range env {
|
||||||
|
ret[i] = fmt.Sprintf("%s=%s", key, value)
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func runStormfetch() {
|
||||||
// Fetch ascii art and apply colors
|
// Fetch ascii art and apply colors
|
||||||
colorMap := make(map[string]string)
|
colorMap := make(map[string]string)
|
||||||
colorMap["C0"] = "\033[0m"
|
colorMap["C0"] = "\033[0m"
|
||||||
@@ -183,54 +258,6 @@ func readConfig() {
|
|||||||
}
|
}
|
||||||
final += lastAsciiColor + line + "\n"
|
final += lastAsciiColor + line + "\n"
|
||||||
}
|
}
|
||||||
|
final = strings.TrimRight(final, "\n\t ")
|
||||||
fmt.Println(final + "\033[0m")
|
fmt.Println(final + "\033[0m")
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetupFetchEnv() []string {
|
|
||||||
var env = make(map[string]string)
|
|
||||||
env["DISTRO_LONG_NAME"] = getDistroInfo().LongName
|
|
||||||
env["DISTRO_SHORT_NAME"] = getDistroInfo().ShortName
|
|
||||||
env["CPU_MODEL"] = getCPUName()
|
|
||||||
env["CPU_THREADS"] = strconv.Itoa(getCPUThreads())
|
|
||||||
memory := GetMemoryInfo()
|
|
||||||
if memory != nil {
|
|
||||||
env["MEM_TOTAL"] = strconv.Itoa(memory.MemTotal)
|
|
||||||
env["MEM_USED"] = strconv.Itoa(memory.MemTotal - memory.MemAvailable)
|
|
||||||
env["MEM_FREE"] = strconv.Itoa(memory.MemAvailable)
|
|
||||||
}
|
|
||||||
partitions := getMountedPartitions()
|
|
||||||
if len(partitions) != 0 {
|
|
||||||
env["MOUNTED_PARTITIONS"] = strconv.Itoa(len(partitions))
|
|
||||||
for i, part := range partitions {
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_DEVICE"] = part.Device
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_MOUNTPOINT"] = part.MountPoint
|
|
||||||
if part.Label != "" {
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_LABEL"] = part.Label
|
|
||||||
}
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_TOTAL_SIZE"] = FormatBytes(part.TotalSize)
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_USED_SIZE"] = FormatBytes(part.UsedSize)
|
|
||||||
env["PARTITION"+strconv.Itoa(i+1)+"_FREE_SIZE"] = FormatBytes(part.FreeSize)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
env["DE_WM"] = GetDEWM()
|
|
||||||
env["USER_SHELL"] = GetShell()
|
|
||||||
env["DISPLAY_PROTOCOL"] = GetDisplayProtocol()
|
|
||||||
monitors := getMonitorResolution()
|
|
||||||
if len(monitors) != 0 {
|
|
||||||
env["CONNECTED_MONITORS"] = strconv.Itoa(len(monitors))
|
|
||||||
for i, monitor := range monitors {
|
|
||||||
env["MONITOR"+strconv.Itoa(i+1)] = monitor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if getGPUName() != "" {
|
|
||||||
env["GPU_MODEL"] = getGPUName()
|
|
||||||
}
|
|
||||||
|
|
||||||
var ret = make([]string, len(env))
|
|
||||||
i := 0
|
|
||||||
for key, value := range env {
|
|
||||||
ret[i] = fmt.Sprintf("%s=%s", key, value)
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/BurntSushi/xgb/xinerama"
|
"github.com/BurntSushi/xgb/xinerama"
|
||||||
"github.com/jackmordaunt/ghw"
|
"github.com/jackmordaunt/ghw"
|
||||||
"github.com/mitchellh/go-ps"
|
"github.com/mitchellh/go-ps"
|
||||||
|
"github.com/moby/sys/mountinfo"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
@@ -27,41 +28,32 @@ type DistroInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getDistroInfo() DistroInfo {
|
func getDistroInfo() DistroInfo {
|
||||||
distroID := ""
|
info := DistroInfo{
|
||||||
|
ID: "unknown",
|
||||||
|
LongName: "Unknown",
|
||||||
|
ShortName: "Unknown",
|
||||||
|
}
|
||||||
|
if strings.TrimSpace(config.DistroName) != "" {
|
||||||
|
info.LongName = strings.TrimSpace(config.DistroName)
|
||||||
|
info.ShortName = strings.TrimSpace(config.DistroName)
|
||||||
|
}
|
||||||
var releaseMap = make(map[string]string)
|
var releaseMap = make(map[string]string)
|
||||||
if _, err := os.Stat("/etc/os-release"); err == nil {
|
if _, err := os.Stat("/etc/os-release"); err == nil {
|
||||||
releaseMap, err = ReadKeyValueFile("/etc/os-release")
|
releaseMap, err = ReadKeyValueFile("/etc/os-release")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return DistroInfo{
|
return info
|
||||||
ID: "unknown",
|
|
||||||
LongName: "Unknown",
|
|
||||||
ShortName: "Unknown",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if value, ok := releaseMap["ID"]; ok {
|
|
||||||
distroID = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch distroID {
|
|
||||||
default:
|
|
||||||
if id, ok := releaseMap["ID"]; ok {
|
if id, ok := releaseMap["ID"]; ok {
|
||||||
if longName, ok := releaseMap["PRETTY_NAME"]; ok {
|
info.ID = id
|
||||||
if shortName, ok := releaseMap["NAME"]; ok {
|
|
||||||
return DistroInfo{
|
|
||||||
ID: id,
|
|
||||||
LongName: longName,
|
|
||||||
ShortName: shortName,
|
|
||||||
}
|
}
|
||||||
|
if longName, ok := releaseMap["PRETTY_NAME"]; ok && info.LongName == "Unknown" {
|
||||||
|
info.LongName = longName
|
||||||
}
|
}
|
||||||
|
if shortName, ok := releaseMap["NAME"]; ok && info.ShortName == "Unknown" {
|
||||||
|
info.ShortName = shortName
|
||||||
}
|
}
|
||||||
}
|
return info
|
||||||
return DistroInfo{
|
|
||||||
ID: "unknown",
|
|
||||||
LongName: "Unknown",
|
|
||||||
ShortName: "Unknown",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDistroAsciiArt() string {
|
func getDistroAsciiArt() string {
|
||||||
@@ -102,7 +94,7 @@ func getDistroAsciiArt() string {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return defaultAscii
|
return defaultAscii
|
||||||
}
|
}
|
||||||
return string(bytes)
|
return strings.TrimRight(string(bytes), "\n\t ")
|
||||||
} else {
|
} else {
|
||||||
return defaultAscii
|
return defaultAscii
|
||||||
}
|
}
|
||||||
@@ -127,7 +119,8 @@ func getCPUThreads() int {
|
|||||||
return int(cpu.TotalThreads)
|
return int(cpu.TotalThreads)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getGPUName() string {
|
func getGPUNames() []string {
|
||||||
|
var ret []string
|
||||||
null, _ := os.Open(os.DevNull)
|
null, _ := os.Open(os.DevNull)
|
||||||
serr := os.Stderr
|
serr := os.Stderr
|
||||||
os.Stderr = null
|
os.Stderr = null
|
||||||
@@ -135,14 +128,17 @@ func getGPUName() string {
|
|||||||
defer null.Close()
|
defer null.Close()
|
||||||
os.Stderr = serr
|
os.Stderr = serr
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return nil
|
||||||
|
}
|
||||||
|
for i, graphics := range gpu.GraphicsCards {
|
||||||
|
if slices.Contains(config.HiddenGPUS, i+1) {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
for _, graphics := range gpu.GraphicsCards {
|
|
||||||
if graphics.DeviceInfo != nil {
|
if graphics.DeviceInfo != nil {
|
||||||
return graphics.DeviceInfo.Product.Name
|
ret = append(ret, graphics.DeviceInfo.Product.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ""
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
type Memory struct {
|
type Memory struct {
|
||||||
@@ -329,11 +325,9 @@ type partition struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getMountedPartitions() []partition {
|
func getMountedPartitions() []partition {
|
||||||
partuuids, err := os.ReadDir("/dev/disk/by-partuuid")
|
mounts, err := mountinfo.GetMounts(func(info *mountinfo.Info) (skip, stop bool) {
|
||||||
if err != nil {
|
return !strings.HasPrefix(info.Source, "/dev/"), false
|
||||||
return nil
|
})
|
||||||
}
|
|
||||||
|
|
||||||
partlabels, err := os.ReadDir("/dev/disk/by-partlabel")
|
partlabels, err := os.ReadDir("/dev/disk/by-partlabel")
|
||||||
if err != nil && !os.IsNotExist(err) {
|
if err != nil && !os.IsNotExist(err) {
|
||||||
return nil
|
return nil
|
||||||
@@ -346,47 +340,23 @@ func getMountedPartitions() []partition {
|
|||||||
}
|
}
|
||||||
labels[link] = entry.Name()
|
labels[link] = entry.Name()
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes, err := os.ReadFile("/proc/mounts")
|
|
||||||
if err != nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
mountsRaw := strings.Split(string(bytes), "\n")
|
|
||||||
mounts := make(map[string]string)
|
|
||||||
|
|
||||||
for i := 0; i < len(mountsRaw); i++ {
|
|
||||||
split := strings.Split(mountsRaw[i], " ")
|
|
||||||
if len(split) <= 2 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
mounts[split[0]] = split[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
var partitions []partition
|
var partitions []partition
|
||||||
for _, entry := range partuuids {
|
for _, entry := range mounts {
|
||||||
link, err := filepath.EvalSymlinks(filepath.Join("/dev/disk/by-partuuid/", entry.Name()))
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if _, ok := mounts[link]; !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p := partition{
|
p := partition{
|
||||||
link,
|
entry.Source,
|
||||||
mounts[link],
|
entry.Mountpoint,
|
||||||
"",
|
"",
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
}
|
}
|
||||||
if value, ok := labels[link]; ok {
|
if value, ok := labels[entry.Source]; ok {
|
||||||
p.Label = value
|
p.Label = value
|
||||||
}
|
}
|
||||||
buf := new(syscall.Statfs_t)
|
buf := new(syscall.Statfs_t)
|
||||||
err = syscall.Statfs(p.MountPoint, buf)
|
err = syscall.Statfs(p.MountPoint, buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
continue
|
||||||
}
|
}
|
||||||
totalBlocks := buf.Blocks
|
totalBlocks := buf.Blocks
|
||||||
freeBlocks := buf.Bfree
|
freeBlocks := buf.Bfree
|
||||||
|
|||||||
Reference in New Issue
Block a user