# -*- python -*- # A simple xpybar configuration example that tests the plugins import os from plugins.uptime import Uptime from plugins.loadavg import AverageLoad from plugins.users import Users from plugins.pacman import Pacman from plugins.uname import Uname from plugins.df import Discs from plugins.mem import Memory from plugins.discstats import DiscStats from plugins.xdisplay import XDisplay from plugins.moc import MOC OUTPUT, HEIGHT, YPOS, TOP = 0, 24, 24, True def redraw(): bar.clear() time = spawn_read('date', '+%Y-(%m)%b-%d %T, %a w%V, %Z') uptime_ = Uptime() uptime = '%id %02i:%02i:%0.2f' % uptime_.uptime prc_idle = uptime_.average_idle_seconds / uptime_.uptime_seconds tot_idle = '%id %02i:%02i:%0.2f' % uptime_.total_idle avg_idle = '%id %02i:%02i:%0.2f' % uptime_.average_idle uptime = 'Uptime: %s' % (uptime) idle = 'Idle time: %s : %s : %1.2f%%' % (avg_idle, tot_idle, prc_idle * 100) loadavg_ = AverageLoad() avg_5 = int(loadavg_.average_avg_5_min * 100) avg_10 = int(loadavg_.average_avg_10_min * 100) avg_15 = int(loadavg_.average_avg_15_min * 100) act_tasks = loadavg_.active_tasks tot_tasks = loadavg_.total_tasks last_pid = loadavg_.last_pid loadavg = 'Average load: %2i%% %2i%% %2i%% %i/%i %i' loadavg %= (avg_5, avg_10, avg_15, act_tasks, tot_tasks, last_pid) users_ = Users().users you = os.environ['USER'] def colour_user(user): if user == 'root': return '\033[31m%s\033[39m' elif not user == you: return '\033[33m%s\033[39m' else: return '%s' users = ['%s{%i}' % (colour_user(u) % u, len(users_[u])) for u in users_.keys()] users = 'Users: %s' % (' '.join(users)) have_linux_libre, have_pacman = True, True linux_installed, linux_latest = None, None try: linux_installed = Pacman('linux-libre', True) except: have_linux_libre = False try: linux_installed = Pacman('linux', True) except: have_pacman = False if have_pacman: linux_latest = Pacman('linux-libre' if have_linux_libre else 'linux', False) uname_ = Uname() nodename = uname_.nodename kernel_release = uname_.kernel_release operating_system = uname_.operating_system if have_pacman: linux_running = kernel_release.split('-') linux_running, kernel_release = linux_running[:2], linux_running[2:] linux_running = '-'.join(linux_running) kernel_release = '-' + '-'.join(kernel_release) linux_installed = linux_installed.version linux_latest = linux_latest.version if linux_installed == linux_latest: if linux_running == linux_installed: linux_running = '\033[32m%s\033[39m' % linux_running else: if linux_running == linux_installed: linux_running = '\033[33m%s\033[39m' % linux_running else: linux_running = '\033[31m%s\033[39m' % linux_running kernel_release = linux_running + kernel_release uname = '%s %s %s' uname %= (nodename, kernel_release, operating_system) memory_ = Memory() def colourise(value, format = '%.0f'): colour = '39' if value > 30: colour = '32' if value > 50: colour = '33' if value > 80: colour = '31' return '\033[%sm%s%%\033[0m' % (colour, format % value) mem = 'Mem: ' + colourise(memory_.mem_used * 100 / memory_.mem_total) swp = 'Swp: ' + colourise(memory_.swap_used * 100 / memory_.swap_total) shm = 'Shm: ' + colourise(memory_.shmem * 100 / memory_.mem_total) discs_ = Discs() discs = [] discs_used = 0 discs_total = 0 for fs in discs_.filesystems: if '/' not in fs: continue disc = discs_.filesystems[fs] mp = disc.mountpoint if mp in ['/boot', '/rescue']: continue mp = mp.split('/')[-1] if mp == '': mp = '/' discs_used += disc.used discs_total += disc.blocks use = disc.used * 100 / disc.blocks colour, colour_ = '39', '39' if use < 50: colour = '32' if use > 75: colour = '33' if use > 95: colour = '31' if use > 99: colour, colour_ = '31', '31' discs.append((mp, use, colour, colour_)) discs.sort(key = lambda d : d[0]) discs = ['\033[%sm%s:\033[%sm%.1f\033[%sm%%\033[0m' % (d[3], d[0], d[2], d[1], d[3]) for d in discs] use = discs_used * 100 / discs_total colour = '39' if use < 50: colour = '32' if use > 75: colour = '33' if use > 95: colour = '31' if use > 99: colour = '41;33' discs = 'df: %s : \033[%sm%.2f\033[0m%%' % (' '.join(discs), colour, use) discstats_ = DiscStats() discstats = [] for disc in discstats_.devices.keys(): if disc.startswith('sd') or disc.startswith('hd'): disc = discstats_.devices[disc] discstats.append((disc.device, disc.io_current)) def colourise(value): colour = '39' if value >= 1: colour = '32' if value >= 3: colour = '33' if value >= 5: colour = '31' return '\033[%sm%i\033[0m' % (colour, value) discstats.sort(key = lambda x : x[0]) discstats = ['%s:%s' % (d[2:], colourise(i)) for d, i in discstats] discstats = 'Disc stats: %s' % (' '.join(discstats)) xdisplay = ':%i' % XDisplay().display moc_ = MOC().state moc = {None : 'dead', MOC.STOPPED : 'stopped', MOC.PAUSED : 'paused', MOC.PLAYING : 'playing'} moc = 'Moc: %s' % moc[moc_] text = '%s │ %s │ %s │ %s │ %s │ %s %s │ %s │ %s │ %s │ %s\n%s │ %s' text %= (time, uptime, idle, loadavg, users, uname, xdisplay, mem, swp, shm, moc, discs, discstats) bar.draw_coloured_text(0, 10, 0, 2, text)