diff options
| -rw-r--r-- | statusbar.conf | 1 | ||||
| -rw-r--r-- | statusbar.go | 88 |
2 files changed, 64 insertions, 25 deletions
diff --git a/statusbar.conf b/statusbar.conf index b4fac2c..7163597 100644 --- a/statusbar.conf +++ b/statusbar.conf @@ -1,3 +1,4 @@ +sections = [ "music", "ip", "mounts", "clock" ] delay = 10 separator = " | " diff --git a/statusbar.go b/statusbar.go index df619cb..ee1a87f 100644 --- a/statusbar.go +++ b/statusbar.go @@ -15,6 +15,7 @@ import ( ) type Config struct { + Sections []string Delay int Separator string IP IPConfig @@ -106,8 +107,8 @@ func ip(interfaceName string, IPv4Only bool) string { } if IPv4Only { if ip.To4() != nil { - b.WriteString(ip.String()) b.WriteString(sep) + b.WriteString(ip.String()) sep = " " } } else { @@ -140,7 +141,7 @@ func statusMPD() int { cmd := exec.Command("mpc", "status") out, err := cmd.Output() if err != nil { - panic(err) + return -1 } sOut := string(out) if strings.Contains(sOut, "playing") { @@ -152,6 +153,51 @@ func statusMPD() int { } } +func buildClock(config Config) string { + var b strings.Builder + b.WriteString(config.Clock.Label) + b.WriteString(clock(config.Clock.Format)) + return b.String() +} + +func buildIP(config Config) string { + var b strings.Builder + b.WriteString(config.IP.Label) + b.WriteString("[ ") + b.WriteString(ips(config.IP.Interfaces, config.IP.IPv4Only)) + b.WriteString(" ]") + return b.String() +} + +func buildMounts(config Config) string { + var b strings.Builder + b.WriteString(config.Mounts.Label) + b.WriteString("[ ") + b.WriteString(diskSizes(config.Mounts.MountPoints)) + b.WriteString(" ]") + return b.String() +} + +func buildMusic(config Config) string { + var b strings.Builder + isMPD := true + switch statusMPD() { + case 0: + b.WriteString(config.Music.LabelPlaying) + case 1: + b.WriteString(config.Music.LabelPaused) + case 2: + b.WriteString(config.Music.LabelStopped) + default: + isMPD = false + } + if isMPD { + b.WriteString(nowPlayingMPD()) + b.WriteString(config.Separator) + } + return b.String() +} + func main() { var configPath = "/etc/statusbar.conf" var content []byte @@ -171,30 +217,22 @@ func main() { } for true { var b strings.Builder - switch statusMPD() { - case 0: - b.WriteString(config.Music.LabelPlaying) - case 1: - b.WriteString(config.Music.LabelPaused) - case 2: - b.WriteString(config.Music.LabelStopped) - default: - b.WriteString("Unknown MPD status") + for i, section := range config.Sections { + switch section { + case "clock": + b.WriteString(buildClock(config)) + case "ip": + b.WriteString(buildIP(config)) + case "mounts": + b.WriteString(buildMounts(config)) + case "music": + b.WriteString(buildMusic(config)) + default: + } + if i < len(config.Sections) - 1 { + b.WriteString(config.Separator) + } } - b.WriteString(nowPlayingMPD()) - b.WriteString(config.Separator) - b.WriteString(config.IP.Label) - b.WriteString("[ ") - b.WriteString(ips(config.IP.Interfaces, config.IP.IPv4Only)) - b.WriteString(" ]") - b.WriteString(config.Separator) - b.WriteString(config.Mounts.Label) - b.WriteString("[ ") - b.WriteString(diskSizes(config.Mounts.MountPoints)) - b.WriteString(" ]") - b.WriteString(config.Separator) - b.WriteString(config.Clock.Label) - b.WriteString(clock(config.Clock.Format)) fmt.Println(b.String()) time.Sleep(time.Duration(config.Delay) * time.Second) } |
