i3-blocks-go/blocks/du/main.go

73 lines
1.6 KiB
Go
Raw Normal View History

2022-08-29 10:38:47 +02:00
package main
import (
2022-08-30 15:42:28 +02:00
"flag"
2022-08-29 10:38:47 +02:00
"fmt"
r "gitnet.fr/deblan/i3-blocks-go/rendering"
"os"
"os/exec"
"strconv"
"strings"
"sync"
)
func DiskUsage(path string) int {
outb, _ := exec.Command("df", "-h", path).Output()
output := string(outb)
lines := strings.Split(output, "\n")
columns := strings.Fields(lines[1])
value, _ := strconv.Atoi(strings.ReplaceAll(columns[4], "%", ""))
return value
}
func runFileExplorer(wg *sync.WaitGroup, path string) {
defer wg.Done()
command := exec.Command("xdg-open", path)
command.Run()
}
func main() {
2022-08-30 15:42:28 +02:00
argBlockName := flag.String("block", "du", "block name")
argName := flag.String("name", "du", "block name")
argMountPoint := flag.String("mount-point", "du", "block name")
argLimitWarning := flag.Int("limit-warning", 70, "limit for warning")
argLimitDanger := flag.Int("limit-danger", 90, "limit for danger")
flag.Parse()
2022-08-29 10:38:47 +02:00
2022-08-30 15:42:28 +02:00
used := DiskUsage(*argMountPoint)
2022-08-29 10:38:47 +02:00
fbUsed := r.FB{Background: r.Color("black1")}
var wg sync.WaitGroup
if os.Getenv("BLOCK_BUTTON") == "1" {
wg.Add(1)
2022-08-30 15:42:28 +02:00
go runFileExplorer(&wg, fmt.Sprintf("file://%s", *argMountPoint))
2022-08-29 10:38:47 +02:00
}
2022-08-30 15:42:28 +02:00
if used < *argLimitWarning {
2022-08-29 10:38:47 +02:00
fbUsed.Foreground = r.Color("green")
2022-08-30 15:42:28 +02:00
} else if used < *argLimitDanger {
2022-08-29 10:38:47 +02:00
fbUsed.Foreground = r.Color("orange")
} else {
fbUsed.Foreground = r.Color("red")
}
label := r.TextWithPadding(
2022-08-30 15:42:28 +02:00
*argName,
2022-08-29 10:38:47 +02:00
r.FB{
Foreground: r.Color("grey1"),
Background: r.Color("black2"),
},
)
value := r.TextWithPadding(fmt.Sprintf("%d%%", used), fbUsed)
options := r.NewBlockOptions()
options.FullText = fmt.Sprintf("%s%s", label, value)
2022-08-30 15:42:28 +02:00
block := r.Block(*argBlockName, options)
2022-08-29 10:38:47 +02:00
fmt.Println(block)
wg.Wait()
}