#!/usr/bin/env python3 """ Debugging script """ import i3ipc import os import psutil # import alsaaudio from time import time import subprocess i3 = i3ipc.Connection() lemonbar = subprocess.Popen(["lemonbar", "-b"], stdin=subprocess.PIPE) # Utils def upChart(p): block = " ▁▂▃▄▅▆▇█" return block[round(p * (len(block) - 1))] def humanSizeOf(num, suffix="B"): # TODO Credit for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]: if abs(num) < 1024.0: return "%3.0f%2s%s" % (num, unit, suffix) num /= 1024.0 return "%.0f%2s%s" % (num, "Yi", suffix) # Values mode = "" container = i3.get_tree().find_focused() workspaces = i3.get_workspaces() outputs = i3.get_outputs() username = os.environ["USER"] hostname = os.environ["HOSTNAME"] if "-" in hostname: hostname = hostname.split("-")[-1] oldNetIO = dict() oldTime = time() def update(): activeOutputs = sorted( sorted(list(filter(lambda o: o.active, outputs)), key=lambda o: o.rect.y), key=lambda o: o.rect.x, ) z = "" for aOutput in range(len(activeOutputs)): output = activeOutputs[aOutput] # Mode || Workspaces t = [] if mode != "": t.append(mode) else: t.append( " ".join( [ (w.name.upper() if w.focused else w.name) for w in workspaces if w.output == output.name ] ) ) # Windows Title # if container: # t.append(container.name) # CPU t.append( "C" + "".join([upChart(p / 100) for p in psutil.cpu_percent(percpu=True)]) ) # Memory t.append( "M" + str(round(psutil.virtual_memory().percent)) + "% " + "S" + str(round(psutil.swap_memory().percent)) + "%" ) # Disks d = [] for disk in psutil.disk_partitions(): e = "" if disk.device.startswith("/dev/sd"): e += "S" + disk.device[-2:].upper() elif disk.device.startswith("/dev/mmcblk"): e += "M" + disk.device[-3] + disk.device[-1] else: e += "?" e += " " e += str(round(psutil.disk_usage(disk.mountpoint).percent)) + "%" d.append(e) t.append(" ".join(d)) # Network netStats = psutil.net_if_stats() netIO = psutil.net_io_counters(pernic=True) net = [] for iface in filter(lambda i: i != "lo" and netStats[i].isup, netStats.keys()): s = "" if iface.startswith("eth"): s += "E" elif iface.startswith("wlan"): s += "W" else: s += "?" s += " " now = time() global oldNetIO, oldTime sent = ( (oldNetIO[iface].bytes_sent if iface in oldNetIO else 0) - (netIO[iface].bytes_sent if iface in netIO else 0) ) / (oldTime - now) recv = ( (oldNetIO[iface].bytes_recv if iface in oldNetIO else 0) - (netIO[iface].bytes_recv if iface in netIO else 0) ) / (oldTime - now) s += ( "↓" + humanSizeOf(abs(recv), "B/s") + " ↑" + humanSizeOf(abs(sent), "B/s") ) oldNetIO = netIO oldTime = now net.append(s) t.append(" ".join(net)) # Battery if os.path.isdir("/sys/class/power_supply/BAT0"): with open("/sys/class/power_supply/BAT0/charge_now") as f: charge_now = int(f.read()) with open("/sys/class/power_supply/BAT0/charge_full_design") as f: charge_full = int(f.read()) t.append("B" + str(round(100 * charge_now / charge_full)) + "%") # Volume # t.append('V ' + str(alsaaudio.Mixer('Master').getvolume()[0]) + '%') t.append(username + "@" + hostname) # print(' - '.join(t)) # t = [output.name] z += " - ".join(t) + "%{S" + str(aOutput + 1) + "}" # lemonbar.stdin.write(bytes(' - '.join(t), 'utf-8')) # lemonbar.stdin.write(bytes('%{S' + str(aOutput + 1) + '}', 'utf-8')) lemonbar.stdin.write(bytes(z + "\n", "utf-8")) lemonbar.stdin.flush() # Event listeners def on_mode(i3, e): global mode if e.change == "default": mode = "" else: mode = e.change update() i3.on("mode", on_mode) # def on_window_focus(i3, e): # global container # container = e.container # update() # # i3.on("window::focus", on_window_focus) def on_workspace_focus(i3, e): global workspaces workspaces = i3.get_workspaces() update() i3.on("workspace::focus", on_workspace_focus) # Starting update() i3.main()