diff options
Diffstat (limited to 'home/config')
| -rw-r--r-- | home/config/i3/bar/i3status.go | 69 |
1 files changed, 58 insertions, 11 deletions
diff --git a/home/config/i3/bar/i3status.go b/home/config/i3/bar/i3status.go index 10f62d8..65786fd 100644 --- a/home/config/i3/bar/i3status.go +++ b/home/config/i3/bar/i3status.go @@ -11,11 +11,13 @@ import ( "barista.run" "barista.run/bar" "barista.run/colors" + "barista.run/group" "barista.run/modules/battery" "barista.run/modules/clock" "barista.run/modules/diskspace" "barista.run/modules/funcs" "barista.run/modules/netinfo" + "barista.run/modules/systemd" "barista.run/modules/volume" "barista.run/modules/volume/pulseaudio" "barista.run/modules/wlan" @@ -34,6 +36,43 @@ func main() { }) mdi.Load() // repo path will be inserted at build time + // Display status of several services + updateIcon := pango.Icon("mdi-update") + garbageFullIcon := pango.Icon("mdi-delete") + garbageEmptyingIcon := pango.Icon("mdi-delete-restore") + garbageEmptyIcon := pango.Icon("mdi-delete-outline") + barista.Add(group.Simple(systemd.Service("nixos-upgrade").Output(func(i systemd.ServiceInfo) bar.Output { + state := i.UnitInfo.State + var colorScheme string + switch { + case state == systemd.StateInactive: + colorScheme = "good" + case state == systemd.StateActivating: + colorScheme = "degraded" + default: + colorScheme = "bad" + } + return outputs.Pango(updateIcon).Color(colors.Scheme(colorScheme)) + }), + + systemd.Service("nixos-upgrade").Output(func(i systemd.ServiceInfo) bar.Output { + state := i.UnitInfo.State + var colorScheme string + var output *pango.Node + switch { + case state == systemd.StateInactive: + colorScheme = "good" + output = garbageEmptyIcon + case state == systemd.StateActivating: + colorScheme = "degraded" + output = garbageEmptyingIcon + default: + colorScheme = "bad" + output = garbageFullIcon + } + return outputs.Pango(output).Color(colors.Scheme(colorScheme)) + }))) + // Display space left on / storageIcon := pango.Icon("mdi-database") barista.Add(diskspace.New("/").Output(func(i diskspace.Info) bar.Output { @@ -89,36 +128,44 @@ func main() { wifiRefreshIcon := pango.Icon("mdi-wifi-refresh") wifiOnIcon := pango.Icon("mdi-wifi") barista.Add(wlan.Named("wlp2s0").Output(func(w wlan.Info) bar.Output { + var output *pango.Node + var colorScheme string switch { case w.Connected(): - return outputs.Pango(wifiOnIcon, pango.Textf(" %s", w.SSID)).Color(colors.Scheme("good")) + output = wifiOnIcon.AppendTextf(" %s", w.SSID) + colorScheme = "good" case w.Connecting(): - return outputs.Pango(wifiRefreshIcon).Color(colors.Scheme("degraded")) - case w.Enabled(): - return outputs.Pango(wifiOffIcon).Color(colors.Scheme("bad")) + output = wifiRefreshIcon + colorScheme = "degraded" default: - return nil + output = wifiOffIcon + colorScheme = "bad" } + return outputs.Pango(output).Color(colors.Scheme(colorScheme)) })) // Display the ethernet status ethernetCableOnIcon := pango.Icon("mdi-ethernet-cable") ethernetCableOffIcon := pango.Icon("mdi-ethernet-cable-off") barista.Add(netinfo.Prefix("e").Output(func(s netinfo.State) bar.Output { + var output *pango.Node + var colorScheme string switch { case s.Connected(): ip := "<no ip>" if len(s.IPs) > 0 { ip = s.IPs[0].String() } - return outputs.Pango(ethernetCableOnIcon, pango.Textf(" %s", ip)).Color(colors.Scheme("good")) + output = ethernetCableOnIcon.AppendTextf(" %s", ip) + colorScheme = "good" case s.Connecting(): - return outputs.Pango(ethernetCableOnIcon).Color(colors.Scheme("degraded")) - case s.Enabled(): - return outputs.Pango(ethernetCableOffIcon).Color(colors.Scheme("bad")) + output = ethernetCableOnIcon + colorScheme = "degraded" default: - return nil + output = ethernetCableOffIcon + colorScheme = "bad" } + return outputs.Pango(output).Color(colors.Scheme(colorScheme)) })) // Display the battery status @@ -221,7 +268,7 @@ func main() { microphoneOffIcon := pango.Icon("mdi-microphone-off") microphoneIcon := pango.Icon("mdi-microphone") barista.Add(volume.New(pulseaudio.DefaultSource()).Output(func(v volume.Volume) bar.Output { - volume := v.Pct() // the value returned by the pulseaudio may be weird + volume := v.Pct() // the value returned by pulseaudio may be weird var icon *pango.Node if volume == 0 || v.Mute { icon = microphoneOffIcon |
