Ignore Vim swap files
This commit is contained in:
parent
0b86b3df8c
commit
691709e2dd
9 changed files with 2 additions and 319 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
||||||
|
# Vim swap files
|
||||||
*swp
|
*swp
|
||||||
|
*~
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,120 +0,0 @@
|
||||||
# pylint: disable=C0111,R0903
|
|
||||||
|
|
||||||
"""Displays battery status, remaining percentage and charging information.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
* battery.device : Comma-separated list of battery devices to read information from (defaults to auto for auto-detection)
|
|
||||||
* battery.warning : Warning threshold in % of remaining charge (defaults to 20)
|
|
||||||
* battery.critical : Critical threshold in % of remaining charge (defaults to 10)
|
|
||||||
* battery.showdevice : If set to "true", add the device name to the widget (defaults to False)
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import glob
|
|
||||||
|
|
||||||
import bumblebee.input
|
|
||||||
import bumblebee.output
|
|
||||||
import bumblebee.engine
|
|
||||||
import bumblebee.util
|
|
||||||
|
|
||||||
try:
|
|
||||||
import power
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
class Module(bumblebee.engine.Module):
|
|
||||||
def __init__(self, engine, config):
|
|
||||||
widgets = []
|
|
||||||
super(Module, self).__init__(engine, config, widgets)
|
|
||||||
self._batteries = self.parameter("device", "auto").split(",")
|
|
||||||
if self._batteries[0] == "auto":
|
|
||||||
self._batteries = glob.glob("/sys/class/power_supply/BAT*")
|
|
||||||
else:
|
|
||||||
self._batteries = [ "/sys/class/power_supply/{}".format(b) for b in self._batteries ]
|
|
||||||
if len(self._batteries) == 0:
|
|
||||||
self._batteries = [ "/sys/class/power_supply/BAT0" ]
|
|
||||||
self.update(widgets)
|
|
||||||
engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE,
|
|
||||||
cmd="gnome-power-statistics")
|
|
||||||
|
|
||||||
def update(self, widgets):
|
|
||||||
new_widgets = []
|
|
||||||
for path in self._batteries:
|
|
||||||
widget = self.widget(path)
|
|
||||||
if not widget:
|
|
||||||
widget = bumblebee.output.Widget(full_text=self.capacity, name=path)
|
|
||||||
new_widgets.append(widget)
|
|
||||||
self.capacity(widget)
|
|
||||||
while len(widgets) > 0: del widgets[0]
|
|
||||||
for widget in new_widgets:
|
|
||||||
widgets.append(widget)
|
|
||||||
self._widgets = widgets
|
|
||||||
|
|
||||||
def remaining(self):
|
|
||||||
estimate = 0.0
|
|
||||||
try:
|
|
||||||
estimate = power.PowerManagement().get_time_remaining_estimate()
|
|
||||||
# do not show remaining if on AC
|
|
||||||
if estimate == power.common.TIME_REMAINING_UNLIMITED:
|
|
||||||
return None
|
|
||||||
if estimate == power.common.TIME_REMAINING_UNKNOWN:
|
|
||||||
return "n/a"
|
|
||||||
except Exception:
|
|
||||||
return "n/a"
|
|
||||||
return bumblebee.util.durationfmt(estimate*60, shorten=True, suffix=True) # estimate is in minutes
|
|
||||||
|
|
||||||
def capacity(self, widget):
|
|
||||||
widget.set("capacity", -1)
|
|
||||||
widget.set("ac", False)
|
|
||||||
if not os.path.exists(widget.name):
|
|
||||||
widget.set("capacity", 100)
|
|
||||||
widget.set("ac", True)
|
|
||||||
return "ac"
|
|
||||||
capacity = 100
|
|
||||||
try:
|
|
||||||
with open("{}/capacity".format(widget.name)) as f:
|
|
||||||
capacity = int(f.read())
|
|
||||||
except IOError:
|
|
||||||
return "n/a"
|
|
||||||
capacity = capacity if capacity < 100 else 100
|
|
||||||
widget.set("capacity", capacity)
|
|
||||||
if bumblebee.util.asbool(self.parameter("showdevice", False)):
|
|
||||||
widget.set("theme.minwidth", "100% ({})".format(os.path.basename(widget.name)))
|
|
||||||
return "{}% ({})".format(capacity, os.path.basename(widget.name))
|
|
||||||
widget.set("theme.minwidth", "100%")
|
|
||||||
|
|
||||||
remaining = None
|
|
||||||
if bumblebee.util.asbool(self.parameter("showremaining", True)):
|
|
||||||
remaining = self.remaining()
|
|
||||||
|
|
||||||
return "{}%{}".format(capacity, "" if not remaining else " ({})".format(remaining))
|
|
||||||
|
|
||||||
def state(self, widget):
|
|
||||||
state = []
|
|
||||||
capacity = widget.get("capacity")
|
|
||||||
|
|
||||||
if capacity < 0:
|
|
||||||
return ["critical", "unknown"]
|
|
||||||
|
|
||||||
if capacity < int(self.parameter("critical", 10)):
|
|
||||||
state.append("critical")
|
|
||||||
elif capacity < int(self.parameter("warning", 20)):
|
|
||||||
state.append("warning")
|
|
||||||
|
|
||||||
if widget.get("ac"):
|
|
||||||
state.append("AC")
|
|
||||||
else:
|
|
||||||
charge = ""
|
|
||||||
with open("{}/status".format(widget.name)) as f:
|
|
||||||
charge = f.read().strip()
|
|
||||||
if charge == "Discharging":
|
|
||||||
state.append("discharging-{}".format(min([10, 25, 50, 80, 100] , key=lambda i:abs(i-capacity))))
|
|
||||||
else:
|
|
||||||
if capacity > 95:
|
|
||||||
state.append("charged")
|
|
||||||
else:
|
|
||||||
state.append("charging")
|
|
||||||
|
|
||||||
return state
|
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
|
@ -1,100 +0,0 @@
|
||||||
# pylint: disable=C0111,R0903
|
|
||||||
|
|
||||||
"""Displays network IO for interfaces.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
* traffic.exclude: Comma-separated list of interface prefixes to exclude (defaults to "lo,virbr,docker,vboxnet,veth")
|
|
||||||
* traffic.states: Comma-separated list of states to show (prefix with "^" to invert - i.e. ^down -> show all devices that are not in state down)
|
|
||||||
"""
|
|
||||||
|
|
||||||
import re
|
|
||||||
import psutil
|
|
||||||
import netifaces
|
|
||||||
|
|
||||||
import bumblebee.util
|
|
||||||
import bumblebee.input
|
|
||||||
import bumblebee.output
|
|
||||||
import bumblebee.engine
|
|
||||||
|
|
||||||
class Module(bumblebee.engine.Module):
|
|
||||||
def __init__(self, engine, config):
|
|
||||||
widgets = []
|
|
||||||
super(Module, self).__init__(engine, config, widgets)
|
|
||||||
self._exclude = tuple(filter(len, self.parameter("exclude", "lo,virbr,docker,vboxnet,veth").split(",")))
|
|
||||||
self._status = ""
|
|
||||||
|
|
||||||
self._showname = self.parameter("showname", "True")
|
|
||||||
self._prev = {}
|
|
||||||
self._states = {}
|
|
||||||
self._states["include"] = []
|
|
||||||
self._states["exclude"] = []
|
|
||||||
for state in tuple(filter(len, self.parameter("states", "").split(","))):
|
|
||||||
if state[0] == "^":
|
|
||||||
self._states["exclude"].append(state[1:])
|
|
||||||
else:
|
|
||||||
self._states["include"].append(state)
|
|
||||||
self._update_widgets(widgets)
|
|
||||||
|
|
||||||
def state(self, widget):
|
|
||||||
if "traffic.rx" in widget.name:
|
|
||||||
return "rx"
|
|
||||||
if "traffic.tx" in widget.name:
|
|
||||||
return "tx"
|
|
||||||
return self._status
|
|
||||||
|
|
||||||
def update(self, widgets):
|
|
||||||
self._update_widgets(widgets)
|
|
||||||
|
|
||||||
def create_widget(self, widgets, name, txt=None, attributes={}):
|
|
||||||
widget = bumblebee.output.Widget(name=name)
|
|
||||||
widget.full_text(txt)
|
|
||||||
widgets.append(widget)
|
|
||||||
|
|
||||||
for key in attributes:
|
|
||||||
widget.set(key, attributes[key])
|
|
||||||
|
|
||||||
return widget
|
|
||||||
|
|
||||||
def get_addresses(self, intf):
|
|
||||||
retval = []
|
|
||||||
try:
|
|
||||||
for ip in netifaces.ifaddresses(intf).get(netifaces.AF_INET, []):
|
|
||||||
if ip.get("addr", "") != "":
|
|
||||||
retval.append(ip.get("addr"))
|
|
||||||
except Exception:
|
|
||||||
return []
|
|
||||||
return retval
|
|
||||||
|
|
||||||
def _update_widgets(self, widgets):
|
|
||||||
interfaces = [ i for i in netifaces.interfaces() if not i.startswith(self._exclude) ]
|
|
||||||
|
|
||||||
del widgets[:]
|
|
||||||
|
|
||||||
counters = psutil.net_io_counters(pernic=True)
|
|
||||||
for interface in interfaces:
|
|
||||||
if not interface: interface = "lo"
|
|
||||||
state = "down"
|
|
||||||
if len(self.get_addresses(interface)) > 0:
|
|
||||||
state = "up"
|
|
||||||
|
|
||||||
if len(self._states["exclude"]) > 0 and state in self._states["exclude"]: continue
|
|
||||||
if len(self._states["include"]) > 0 and state not in self._states["include"]: continue
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"rx": counters[interface].bytes_recv,
|
|
||||||
"tx": counters[interface].bytes_sent,
|
|
||||||
}
|
|
||||||
|
|
||||||
name = "traffic-{}".format(interface)
|
|
||||||
|
|
||||||
#self.create_widget(widgets, name, interface)
|
|
||||||
|
|
||||||
for direction in ["rx", "tx"]:
|
|
||||||
name = "traffic.{}-{}".format(direction, interface)
|
|
||||||
widget = self.create_widget(widgets, name, attributes={"theme.minwidth": "100.00MB"})
|
|
||||||
prev = self._prev.get(name, 0)
|
|
||||||
speed = bumblebee.util.bytefmt(int(data[direction]) - int(prev))
|
|
||||||
widget.full_text(speed)
|
|
||||||
self._prev[name] = data[direction]
|
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,51 +0,0 @@
|
||||||
{
|
|
||||||
"icons": [ "paxy97", "awesome-fonts" ],
|
|
||||||
"defaults": {
|
|
||||||
"warning": {
|
|
||||||
"fg": "#1d2021",
|
|
||||||
"bg": "#d79921e6"
|
|
||||||
},
|
|
||||||
"critical": {
|
|
||||||
"fg": "#fbf1c7",
|
|
||||||
"bg": "#cc241de6"
|
|
||||||
},
|
|
||||||
"default-separators": false,
|
|
||||||
"separator-block-width": 0
|
|
||||||
},
|
|
||||||
"cycle": [
|
|
||||||
{
|
|
||||||
"fg": "#ebdbb2",
|
|
||||||
"bg": "#171a1ce6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fg": "#fbf1c7",
|
|
||||||
"bg": "#282828e6"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dnf": {
|
|
||||||
"good": {
|
|
||||||
"fg": "#002b36",
|
|
||||||
"bg": "#859900e6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"battery": {
|
|
||||||
"charged": {
|
|
||||||
"fg": "#1d2021",
|
|
||||||
"bg": "#b8bb26e6"
|
|
||||||
},
|
|
||||||
"AC": {
|
|
||||||
"fg": "#1d2021",
|
|
||||||
"bg": "#b8bb26e6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cmus": {
|
|
||||||
"fg": "#fbf1c7",
|
|
||||||
"bg": "#484848e6"
|
|
||||||
},
|
|
||||||
"bluetooth": {
|
|
||||||
"ON": {
|
|
||||||
"fg": "#1d2021",
|
|
||||||
"bg": "#b8bb26e6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
{
|
|
||||||
"icons": [ "awesome-fonts" ],
|
|
||||||
"defaults": {
|
|
||||||
"separator-block-width": 0,
|
|
||||||
"critical": {
|
|
||||||
"fg": "#ffffff",
|
|
||||||
"bg": "#ff0000"
|
|
||||||
},
|
|
||||||
"warning": {
|
|
||||||
"fg": "#d75f00",
|
|
||||||
"bg": "#ffd700"
|
|
||||||
},
|
|
||||||
"default_separators": false
|
|
||||||
},
|
|
||||||
"cycle": [
|
|
||||||
{
|
|
||||||
"fg": "#ffd700",
|
|
||||||
"bg": "#d75f00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fg": "#ffffff",
|
|
||||||
"bg": "#0000f0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dnf": {
|
|
||||||
"good": {
|
|
||||||
"fg": "#494949",
|
|
||||||
"bg": "#41db00"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"battery": {
|
|
||||||
"charged": {
|
|
||||||
"fg": "#494949",
|
|
||||||
"bg": "#41db00"
|
|
||||||
},
|
|
||||||
"AC": {
|
|
||||||
"fg": "#494949",
|
|
||||||
"bg": "#41db00"
|
|
||||||
},
|
|
||||||
"charging": {
|
|
||||||
|
|
||||||
"fg": "#494949",
|
|
||||||
"bg": "#41db00"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue