From 7c493dc9f984dd415b3d78f6e2046877be43bca4 Mon Sep 17 00:00:00 2001 From: capcreepergr Date: Wed, 19 Jun 2024 18:18:45 +0300 Subject: [PATCH] Added filesystem label detection, btrfs subvolumes should now be grouped under one partition and the filesystem type will now be shown if enabled in config.yaml --- config/config.yaml | 1 + config/fetch_script.sh | 15 ++++++++++++--- main.go | 5 +++++ utils.go | 22 ++++++++++++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index b604356..1a8bf5c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -3,4 +3,5 @@ fetch_script: auto ansii_colors: [] force_config_ansii: false dependency_warning: true +show_fs_type: true hidden_gpus: [] diff --git a/config/fetch_script.sh b/config/fetch_script.sh index b755f4a..67b90f7 100644 --- a/config/fetch_script.sh +++ b/config/fetch_script.sh @@ -15,12 +15,21 @@ for i in $(seq ${MOUNTED_PARTITIONS}); do device="PARTITION${i}_DEVICE" mountpoint="PARTITION${i}_MOUNTPOINT" label="PARTITION${i}_LABEL" + type="PARTITION${i}_TYPE" total="PARTITION${i}_TOTAL_SIZE" used="PARTITION${i}_USED_SIZE" - if [ -z "${!label}" ]; then - echo -e "${C3}Partition ${!mountpoint}: ${C4}${!used}/${!total}" + if [ -z "${!type}" ]; then + if [ -z "${!label}" ]; then + echo -e "${C3}Partition ${!mountpoint}: ${C4}${!used}/${!total}" + else + echo -e "${C3}Partition ${!label}: ${C4}${!used}/${!total}" + fi else - echo -e "${C3}Partition ${!label}: ${C4}${!used}/${!total}" + if [ -z "${!label}" ]; then + echo -e "${C3}Partition ${!mountpoint} (${!type}): ${C4}${!used}/${!total}" + else + echo -e "${C3}Partition ${!label} (${!type}): ${C4}${!used}/${!total}" + fi fi done if [ ! -z "$DISPLAY_PROTOCOL" ]; then diff --git a/main.go b/main.go index ea6ac9e..ee2d810 100644 --- a/main.go +++ b/main.go @@ -22,6 +22,7 @@ var config = StormfetchConfig{ AnsiiColors: make([]int, 0), ForceConfigAnsii: false, DependencyWarning: true, + ShowFSType: false, HiddenGPUS: make([]int, 0), } @@ -32,6 +33,7 @@ type StormfetchConfig struct { AnsiiColors []int `yaml:"ansii_colors"` ForceConfigAnsii bool `yaml:"force_config_ansii"` DependencyWarning bool `yaml:"dependency_warning"` + ShowFSType bool `yaml:"show_fs_type"` HiddenGPUS []int `yaml:"hidden_gpus"` } @@ -128,6 +130,9 @@ func SetupFetchEnv() []string { if part.Label != "" { env["PARTITION"+strconv.Itoa(i+1)+"_LABEL"] = part.Label } + if part.Type != "" && config.ShowFSType { + env["PARTITION"+strconv.Itoa(i+1)+"_TYPE"] = part.Type + } 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) diff --git a/utils.go b/utils.go index 5bdd168..08ab5e4 100644 --- a/utils.go +++ b/utils.go @@ -319,6 +319,7 @@ type partition struct { Device string MountPoint string Label string + Type string TotalSize uint64 UsedSize uint64 FreeSize uint64 @@ -328,6 +329,10 @@ func getMountedPartitions() []partition { mounts, err := mountinfo.GetMounts(func(info *mountinfo.Info) (skip, stop bool) { return !strings.HasPrefix(info.Source, "/dev/"), false }) + fslabels, err := os.ReadDir("/dev/disk/by-label") + if err != nil && !os.IsNotExist(err) { + return nil + } partlabels, err := os.ReadDir("/dev/disk/by-partlabel") if err != nil && !os.IsNotExist(err) { return nil @@ -340,16 +345,33 @@ func getMountedPartitions() []partition { } labels[link] = entry.Name() } + for _, entry := range fslabels { + link, err := filepath.EvalSymlinks(filepath.Join("/dev/disk/by-label/", entry.Name())) + if err != nil { + continue + } + labels[link] = entry.Name() + } var partitions []partition for _, entry := range mounts { p := partition{ entry.Source, entry.Mountpoint, "", + entry.FSType, 0, 0, 0, } + skip := false + for _, part := range partitions { + if part.Device == p.Device { + skip = true + } + } + if skip { + continue + } if value, ok := labels[entry.Source]; ok { p.Label = value }