[core] get output for list of themes/modules

This commit is contained in:
tobi-wan-kenobi 2020-05-01 20:15:39 +02:00
parent 2ab575d190
commit 87915a34e9
4 changed files with 178 additions and 69 deletions

View file

@ -1,15 +1,100 @@
import os
try:
import ast
except ImportError:
log.warning('--list modules will not work (module "ast" not found)')
import sys
import glob
import textwrap
import argparse import argparse
import logging import logging
import core.theme
import util.store import util.store
import util.format import util.format
import modules.core
import modules.contrib
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
MODULE_HELP = 'Specify a space-separated list of modules to load. The order of the list determines their order in the i3bar (from left to right). Use <module>:<alias> to provide an alias in case you want to load the same module multiple times, but specify different parameters.' MODULE_HELP = 'Specify a space-separated list of modules to load. The order of the list determines their order in the i3bar (from left to right). Use <module>:<alias> to provide an alias in case you want to load the same module multiple times, but specify different parameters.'
PARAMETER_HELP = 'Provide configuration parameters in the form of <module>.<key>=<value>' PARAMETER_HELP = 'Provide configuration parameters in the form of <module>.<key>=<value>'
THEME_HELP = 'Specify the theme to use for drawing modules' THEME_HELP = 'Specify the theme to use for drawing modules'
def all_modules():
"""Return a list of available modules"""
result = {}
for path in [ modules.core.__file__, modules.contrib.__file__ ]:
path = os.path.dirname(path)
for mod in glob.iglob('{}/*.py'.format(path)):
result[os.path.basename(mod).replace('.py', '')] = 1
res = list(result.keys())
res.sort()
return res
class print_usage(argparse.Action):
def __init__(self, option_strings, dest, nargs=None, **kwargs):
argparse.Action.__init__(self, option_strings, dest, nargs, **kwargs)
self._indent = ' '*2
def __call__(self, parser, namespace, value, option_string=None):
if value == 'modules':
self._args = namespace
self._format = 'plain'
self.print_modules()
elif value == 'modules-markdown':
self._args = namespace
self._format = 'markdown'
self.print_modules()
elif value == 'themes':
self.print_themes()
sys.exit(0)
def print_themes(self):
print(', '.join(core.theme.themes()))
def print_modules(self):
if self._format == 'markdown':
print('# Table of modules')
print('|Name |Description |')
print('|-----|------------|')
for m in all_modules():
try:
basepath = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
filename = os.path.join(basepath, 'modules', 'core', '{}.py'.format(m))
if not os.path.exists(filename):
filename = os.path.join(basepath, 'modules', 'contrib', '{}.py'.format(m))
if not os.path.exists(filename):
log.warning('module {} not found'.format(m))
continue
doc = None
with open(filename) as f:
tree = ast.parse(f.read())
doc = ast.get_docstring(tree)
if not doc:
log.warning('failed to find docstring for {}'.format(m))
continue
if self._format == 'markdown':
doc = doc.replace('<', '\<')
doc = doc.replace('>', '\>')
doc = doc.replace('\n', '<br>')
print('|{} |{} |'.format(m, doc))
else:
print(textwrap.fill('{}:'.format(m), 80,
initial_indent=self._indent*2, subsequent_indent=self._indent*2))
for line in doc.split('\n'):
print(textwrap.fill(line, 80,
initial_indent=self._indent*3, subsequent_indent=self._indent*6))
except Exception as e:
log.warning(e)
class Config(util.store.Store): class Config(util.store.Store):
def __init__(self, args): def __init__(self, args):
super(Config, self).__init__() super(Config, self).__init__()
@ -28,6 +113,8 @@ class Config(util.store.Store):
help='Add debug fields to i3 output') help='Add debug fields to i3 output')
parser.add_argument('-f', '--logfile', help='destination for the debug log file, if -d|--debug is specified; defaults to stderr') parser.add_argument('-f', '--logfile', help='destination for the debug log file, if -d|--debug is specified; defaults to stderr')
parser.add_argument('-r', '--right-to-left', action='store_true', help='Draw widgets from right to left, rather than left to right (which is the default)') parser.add_argument('-r', '--right-to-left', action='store_true', help='Draw widgets from right to left, rather than left to right (which is the default)')
parser.add_argument('-l', '--list', choices=['modules', 'themes', 'modules-markdown'], help='Display a list of available themes or available modules, along with their parameters',
action=print_usage)
self.__args = parser.parse_args(args) self.__args = parser.parse_args(args)

View file

@ -3,6 +3,7 @@ import io
import json import json
import logging import logging
import copy import copy
import glob
import core.event import core.event
import util.algorithm import util.algorithm
@ -16,6 +17,17 @@ PATHS=[
os.path.expanduser('~/.config/bumblebee-status/themes'), os.path.expanduser('~/.config/bumblebee-status/themes'),
] ]
def themes():
themes_dict = {}
for path in PATHS:
for filename in glob.iglob('{}/*.json'.format(path)):
if 'test' not in filename:
themes_dict[os.path.basename(filename).replace('.json', '')] = 1
result = list(themes_dict.keys())
result.sort()
return result
def merge_replace(value, new_value, key): def merge_replace(value, new_value, key):
if not isinstance(value, dict): if not isinstance(value, dict):
return new_value return new_value

View file

@ -1,78 +1,88 @@
# Table of modules # Table of modules
|Name |Description | |Name |Description |
|-----|------------| |-----|------------|
|amixer |get volume level<br><br> | |__pulseaudio |Displays volume and mute status and controls for PulseAudio devices. Use wheel up and down to change volume, left click mutes, right click opens pavucontrol.<br><br>Aliases: pasink (use this to control output instead of input), pasource<br><br>Parameters:<br> * pulseaudio.autostart: If set to 'true' (default is 'false'), automatically starts the pulseaudio daemon if it is not running<br> * pulseaudio.percent_change: How much to change volume by when scrolling on the module (default is 2%)<br> * pulseaudio.limit: Upper limit for setting the volume (default is 0%, which means 'no limit')<br> Note: If the left and right channels have different volumes, the limit might not be reached exactly.<br> * pulseaudio.showbars: 1 for showing volume bars, requires --markup=pango;<br> 0 for not showing volume bars (default)<br><br>Requires the following executable:<br> * pulseaudio<br> * pactl<br> * pavucontrol |
|apt |Displays APT package update information (<toupgrade>/<toremove>)<br>Requires the following debian packages:<br> * aptitude<br><br> * python-parse<br><br> | |amixer |get volume level<br><br>Parameters:<br> * amixer.device: Device to use, defaults to "Master,0" |
|arch-update |Check updates to Arch Linux.<br> | |apt |Displays APT package update information (\<to upgrade\>/\<to remove \>)<br>Requires the following packages:<br> * aptitude |
|battery-upower |Displays battery status, remaining percentage and charging information.<br><br>Parameters:<br> * battery-upower.warning : Warning threshold in % of remaining charge (defaults to 20)<br> * battery-upower.critical : Critical threshold in % of remaining charge (defaults to 10)<br> * battery-upower.showremaining : If set to true (default) shows the remaining time until the batteries are completely discharged<br> | |arch-update |Check updates to Arch Linux.<br><br>Requires the following executable:<br> * checkupdates (from pacman-contrib) |
|battery |Displays battery status, remaining percentage and charging information.<br><br>Parameters:<br> * battery.device : Comma-separated list of battery devices to read information from (defaults to auto for auto-detection)<br> * battery.warning : Warning threshold in % of remaining charge (defaults to 20)<br> * battery.critical : Critical threshold in % of remaining charge (defaults to 10)<br> * battery.showdevice : If set to "true", add the device name to the widget (defaults to False)<br> * battery.decorate : If set to "false", hides additional icons (charging, etc.) (defaults to True)<br> | |battery |Displays battery status, remaining percentage and charging information.<br><br>Parameters:<br> * battery.device : Comma-separated list of battery devices to read information from (defaults to auto for auto-detection)<br> * battery.warning : Warning threshold in % of remaining charge (defaults to 20)<br> * battery.critical : Critical threshold in % of remaining charge (defaults to 10)<br> * battery.showdevice : If set to 'true', add the device name to the widget (defaults to False)<br> * battery.decorate : If set to 'false', hides additional icons (charging, etc.) (defaults to True)<br> * battery.showpowerconsumption: If set to 'true', show current power consumption (defaults to False)<br> * battery.compact-devices : If set to 'true', compacts multiple batteries into a single entry (default to False) |
|battery_all |Displays battery status, remaining percentage and charging information.<br><br>Parameters:<br> * battery.device : Comma-separated list of battery devices to read information from (defaults to auto for auto-detection)<br> * battery.warning : Warning threshold in % of remaining charge (defaults to 20)<br> * battery.critical : Critical threshold in % of remaining charge (defaults to 10)<br> * batter.showremaining : If set to true (default) shows the remaining time until the batteries are completely discharged<br> | |battery-upower |Displays battery status, remaining percentage and charging information.<br><br>Parameters:<br> * battery-upower.warning : Warning threshold in % of remaining charge (defaults to 20)<br> * battery-upower.critical : Critical threshold in % of remaining charge (defaults to 10)<br> * battery-upower.showremaining : If set to true (default) shows the remaining time until the batteries are completely discharged |
|bluetooth |Displays bluetooth status (Bluez). Left mouse click launches manager app,<br>right click toggles bluetooth. Needs dbus-send to toggle bluetooth state.<br><br>Parameters:<br> * bluetooth.device : the device to read state from (default is hci0)<br> * bluetooth.manager : application to launch on click (blueman-manager)<br> * bluetooth.dbus_destination : dbus destination (defaults to org.blueman.Mechanism)<br> * bluetooth.dbus_destination_path : dbus destination path (defaults to /)<br> * bluetooth.right_click_popup : use popup menu when right-clicked (defaults to True)<br><br> | |bluetooth |Displays bluetooth status (Bluez). Left mouse click launches manager app,<br>right click toggles bluetooth. Needs dbus-send to toggle bluetooth state.<br><br>Parameters:<br> * bluetooth.device : the device to read state from (default is hci0)<br> * bluetooth.manager : application to launch on click (blueman-manager)<br> * bluetooth.dbus_destination : dbus destination (defaults to org.blueman.Mechanism)<br> * bluetooth.dbus_destination_path : dbus destination path (defaults to /)<br> * bluetooth.right_click_popup : use popup menu when right-clicked (defaults to True) |
|brightness |Displays the brightness of a display<br><br>Parameters:<br> * brightness.step: The amount of increase/decrease on scroll in % (defaults to 2)<br> * brightness.device_path: The device path (defaults to /sys/class/backlight/intel_backlight), can contain wildcards (in this case, the first matching path will be used)<br><br> | |bluetooth2 |Displays bluetooth status. Left mouse click launches manager app,<br>right click toggles bluetooth. Needs dbus-send to toggle bluetooth state and<br>python-dbus to count the number of connections<br><br>Parameters:<br> * bluetooth.manager : application to launch on click (blueman-manager) |
|caffeine |Enable/disable automatic screen locking.<br><br>Requires the following executables:<br> * xdg-screensaver<br> * xdotool<br> * xprop (as dependency for xdotool)<br> * notify-send<br> | |brightness |Displays the brightness of a display<br><br>Parameters:<br> * brightness.step: The amount of increase/decrease on scroll in % (defaults to 2) |
|cmus |Displays information about the current song in cmus.<br><br>Requires the following executable:<br> * cmus-remote<br><br>Parameters:<br> * cmus.format: Format string for the song information. Tag values can be put in curly brackets (i.e. {artist})<br> * cmus.layout: Space-separated list of widgets to add. Possible widgets are the buttons/toggles cmus.prev, cmus.next, cmus.shuffle and cmus.repeat, and the main display with play/pause function cmus.main.<br> | |caffeine |Enable/disable automatic screen locking.<br><br>Requires the following executables:<br> * xdg-screensaver<br> * xdotool<br> * xprop (as dependency for xdotool)<br> * notify-send |
|cpu |Displays CPU utilization across all CPUs.<br><br>Parameters:<br> * cpu.warning : Warning threshold in % of CPU usage (defaults to 70%)<br> * cpu.critical: Critical threshold in % of CPU usage (defaults to 80%)<br> * cpu.format : Format string (defaults to "{:.01f}%")<br> | |cmus |Displays information about the current song in cmus.<br><br>Requires the following executable:<br> * cmus-remote<br><br>Parameters:<br> * cmus.format: Format string for the song information. Tag values can be put in curly brackets (i.e. {artist})<br> Additional tags:<br> * {file} - full song file name<br> * {file1} - song file name without path prefix<br> if {file} = '/foo/bar.baz', then {file1} = 'bar.baz'<br> * {file2} - song file name without path prefix and extension suffix<br> if {file} = '/foo/bar.baz', then {file2} = 'bar'<br> * cmus.layout: Space-separated list of widgets to add. Possible widgets are the buttons/toggles cmus.prev, cmus.next, cmus.shuffle and cmus.repeat, and the main display with play/pause function cmus.main.<br> * cmus.server: The address of the cmus server, either a UNIX socket or host[:port]. Connects to the local instance by default.<br> * cmus.passwd: The password to use for the TCP/IP connection. |
|currency |Displays currency exchange rates. Currently, displays currency between GBP and USD/EUR only.<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * currency.interval: Interval in minutes between updates, default is 1.<br> * currency.source: Source currency (ex. "GBP", "EUR"). Defaults to "auto", which infers the local one from IP address.<br> * currency.destination: Comma-separated list of destination currencies (defaults to "USD,EUR")<br> * currency.sourceformat: String format for source formatting; Defaults to "{}: {}" and has two variables,<br> the base symbol and the rate list<br> * currency.destinationdelimiter: Delimiter used for separating individual rates (defaults to "|")<br><br>Note: source and destination names right now must correspond to the names used by the API of https://markets.ft.com<br> | |cpu |Displays CPU utilization across all CPUs.<br><br>Parameters:<br> * cpu.warning : Warning threshold in % of CPU usage (defaults to 70%)<br> * cpu.critical: Critical threshold in % of CPU usage (defaults to 80%)<br> * cpu.format : Format string (defaults to '{:.01f}%') |
|datetime |Displays the current date and time.<br><br>Parameters:<br> * datetime.format: strftime()-compatible formatting string<br> * date.format : alias for datetime.format<br> * time.format : alias for datetime.format<br> * datetime.locale: locale to use rather than the system default<br> * date.locale : alias for datetime.locale<br> * time.locale : alias for datetime.locale<br> | |cpu2 |Multiwidget CPU module<br><br>Can display any combination of:<br><br> * max CPU frequency<br> * total CPU load in percents (integer value)<br> * per-core CPU load as graph - either mono or colored<br> * CPU temperature (in Celsius degrees)<br> * CPU fan speed<br><br>Requirements:<br><br> * the psutil Python module for the first three items from the list above<br> * sensors executable for the rest<br><br>Parameters:<br> * cpu2.layout: Space-separated list of widgets to add.<br> Possible widgets are:<br> * cpu2.maxfreq<br> * cpu2.cpuload<br> * cpu2.coresload<br> * cpu2.temp<br> * cpu2.fanspeed<br> * cpu2.colored: 1 for colored per core load graph, 0 for mono (default)<br> if this is set to 1, use --markup=pango<br> * cpu2.temp_pattern: pattern to look for in the output of 'sensors -u';<br> required if cpu2.temp widged is used<br> * cpu2.fan_pattern: pattern to look for in the output of 'sensors -u';<br> required if cpu2.fanspeed widged is used<br><br>Note: if you are getting 'n/a' for CPU temperature / fan speed, then you're<br>lacking the aforementioned pattern settings or they have wrong values. |
|datetimetz |Displays the current date and time with timezone options.<br><br>Parameters:<br> * datetimetz.format : strftime()-compatible formatting string<br> * datetimetz.timezone : IANA timezone name<br> * datetz.format : alias for datetimetz.format<br> * timetz.format : alias for datetimetz.format<br> * timetz.timezone : alias for datetimetz.timezone<br> * datetimetz.locale : locale to use rather than the system default<br> * datetz.locale : alias for datetimetz.locale<br> * timetz.locale : alias for datetimetz.locale<br> * timetz.timezone : alias for datetimetz.timezone<br> | |currency |Displays currency exchange rates. Currently, displays currency between GBP and USD/EUR only.<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * currency.interval: Interval in minutes between updates, default is 1.<br> * currency.source: Source currency (ex. 'GBP', 'EUR'). Defaults to 'auto', which infers the local one from IP address.<br> * currency.destination: Comma-separated list of destination currencies (defaults to 'USD,EUR')<br> * currency.sourceformat: String format for source formatting; Defaults to '{}: {}' and has two variables,<br> the base symbol and the rate list<br> * currency.destinationdelimiter: Delimiter used for separating individual rates (defaults to '|')<br><br>Note: source and destination names right now must correspond to the names used by the API of https://markets.ft.com |
|deadbeef |Displays the current song being played in DeaDBeeF and provides<br>some media control bindings.<br>Left click toggles pause, scroll up skips the current song, scroll<br>down returns to the previous song.<br><br>Requires the following library:<br> * subprocess<br>Parameters:<br> * deadbeef.format: Format string (defaults to "{artist} - {title}")<br> Available values are: {artist}, {title}, {album}, {length},<br> {trackno}, {year}, {comment},<br> {copyright}, {time}<br> This is deprecated, but much simpler.<br> * deadbeef.tf_format: A foobar2000 title formatting-style format string.<br> These can be much more sophisticated than the standard<br> format strings. This is off by default, but specifying<br> any tf_format will enable it. If both deadbeef.format<br> and deadbeef.tf_format are specified, deadbeef.tf_format<br> takes priority.<br> * deadbeef.tf_format_if_stopped: Controls whether or not the tf_format format<br> string should be displayed even if no song is paused or<br> playing. This could be useful if you want to implement<br> your own stop strings with the built in logic. Any non-<br> null value will enable this (by default the module will<br> hide itself when the player is stopped).<br> * deadbeef.previous: Change binding for previous song (default is left click)<br> * deadbeef.next: Change binding for next song (default is right click)<br> * deadbeef.pause: Change binding for toggling pause (default is middle click)<br> Available options for deadbeef.previous, deadbeef.next and deadbeef.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN<br><br> | |date |Displays the current date and time.<br><br>Parameters:<br> * date.format: strftime()-compatible formatting string<br> * date.locale: locale to use rather than the system default |
|deezer |Displays the current song being played<br>Requires the following library:<br> * python-dbus<br>Parameters:<br> * deezer.format: Format string (defaults to "{artist} - {title}")<br> Available values are: {album}, {title}, {artist}, {trackNumber}, {playbackStatus}<br> * deezer.previous: Change binding for previous song (default is left click)<br> * deezer.next: Change binding for next song (default is right click)<br> * deezer.pause: Change binding for toggling pause (default is middle click)<br> Available options for deezer.previous, deezer.next and deezer.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN<br> | |datetime |Displays the current date and time.<br><br>Parameters:<br> * datetime.format: strftime()-compatible formatting string<br> * datetime.locale: locale to use rather than the system default |
|disk |Shows free diskspace, total diskspace and the percentage of free disk space.<br><br>Parameters:<br> * disk.warning: Warning threshold in % of disk space (defaults to 80%)<br> * disk.critical: Critical threshold in % of disk space (defaults ot 90%)<br> * disk.path: Path to calculate disk usage from (defaults to /)<br> * disk.open: Which application / file manager to launch (default xdg-open)<br> * disk.format: Format string, tags {path}, {used}, {left}, {size} and {percent} (defaults to "{path} {used}/{size} ({percent:05.02f}%)")<br> * (deprecated) disk.showUsed: Show used space (defaults to yes)<br> * (deprecated) disk.showSize: Show total size (defaults to yes)<br> * (deprecated) disk.showPercent: Show usage percentage (defaults to yes)<br> | |datetimetz |Displays the current date and time with timezone options.<br><br>Parameters:<br> * datetimetz.format : strftime()-compatible formatting string<br> * datetimetz.timezone : IANA timezone name<br> * datetz.format : alias for datetimetz.format<br> * timetz.format : alias for datetimetz.format<br> * timetz.timezone : alias for datetimetz.timezone<br> * datetimetz.locale : locale to use rather than the system default<br> * datetz.locale : alias for datetimetz.locale<br> * timetz.locale : alias for datetimetz.locale<br> * timetz.timezone : alias for datetimetz.timezone |
|dnf |Displays DNF package update information (<security>/<bugfixes>/<enhancements>/<other>)<br><br>Requires the following executable:<br> * dnf<br><br>Parameters:<br> * dnf.interval: Time in minutes between two consecutive update checks (defaults to 30 minutes)<br><br> | |datetz |Displays the current date and time.<br><br>Parameters:<br> * date.format: strftime()-compatible formatting string<br> * date.locale: locale to use rather than the system default |
|docker_ps |Displays the number of docker containers running<br><br>Requires the following python packages:<br> * docker<br><br> | |deadbeef |Displays the current song being played in DeaDBeeF and provides<br>some media control bindings.<br>Left click toggles pause, scroll up skips the current song, scroll<br>down returns to the previous song.<br><br>Requires the following library:<br> * subprocess<br>Parameters:<br> * deadbeef.format: Format string (defaults to '{artist} - {title}')<br> Available values are: {artist}, {title}, {album}, {length},<br> {trackno}, {year}, {comment},<br> {copyright}, {time}<br> This is deprecated, but much simpler.<br> * deadbeef.tf_format: A foobar2000 title formatting-style format string.<br> These can be much more sophisticated than the standard<br> format strings. This is off by default, but specifying<br> any tf_format will enable it. If both deadbeef.format<br> and deadbeef.tf_format are specified, deadbeef.tf_format<br> takes priority.<br> * deadbeef.tf_format_if_stopped: Controls whether or not the tf_format format<br> string should be displayed even if no song is paused or<br> playing. This could be useful if you want to implement<br> your own stop strings with the built in logic. Any non-<br> null value will enable this (by default the module will<br> hide itself when the player is stopped).<br> * deadbeef.previous: Change binding for previous song (default is left click)<br> * deadbeef.next: Change binding for next song (default is right click)<br> * deadbeef.pause: Change binding for toggling pause (default is middle click)<br> Available options for deadbeef.previous, deadbeef.next and deadbeef.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN |
|debug |Shows that debug is enabled |
|deezer |Displays the current song being played<br>Requires the following library:<br> * python-dbus<br>Parameters:<br> * deezer.format: Format string (defaults to '{artist} - {title}')<br> Available values are: {album}, {title}, {artist}, {trackNumber}, {playbackStatus}<br> * deezer.previous: Change binding for previous song (default is left click)<br> * deezer.next: Change binding for next song (default is right click)<br> * deezer.pause: Change binding for toggling pause (default is middle click)<br> Available options for deezer.previous, deezer.next and deezer.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN |
|disk |Shows free diskspace, total diskspace and the percentage of free disk space.<br><br>Parameters:<br> * disk.warning: Warning threshold in % of disk space (defaults to 80%)<br> * disk.critical: Critical threshold in % of disk space (defaults ot 90%)<br> * disk.path: Path to calculate disk usage from (defaults to /)<br> * disk.open: Which application / file manager to launch (default xdg-open)<br> * disk.format: Format string, tags {path}, {used}, {left}, {size} and {percent} (defaults to '{path} {used}/{size} ({percent:05.02f}%)') |
|dnf |Displays DNF package update information (\<security\>/\<bugfixes\>/\<enhancements\>/\<other\>)<br><br>Requires the following executable:<br> * dnf<br><br>Parameters:<br> * dnf.interval: Time in minutes between two consecutive update checks (defaults to 30 minutes) |
|docker_ps |Displays the number of docker containers running<br><br>Requires the following python packages:<br> * docker |
|dunst |Toggle dunst notifications. | |dunst |Toggle dunst notifications. |
|error |Draws an error widget.<br> | |error |Shows bumblebee-status errors |
|getcrypto |Displays the price of a cryptocurrency.<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * getcrypto.interval: Interval in seconds for updating the price, default is 120, less than that will probably get your IP banned.<br> * getcrypto.getbtc: 0 for not getting price of BTC, 1 for getting it (default).<br> * getcrypto.geteth: 0 for not getting price of ETH, 1 for getting it (default).<br> * getcrypto.getltc: 0 for not getting price of LTC, 1 for getting it (default).<br> * getcrypto.getcur: Set the currency to display the price in, usd is the default.<br> | |getcrypto |Displays the price of a cryptocurrency.<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * getcrypto.interval: Interval in seconds for updating the price, default is 120, less than that will probably get your IP banned.<br> * getcrypto.getbtc: 0 for not getting price of BTC, 1 for getting it (default).<br> * getcrypto.geteth: 0 for not getting price of ETH, 1 for getting it (default).<br> * getcrypto.getltc: 0 for not getting price of LTC, 1 for getting it (default).<br> * getcrypto.getcur: Set the currency to display the price in, usd is the default. |
|git |Print the branch and git status for the<br>currently focused window.<br><br>Requires:<br> * xcwd<br> * Python module 'pygit2'<br> | |git |Print the branch and git status for the<br>currently focused window.<br><br>Requires:<br> * xcwd<br> * Python module 'pygit2' |
|github |Displays the unread GitHub notifications for a GitHub user<br><br>Requires the following library:<br> * requests<br><br>Parameters:<br> * github.token: GitHub user access token, the token needs to have the 'notifications' scope.<br> * github.interval: Interval in minutes between updates, default is 5.<br> | |github |Displays the unread GitHub notifications for a GitHub user<br><br>Requires the following library:<br> * requests<br><br>Parameters:<br> * github.token: GitHub user access token, the token needs to have the 'notifications' scope.<br> * github.interval: Interval in minutes between updates, default is 5. |
|gpmdp |Displays information about the current song in Google Play music player.<br><br>Requires the following executable:<br> * gpmdp-remote<br> | |gpmdp |Displays information about the current song in Google Play music player.<br><br>Requires the following executable:<br> * gpmdp-remote |
|hddtemp |Fetch hard drive temeperature data from a hddtemp daemon<br>that runs on localhost and default port (7634)<br> | |hddtemp |Fetch hard drive temeperature data from a hddtemp daemon<br>that runs on localhost and default port (7634) |
|hostname |Displays the system hostname. | |hostname |Displays the system hostname. |
|http_status |Display HTTP status code<br><br>Parameters:<br> * http_status.label: Prefix label (optional)<br> * http_status.target: Target to retrieve the HTTP status from<br> * http_status.expect: Expected HTTP status<br> | |http_status |Display HTTP status code<br><br>Parameters:<br> * http__status.label: Prefix label (optional)<br> * http__status.target: Target to retrieve the HTTP status from<br> * http__status.expect: Expected HTTP status |
|indicator |Displays the indicator status, for numlock, scrolllock and capslock <br><br>Parameters:<br> * indicator.include: Comma-separated list of interface prefixes to include (defaults to "numlock,capslock")<br> * indicator.signalstype: If you want the signali type color to be "critical" or "warning" (defaults to "warning")<br> | |indicator |Displays the indicator status, for numlock, scrolllock and capslock <br><br>Parameters:<br> * indicator.include: Comma-separated list of interface prefixes to include (defaults to 'numlock,capslock')<br> * indicator.signalstype: If you want the signali type color to be 'critical' or 'warning' (defaults to 'warning') |
|kernel |Shows Linux kernel version information | |kernel |Shows Linux kernel version information |
|layout-xkb |Displays the current keyboard layout using libX11<br><br>Requires the following library:<br> * libX11.so.6<br>and python module:<br> * xkbgroup<br><br>Parameters:<br> * layout-xkb.showname: Boolean that indicate whether the full name should be displayed. Defaults to false (only the symbol will be displayed)<br> * layout-xkb.show_variant: Boolean that indecates whether the variant name should be displayed. Defaults to true.<br> | |layout |Displays and changes the current keyboard layout<br><br>Requires the following executable:<br> * setxkbmap |
|layout-xkbswitch |Displays and changes the current keyboard layout<br><br>Requires the following executable:<br> * xkb-switch<br> | |layout-xkb |Displays the current keyboard layout using libX11<br><br>Requires the following library:<br> * libX11.so.6<br>and python module:<br> * xkbgroup<br><br>Parameters:<br> * layout-xkb.showname: Boolean that indicate whether the full name should be displayed. Defaults to false (only the symbol will be displayed)<br> * layout-xkb.show_variant: Boolean that indecates whether the variant name should be displayed. Defaults to true. |
|layout |Displays and changes the current keyboard layout<br><br>Requires the following executable:<br> * setxkbmap<br> | |layout-xkbswitch |Displays and changes the current keyboard layout<br><br>Requires the following executable:<br> * xkb-switch |
|load |Displays system load.<br><br>Parameters:<br> * load.warning : Warning threshold for the one-minute load average (defaults to 70% of the number of CPUs)<br> * load.critical: Critical threshold for the one-minute load average (defaults to 80% of the number of CPUs)<br> | |libvirtvms |Displays count of running libvirt VMs.<br>Required the following python packages:<br> * libvirt |
|memory |Displays available RAM, total amount of RAM and percentage available.<br><br>Parameters:<br> * memory.warning : Warning threshold in % of memory used (defaults to 80%)<br> * memory.critical: Critical threshold in % of memory used (defaults to 90%)<br> * memory.format: Format string (defaults to "{used}/{total} ({percent:05.02f}%)")<br> * memory.usedonly: Only show the amount of RAM in use (defaults to False). Same as memory.format="{used}"<br> | |load |Displays system load.<br><br>Parameters:<br> * load.warning : Warning threshold for the one-minute load average (defaults to 70% of the number of CPUs)<br> * load.critical: Critical threshold for the one-minute load average (defaults to 80% of the number of CPUs) |
|mocp |Displays information about the current song in mocp. Left click toggles play/pause. Right click toggles shuffle.<br><br>Requires the following executable:<br> * mocp<br><br>Parameters:<br> * mocp.format: Format string for the song information. Replace string sequences with the actual information:<br> %state State<br> %file File<br> %title Title, includes track, artist, song title and album<br> %artist Artist<br> %song SongTitle<br> %album Album<br> %tt TotalTime<br> %tl TimeLeft<br> %ts TotalSec<br> %ct CurrentTime<br> %cs CurrentSec<br> %b Bitrate<br> %r Sample rate<br> | |memory |Displays available RAM, total amount of RAM and percentage available.<br><br>Parameters:<br> * memory.warning : Warning threshold in % of memory used (defaults to 80%)<br> * memory.critical: Critical threshold in % of memory used (defaults to 90%)<br> * memory.format: Format string (defaults to '{used}/{total} ({percent:05.02f}%)')<br> * memory.usedonly: Only show the amount of RAM in use (defaults to False). Same as memory.format='{used}' |
|mpd |Displays information about the current song in mpd.<br><br>Requires the following executable:<br> * mpc<br><br>Parameters:<br> * mpd.format: Format string for the song information.<br> Supported tags (see `man mpc` for additional information)<br> * {name}<br> * {artist}<br> * {album}<br> * {albumartist}<br> * {comment}<br> * {composer}<br> * {date}<br> * {originaldate}<br> * {disc}<br> * {genre}<br> * {performer}<br> * {title}<br> * {track}<br> * {time}<br> * {file}<br> * {id}<br> * {prio}<br> * {mtime}<br> * {mdate}<br> Additional tags:<br> * {position} - position of currently playing song<br> not to be confused with %position% mpc tag<br> * {duration} - duration of currently playing song<br> * {file1} - song file name without path prefix<br> if {file} = '/foo/bar.baz', then {file1} = 'bar.baz'<br> * {file2} - song file name without path prefix and extension suffix<br> if {file} = '/foo/bar.baz', then {file2} = 'bar'<br> * mpd.host: MPD host to connect to. (mpc behaviour by default)<br> | |mocp |Displays information about the current song in mocp. Left click toggles play/pause. Right click toggles shuffle.<br><br>Requires the following executable:<br> * mocp<br><br>Parameters:<br> * mocp.format: Format string for the song information. Replace string sequences with the actual information:<br> %state State<br> %file File<br> %title Title, includes track, artist, song title and album<br> %artist Artist<br> %song SongTitle<br> %album Album<br> %tt TotalTime<br> %tl TimeLeft<br> %ts TotalSec<br> %ct CurrentTime<br> %cs CurrentSec<br> %b Bitrate<br> %r Sample rate |
|network_traffic |Displays network traffic<br> * No extra configuration needed<br> | |mpd |Displays information about the current song in mpd.<br><br>Requires the following executable:<br> * mpc<br><br>Parameters:<br> * mpd.format: Format string for the song information.<br> Supported tags (see `man mpc` for additional information)<br> * {name}<br> * {artist}<br> * {album}<br> * {albumartist}<br> * {comment}<br> * {composer}<br> * {date}<br> * {originaldate}<br> * {disc}<br> * {genre}<br> * {performer}<br> * {title}<br> * {track}<br> * {time}<br> * {file}<br> * {id}<br> * {prio}<br> * {mtime}<br> * {mdate}<br> Additional tags:<br> * {position} - position of currently playing song<br> not to be confused with %position% mpc tag<br> * {duration} - duration of currently playing song<br> * {file1} - song file name without path prefix<br> if {file} = '/foo/bar.baz', then {file1} = 'bar.baz'<br> * {file2} - song file name without path prefix and extension suffix<br> if {file} = '/foo/bar.baz', then {file2} = 'bar'<br> * mpd.host: MPD host to connect to. (mpc behaviour by default)<br> * mpd.layout: Space-separated list of widgets to add. Possible widgets are the buttons/toggles mpd.prev, mpd.next, mpd.shuffle and mpd.repeat, and the main display with play/pause function mpd.main. |
|nic |Displays the name, IP address(es) and status of each available network interface.<br><br>Requires the following python module:<br> * netifaces<br><br>Parameters:<br> * nic.exclude: Comma-separated list of interface prefixes to exclude (defaults to "lo,virbr,docker,vboxnet,veth,br")<br> * nic.include: Comma-separated list of interfaces to include<br> * nic.states: Comma-separated list of states to show (prefix with "^" to invert - i.e. ^down -> show all devices that are not in state down)<br> * nic.format: Format string (defaults to "{intf} {state} {ip} {ssid}")<br> | |network_traffic |Displays network traffic<br>* No extra configuration needed |
|notmuch_count |Displays the result of a notmuch count query<br> default : unread emails which path do not contained "Trash" (notmuch count "tag:unread AND NOT path:/.*Trash.*/")<br><br>Parameters:<br> * notmuch_count.query: notmuch count query to show result <br><br>Errors:<br> if the notmuch query failed, the shown value is -1<br><br>Dependencies:<br> notmuch (https://notmuchmail.org/)<br> | |nic |Displays the name, IP address(es) and status of each available network interface.<br><br>Requires the following python module:<br> * netifaces<br><br>Parameters:<br> * nic.exclude: Comma-separated list of interface prefixes to exclude (defaults to 'lo,virbr,docker,vboxnet,veth,br')<br> * nic.include: Comma-separated list of interfaces to include<br> * nic.states: Comma-separated list of states to show (prefix with '^' to invert - i.e. ^down -\> show all devices that are not in state down)<br> * nic.format: Format string (defaults to '{intf} {state} {ip} {ssid}') |
|nvidiagpu |Displays GPU name, temperature and memory usage.<br><br>Parameters:<br> * nvidiagpu.format: Format string (defaults to "{name}: {temp}°C %{usedmem}/{totalmem} MiB")<br> Available values are: {name} {temp} {mem_used} {mem_total} {fanspeed} {clock_gpu} {clock_mem}<br><br>Requires nvidia-smi<br> | |notmuch_count |Displays the result of a notmuch count query<br> default : unread emails which path do not contained 'Trash' (notmuch count 'tag:unread AND NOT path:/.*Trash.*/')<br><br>Parameters:<br> * notmuch_count.query: notmuch count query to show result <br><br>Errors:<br> if the notmuch query failed, the shown value is -1<br><br>Dependencies:<br> notmuch (https://notmuchmail.org/) |
|pacman |Displays update information per repository for pacman.<br><br>Parameters:<br> * pacman.sum: If you prefere displaying updates with a single digit (defaults to "False")<br><br>Requires the following executables:<br> * fakeroot<br> * pacman<br> | |nvidiagpu |Displays GPU name, temperature and memory usage.<br><br>Parameters:<br> * nvidiagpu.format: Format string (defaults to '{name}: {temp}°C %{usedmem}/{totalmem} MiB')<br> Available values are: {name} {temp} {mem_used} {mem_total} {fanspeed} {clock_gpu} {clock_mem}<br><br>Requires nvidia-smi |
|pihole |Displays the pi-hole status (up/down) together with the number of ads that were blocked today<br>Parameters:<br> * pihole.address : pi-hole address (e.q: http://192.168.1.3)<br> * pihole.pwhash : pi-hole webinterface password hash (can be obtained from the /etc/pihole/SetupVars.conf file)<br> | |pacman |Displays update information per repository for pacman.<br><br>Parameters:<br> * pacman.sum: If you prefere displaying updates with a single digit (defaults to 'False')<br><br>Requires the following executables:<br> * fakeroot<br> * pacman |
|ping |Periodically checks the RTT of a configurable host using ICMP echos<br><br>Requires the following executable:<br> * ping<br><br>Parameters:<br> * ping.interval: Time in seconds between two RTT checks (defaults to 60)<br> * ping.address : IP address to check<br> * ping.timeout : Timeout for waiting for a reply (defaults to 5.0)<br> * ping.probes : Number of probes to send (defaults to 5)<br> * ping.warning : Threshold for warning state, in seconds (defaults to 1.0)<br> * ping.critical: Threshold for critical state, in seconds (defaults to 2.0)<br> | |pihole |Displays the pi-hole status (up/down) together with the number of ads that were blocked today<br>Parameters:<br> * pihole.address : pi-hole address (e.q: http://192.168.1.3)<br> * pihole.pwhash : pi-hole webinterface password hash (can be obtained from the /etc/pihole/SetupVars.conf file) |
|pomodoro |Display and run a Pomodoro timer.<br>Left click to start timer, left click again to pause.<br>Right click will cancel the timer.<br><br>Parameters:<br> * pomodoro.work: The work duration of timer in minutes (defaults to 25)<br> * pomodoro.break: The break duration of timer in minutes (defaults to 5)<br> * pomodoro.format: Timer display format with "%m" and "%s" for minutes and seconds (defaults to "%m:%s")<br> Examples: "%m min %s sec", "%mm", "", "timer"<br> * pomodoro.notify: Notification command to run when timer ends/starts (defaults to nothing)<br> Example: 'notify-send "Time up!"'<br> | |ping |Periodically checks the RTT of a configurable host using ICMP echos<br><br>Requires the following executable:<br> * ping<br><br>Parameters:<br> * ping.address : IP address to check<br> * ping.timeout : Timeout for waiting for a reply (defaults to 5.0)<br> * ping.probes : Number of probes to send (defaults to 5)<br> * ping.warning : Threshold for warning state, in seconds (defaults to 1.0)<br> * ping.critical: Threshold for critical state, in seconds (defaults to 2.0) |
|prime |Displays and changes the current selected prime video card<br><br>Left click will call 'sudo prime-select nvidia'<br>Right click will call 'sudo prime-select nvidia'<br><br>Running these commands without a password requires editing your sudoers file<br>(always use visudo, it's very easy to make a mistake and get locked out of your computer!)<br><br>sudo visudo -f /etc/sudoers.d/prime<br><br>Then put a line like this in there:<br><br> user ALL=(ALL) NOPASSWD: /usr/bin/prime-select<br><br>If you can't figure out the sudoers thing, then don't worry, it's still really useful.<br><br>Parameters:<br> * prime.nvidiastring: String to use when nvidia is selected (defaults to "intel")<br> * prime.intelstring: String to use when intel is selected (defaults to "intel")<br><br>Requires the following executable:<br> * prime-select<br><br> | |pomodoro |Display and run a Pomodoro timer.<br>Left click to start timer, left click again to pause.<br>Right click will cancel the timer.<br><br>Parameters:<br> * pomodoro.work: The work duration of timer in minutes (defaults to 25)<br> * pomodoro.break: The break duration of timer in minutes (defaults to 5)<br> * pomodoro.format: Timer display format with '%m' and '%s' for minutes and seconds (defaults to '%m:%s')<br> Examples: '%m min %s sec', '%mm', '', 'timer'<br> * pomodoro.notify: Notification command to run when timer ends/starts (defaults to nothing)<br> Example: 'notify-send 'Time up!''. If you want to chain multiple commands,<br> please use an external wrapper script and invoke that. The module itself does<br> not support command chaining (see https://github.com/tobi-wan-kenobi/bumblebee-status/issues/532<br> for a detailled explanation) |
|progress |<br>Show progress for cp, mv, dd, ...<br><br>Parameters:<br> * progress.placeholder: Text to display while no process is running (defaults to "n/a")<br> * progress.barwidth: Width of the progressbar if it is used (defaults to 8)<br> * progress.format: Format string (defaults to "{bar} {cmd} {arg}")<br> Available values are: {bar} {pid} {cmd} {arg} {percentage} {quantity} {speed} {time}<br> * progress.barfilledchar: Character used to draw the filled part of the bar (defaults to "#"), notice that it can be a string<br> * progress.baremptychar: Character used to draw the empty part of the bar (defaults to "-"), notice that it can be a string<br><br>Requires the following executable:<br> * progress<br> | |prime |Displays and changes the current selected prime video card<br><br>Left click will call 'sudo prime-select nvidia'<br>Right click will call 'sudo prime-select nvidia'<br><br>Running these commands without a password requires editing your sudoers file<br>(always use visudo, it's very easy to make a mistake and get locked out of your computer!)<br><br>sudo visudo -f /etc/sudoers.d/prime<br><br>Then put a line like this in there:<br><br> user ALL=(ALL) NOPASSWD: /usr/bin/prime-select<br><br>If you can't figure out the sudoers thing, then don't worry, it's still really useful.<br><br>Parameters:<br> * prime.nvidiastring: String to use when nvidia is selected (defaults to 'intel')<br> * prime.intelstring: String to use when intel is selected (defaults to 'intel')<br><br>Requires the following executable:<br> * prime-select |
|publicip |Displays public IP address<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * publicip.region: us-central (default), us-east, us-west, uk, de, pl, nl<br> * publicip.service: web address that returns plaintext ip address (ex. "http://l2.io/ip")<br> | |progress |Show progress for cp, mv, dd, ...<br><br>Parameters:<br> * progress.placeholder: Text to display while no process is running (defaults to 'n/a')<br> * progress.barwidth: Width of the progressbar if it is used (defaults to 8)<br> * progress.format: Format string (defaults to '{bar} {cmd} {arg}')<br> Available values are: {bar} {pid} {cmd} {arg} {percentage} {quantity} {speed} {time}<br> * progress.barfilledchar: Character used to draw the filled part of the bar (defaults to '#'), notice that it can be a string<br> * progress.baremptychar: Character used to draw the empty part of the bar (defaults to '-'), notice that it can be a string<br><br>Requires the following executable:<br> * progress |
|pulseaudio |Displays volume and mute status and controls for PulseAudio devices. Use wheel up and down to change volume, left click mutes, right click opens pavucontrol.<br><br>Aliases: pasink (use this to control output instead of input), pasource<br><br>Parameters:<br> * pulseaudio.autostart: If set to "true" (default is "false"), automatically starts the pulseaudio daemon if it is not running<br> * pulseaudio.percent_change: How much to change volume by when scrolling on the module (default is 2%)<br> * pulseaudio.limit: Upper limit for setting the volume (default is 0%, which means "no limit")<br> Note: If the left and right channels have different volumes, the limit might not be reached exactly.<br><br>Requires the following executable:<br> * pulseaudio<br> * pactl<br> * pavucontrol<br> | |publicip |Displays public IP address |
|redshift |Displays the current color temperature of redshift<br><br>Requires the following executable:<br> * redshift<br><br>Parameters:<br> * redshift.location : location provider, either of "geoclue2" (default), "ipinfo" (requires the requests package), or "manual"<br> * redshift.lat : latitude if location is set to "manual"<br> * redshift.lon : longitude if location is set to "manual"<br> | |redshift |Displays the current color temperature of redshift<br><br>Requires the following executable:<br> * redshift<br><br>Parameters:<br> * redshift.location : location provider, either of 'auto' (default), 'geoclue2',<br> 'ipinfo' or 'manual'<br> 'auto' uses whatever redshift is configured to do<br> * redshift.lat : latitude if location is set to 'manual'<br> * redshift.lon : longitude if location is set to 'manual' |
|rotation |Shows a widget for each connected screen and allows the user to loop through different orientations.<br><br>Requires the following executable:<br> * xrandr<br> | |rotation |Shows a widget for each connected screen and allows the user to loop through different orientations.<br><br>Requires the following executable:<br> * xrandr |
|rss |RSS news ticker<br><br>Fetches rss news items and shows these as a news ticker.<br>Left-clicking will open the full story in a browser.<br>New stories are highlighted.<br><br>Parameters:<br> * rss.feeds : Space-separated list of RSS URLs<br> * rss.length : Maximum length of the module, default is 60<br> | |rss |RSS news ticker<br><br>Fetches rss news items and shows these as a news ticker.<br>Left-clicking will open the full story in a browser.<br>New stories are highlighted.<br><br>Parameters:<br> * rss.feeds : Space-separated list of RSS URLs<br> * rss.length : Maximum length of the module, default is 60 |
|sensors |Displays sensor temperature<br><br>Parameters:<br> * sensors.path: path to temperature file (default /sys/class/thermal/thermal_zone0/temp).<br> * sensors.json: if set to "true", interpret sensors.path as JSON "path" in the output<br> of "sensors -j" (i.e. <key1>/<key2>/.../<value>), for example, path could<br> be: "coretemp-isa-00000/Core 0/temp1_input" (defaults to "false")<br> * sensors.match: (fallback) Line to match against output of 'sensors -u' (default: temp1_input)<br> * sensors.match_pattern: (fallback) Line to match against before temperature is read (no default)<br> * sensors.match_number: (fallback) which of the matches you want (default -1: last match).<br> * sensors.show_freq: whether to show CPU frequency. (default: true)<br> | |sensors |Displays sensor temperature<br><br>Parameters:<br> * sensors.path: path to temperature file (default /sys/class/thermal/thermal_zone0/temp).<br> * sensors.json: if set to 'true', interpret sensors.path as JSON 'path' in the output<br> of 'sensors -j' (i.e. \<key1\>/\<key2\>/.../\<value\>), for example, path could<br> be: 'coretemp-isa-00000/Core 0/temp1_input' (defaults to 'false')<br> * sensors.match: (fallback) Line to match against output of 'sensors -u' (default: temp1_input)<br> * sensors.match_pattern: (fallback) Line to match against before temperature is read (no default)<br> * sensors.match_number: (fallback) which of the matches you want (default -1: last match).<br> * sensors.show_freq: whether to show CPU frequency. (default: true) |
|sensors2 |Displays sensor temperature and CPU frequency<br><br>Parameters:<br><br> * sensors2.chip: "sensors -u" compatible filter for chip to display (default to empty - show all chips)<br> * sensors2.showcpu: Enable or disable CPU frequency display (default: true)<br> * sensors2.showtemp: Enable or disable temperature display (default: true)<br> * sensors2.showfan: Enable or disable fan display (default: true)<br> * sensors2.showother: Enable or display "other" sensor readings (default: false)<br> * sensors2.showname: Enable or disable show of sensor name (default: false)<br> | |sensors2 |Displays sensor temperature and CPU frequency<br><br>Parameters:<br><br> * sensors2.chip: 'sensors -u' compatible filter for chip to display (default to empty - show all chips)<br> * sensors2.showcpu: Enable or disable CPU frequency display (default: true)<br> * sensors2.showtemp: Enable or disable temperature display (default: true)<br> * sensors2.showfan: Enable or disable fan display (default: true)<br> * sensors2.showother: Enable or display 'other' sensor readings (default: false)<br> * sensors2.showname: Enable or disable show of sensor name (default: false)<br> * sensors2.chip_include: Comma-separated list of chip to include (defaults to '' will include all by default, example: 'coretemp,bat')<br> * sensors2.chip_exclude:Comma separated list of chip to exclude (defaults to '' will exlude none by default)<br> * sensors2.field_include: Comma separated list of chip to include (defaults to '' will include all by default, example: 'temp,fan')<br> * sensors2.field_exclude: Comma separated list of chip to exclude (defaults to '' will exclude none by default)<br> * sensors2.chip_field_exclude: Comma separated list of chip field to exclude (defaults to '' will exclude none by default, example: 'coretemp-isa-0000.temp1,coretemp-isa-0000.fan1')<br> * sensors2.chip_field_include: Comma-separated list of adaper field to include (defaults to '' will include all by default) |
|shell | Execute command in shell and print result<br><br>Few command examples:<br> 'ping 1.1.1.1 -c 1 | grep -Po "(?<=time=)\d+(\.\d+)? ms"'<br> 'echo "BTC=$(curl -s rate.sx/1BTC | grep -Po "^\d+")USD"'<br> 'curl -s https://wttr.in/London?format=%l+%t+%h+%w'<br> 'pip3 freeze | wc -l'<br> 'any_custom_script.sh | grep arguments'<br><br>Parameters:<br> * shell.command: Command to execute<br> Use single parentheses if evaluating anything inside<br> For example shell.command='echo $(date +"%H:%M:%S")'<br> But NOT shell.command="echo $(date +'%H:%M:%S')"<br> Second one will be evaluated only once at startup<br> * shell.interval: Update interval in seconds<br> (defaults to 1s == every bumblebee-status update)<br> * shell.async: Run update in async mode. Won't run next thread if<br> previous one didn't finished yet. Useful for long<br> running scripts to avoid bumblebee-status freezes<br> (defaults to False)<br> | |shell |Execute command in shell and print result<br><br>Few command examples:<br> 'ping -c 1 1.1.1.1 | grep -Po '(?\<=time=)\d+(\.\d+)? ms''<br> 'echo 'BTC=$(curl -s rate.sx/1BTC | grep -Po '^\d+')USD''<br> 'curl -s https://wttr.in/London?format=%l+%t+%h+%w'<br> 'pip3 freeze | wc -l'<br> 'any_custom_script.sh | grep arguments'<br><br>Parameters:<br> * shell.command: Command to execute<br> Use single parentheses if evaluating anything inside (sh-style)<br> For example shell.command='echo $(date +'%H:%M:%S')'<br> But NOT shell.command='echo $(date +'%H:%M:%S')'<br> Second one will be evaluated only once at startup<br> * shell.interval: Update interval in seconds<br> (defaults to 1s == every bumblebee-status update)<br> * shell.async: Run update in async mode. Won't run next thread if<br> previous one didn't finished yet. Useful for long<br> running scripts to avoid bumblebee-status freezes<br> (defaults to False) |
|shortcut |Shows a widget per user-defined shortcut and allows to define the behaviour<br>when clicking on it.<br><br>For more than one shortcut, the commands and labels are strings separated by<br>a demiliter (; semicolon by default).<br><br>For example in order to create two shortcuts labeled A and B with commands<br>cmdA and cmdB you could do:<br><br> ./bumblebee-status -m shortcut -p shortcut.cmd="ls;ps" shortcut.label="A;B"<br><br>Parameters:<br> * shortcut.cmds : List of commands to execute<br> * shortcut.labels: List of widgets' labels (text)<br> * shortcut.delim : Commands and labels delimiter (; semicolon by default)<br> | |shortcut |Shows a widget per user-defined shortcut and allows to define the behaviour<br>when clicking on it.<br><br>For more than one shortcut, the commands and labels are strings separated by<br>a demiliter (; semicolon by default).<br><br>For example in order to create two shortcuts labeled A and B with commands<br>cmdA and cmdB you could do:<br><br> ./bumblebee-status -m shortcut -p shortcut.cmd='ls;ps' shortcut.label='A;B'<br><br>Parameters:<br> * shortcut.cmds : List of commands to execute<br> * shortcut.labels: List of widgets' labels (text)<br> * shortcut.delim : Commands and labels delimiter (; semicolon by default) |
|spaceapi |Displays the state of a Space API endpoint<br>Space API is an API for hackspaces based on JSON. See spaceapi.io for<br>an example.<br><br>Requires the following libraries:<br> * requests<br> * regex<br><br>Parameters:<br> * spaceapi.url: String representation of the api endpoint<br> * spaceapi.format: Format string for the output<br><br>Format Strings:<br> * Format strings are indicated by double %%<br> * They represent a leaf in the JSON tree, layers seperated by "."<br> * Boolean values can be overwritten by appending "%true%false"<br> in the format string<br> * Example: to reference "open" in "{"state":{"open": true}}"<br> you would write "%%state.open%%", if you also want<br> to say "Open/Closed" depending on the boolean you<br> would write "%%state.open%Open%Closed%%"<br> | |smartstatus |Displays HDD smart status of different drives or all drives<br><br>Parameters:<br> * smartstatus.display: how to display (defaults to 'combined', other choices: 'seperate' or 'singles')<br> * smartstauts.drives: in the case of singles which drives to display, separated comma list value, multiple accepted (defaults to 'sda', example:'sda,sdc') |
|spacer |Draws a widget with configurable text content.<br><br>Parameters:<br> * spacer.text: Widget contents (defaults to empty string)<br> | |spaceapi |Displays the state of a Space API endpoint<br>Space API is an API for hackspaces based on JSON. See spaceapi.io for<br>an example.<br><br>Requires the following libraries:<br> * requests<br> * regex<br><br>Parameters:<br> * spaceapi.url: String representation of the api endpoint<br> * spaceapi.format: Format string for the output<br><br>Format Strings:<br> * Format strings are indicated by double %%<br> * They represent a leaf in the JSON tree, layers seperated by '.'<br> * Boolean values can be overwritten by appending '%true%false'<br> in the format string<br> * Example: to reference 'open' in '{'state':{'open': true}}'<br> you would write '%%state.open%%', if you also want<br> to say 'Open/Closed' depending on the boolean you<br> would write '%%state.open%Open%Closed%%' |
|spotify |Displays the current song being played<br>Requires the following library:<br> * python-dbus<br>Parameters:<br> * spotify.format: Format string (defaults to "{artist} - {title}")<br> Available values are: {album}, {title}, {artist}, {trackNumber}, {playbackStatus}<br> * spotify.previous: Change binding for previous song (default is left click)<br> * spotify.next: Change binding for next song (default is right click)<br> * spotify.pause: Change binding for toggling pause (default is middle click)<br> Available options for spotify.previous, spotify.next and spotify.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN<br> | |spacer |Draws a widget with configurable text content.<br><br>Parameters:<br> * spacer.text: Widget contents (defaults to empty string) |
|stock |Display a stock quote from worldtradingdata.com<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * stock.symbols : Comma-separated list of symbols to fetch<br> * stock.change : Should we fetch change in stock value (defaults to True)<br> | |spotify |Displays the current song being played<br>Requires the following library:<br> * python-dbus<br>Parameters:<br> * spotify.format: Format string (defaults to '{artist} - {title}')<br> Available values are: {album}, {title}, {artist}, {trackNumber}, {playbackStatus}<br> * spotify.previous: Change binding for previous song (default is left click)<br> * spotify.next: Change binding for next song (default is right click)<br> * spotify.pause: Change binding for toggling pause (default is middle click)<br> Available options for spotify.previous, spotify.next and spotify.pause are:<br> LEFT_CLICK, RIGHT_CLICK, MIDDLE_CLICK, SCROLL_UP, SCROLL_DOWN |
|sun |Displays sunrise and sunset times<br><br>Parameters:<br> * cpu.lat : Latitude of your location<br> * cpu.lon : Longitude of your location<br> | |stock |Display a stock quote from worldtradingdata.com<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * stock.symbols : Comma-separated list of symbols to fetch<br> * stock.change : Should we fetch change in stock value (defaults to True) |
|system | system module<br><br>adds the possibility to<br> * shutdown<br> * reboot<br>the system.<br> <br>Per default a confirmation dialog is shown before the actual action is performed.<br> <br>Parameters:<br> * system.confirm: show confirmation dialog before performing any action (default: true) <br> * system.reboot: specify a reboot command (defaults to 'reboot')<br> * system.shutdown: specify a shutdown command (defaults to 'shutdown -h now')<br> * system.logout: specify a logout command (defaults to 'i3exit logout')<br> * system.switch_user: specify a command for switching the user (defaults to 'i3exit switch_user')<br> * system.lock: specify a command for locking the screen (defaults to 'i3exit lock')<br> * system.suspend: specify a command for suspending (defaults to 'i3exit suspend')<br> * system.hibernate: specify a command for hibernating (defaults to 'i3exit hibernate')<br> | |sun |Displays sunrise and sunset times<br><br>Requires the following python packages:<br> * requests<br> * suntime<br><br>Parameters:<br> * cpu.lat : Latitude of your location<br> * cpu.lon : Longitude of your location |
|taskwarrior |Displays the number of pending tasks in TaskWarrior.<br><br>Requires the following library:<br> * taskw<br><br>Parameters:<br> * taskwarrior.taskrc : path to the taskrc file (defaults to ~/.taskrc)<br> | |system |system module<br><br>adds the possibility to<br> * shutdown<br> * reboot<br>the system.<br> <br>Per default a confirmation dialog is shown before the actual action is performed.<br> <br>Parameters:<br> * system.confirm: show confirmation dialog before performing any action (default: true) <br> * system.reboot: specify a reboot command (defaults to 'reboot')<br> * system.shutdown: specify a shutdown command (defaults to 'shutdown -h now')<br> * system.logout: specify a logout command (defaults to 'i3exit logout')<br> * system.switch_user: specify a command for switching the user (defaults to 'i3exit switch_user')<br> * system.lock: specify a command for locking the screen (defaults to 'i3exit lock')<br> * system.suspend: specify a command for suspending (defaults to 'i3exit suspend')<br> * system.hibernate: specify a command for hibernating (defaults to 'i3exit hibernate') |
|test |Test module<br> | |taskwarrior |Displays the number of pending tasks in TaskWarrior.<br><br>Requires the following library:<br> * taskw<br><br>Parameters:<br> * taskwarrior.taskrc : path to the taskrc file (defaults to ~/.taskrc) |
|title |Displays focused i3 window title.<br><br>Requirements:<br> * i3ipc<br><br>Parameters:<br> * title.max : Maximum character length for title before truncating. Defaults to 64.<br> * title.placeholder : Placeholder text to be placed if title was truncated. Defaults to "...".<br> * title.scroll : Boolean flag for scrolling title. Defaults to False<br> | |test |Test module |
|todo |Displays the number of todo items from a text file<br><br>Parameters:<br> * todo.file: File to read TODOs from (defaults to ~/Documents/todo.txt)<br> | |time |Displays the current date and time.<br><br>Parameters:<br> * time.format: strftime()-compatible formatting string<br> * time.locale: locale to use rather than the system default |
|traffic |Displays network IO for interfaces.<br><br>Parameters:<br> * traffic.exclude: Comma-separated list of interface prefixes to exclude (defaults to "lo,virbr,docker,vboxnet,veth")<br> * 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)<br> * traffic.showname: If set to False, hide network interface name (defaults to True)<br> | |timetz |Displays the current date and time.<br><br>Parameters:<br> * time.format: strftime()-compatible formatting string<br> * time.locale: locale to use rather than the system default |
|title |Displays focused i3 window title.<br><br>Requirements:<br> * i3ipc<br><br>Parameters:<br> * title.max : Maximum character length for title before truncating. Defaults to 64.<br> * title.placeholder : Placeholder text to be placed if title was truncated. Defaults to '...'.<br> * title.scroll : Boolean flag for scrolling title. Defaults to False |
|todo |Displays the number of todo items from a text file<br><br>Parameters:<br> * todo.file: File to read TODOs from (defaults to ~/Documents/todo.txt) |
|traffic |Displays network IO for interfaces.<br><br>Parameters:<br> * traffic.exclude: Comma-separated list of interface prefixes to exclude (defaults to 'lo,virbr,docker,vboxnet,veth')<br> * 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)<br> * traffic.showname: If set to False, hide network interface name (defaults to True)<br> * traffic.format: Format string for download/upload speeds.<br> Defaults to '{:.2f}'<br> * traffic.graphlen: Graph lenth in seconds. Positive even integer. Each<br> char shows 2 seconds. If set, enables up/down traffic<br> graphs |
|twmn |Toggle twmn notifications. | |twmn |Toggle twmn notifications. |
|uptime |Displays the system uptime. | |uptime |Displays the system uptime. |
|vault |Copy passwords from a password store into the clipboard (currently supports only "pass")<br><br>Many thanks to [@bbernhard](https://github.com/bbernhard) for the idea!<br><br>Parameters:<br> * vault.duration: Duration until password is cleared from clipboard (defaults to 30)<br> * vault.location: Location of the password store (defaults to ~/.password-store)<br> * vault.offx: x-axis offset of popup menu (defaults to 0)<br> * vault.offy: y-axis offset of popup menu (defaults to 0)<br> | |vault |Copy passwords from a password store into the clipboard (currently supports only 'pass')<br><br>Many thanks to [@bbernhard](https://github.com/bbernhard) for the idea!<br><br>Parameters:<br> * vault.duration: Duration until password is cleared from clipboard (defaults to 30)<br> * vault.location: Location of the password store (defaults to ~/.password-store)<br> * vault.offx: x-axis offset of popup menu (defaults to 0)<br> * vault.offy: y-axis offset of popup menu (defaults to 0) |
|vpn | Displays the VPN profile that is currently in use.<br><br> Left click opens a popup menu that lists all available VPN profiles and allows to establish<br> a VPN connection using that profile.<br><br> Prerequisites:<br> * nmcli needs to be installed and configured properly.<br> To quickly test, whether nmcli is working correctly, type "nmcli -g NAME,TYPE,DEVICE con" which<br> lists all the connection profiles that are configured. Make sure that your VPN profile is in that list!<br><br> e.g: to import a openvpn profile via nmcli:<br> sudo nmcli connection import type openvpn file </path/to/your/openvpn/profile.ovpn><br> | |vpn |Displays the VPN profile that is currently in use.<br><br>Left click opens a popup menu that lists all available VPN profiles and allows to establish<br>a VPN connection using that profile.<br><br>Prerequisites:<br> * tk python library (usually python-tk or python3-tk, depending on your distribution)<br> * nmcli needs to be installed and configured properly.<br> To quickly test, whether nmcli is working correctly, type 'nmcli -g NAME,TYPE,DEVICE con' which<br> lists all the connection profiles that are configured. Make sure that your VPN profile is in that list!<br><br> e.g: to import a openvpn profile via nmcli:<br> sudo nmcli connection import type openvpn file \</path/to/your/openvpn/profile.ovpn\> |
|weather |Displays the temperature on the current location based on the ip<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * weather.location: Set location, defaults to 'auto' for getting location from http://ipinfo.io<br> If set to a comma-separated list, left-click and right-click can be used to rotate the locations.<br> Locations should be city names or city ids.<br> * weather.unit: metric (default), kelvin, imperial<br> * weather.showcity: If set to true, show location information, otherwise hide it (defaults to true)<br> * weather.showminmax: If set to true, show the minimum and maximum temperature, otherwise hide it (defaults to false)<br> * weather.apikey: API key from http://api.openweathermap.org<br> | |watson |Displays the status of watson (time-tracking tool)<br><br>Requires the following executable:<br> * watson |
|weather |Displays the temperature on the current location based on the ip<br><br>Requires the following python packages:<br> * requests<br><br>Parameters:<br> * weather.location: Set location, defaults to 'auto' for getting location automatically from a web service<br> If set to a comma-separated list, left-click and right-click can be used to rotate the locations.<br> Locations should be city names or city ids.<br> * weather.unit: metric (default), kelvin, imperial<br> * weather.showcity: If set to true, show location information, otherwise hide it (defaults to true)<br> * weather.showminmax: If set to true, show the minimum and maximum temperature, otherwise hide it (defaults to false)<br> * weather.apikey: API key from http://api.openweathermap.org |
|xkcd |Opens a random xkcd comic in the browser. | |xkcd |Opens a random xkcd comic in the browser. |
|xrandr |Shows a widget for each connected screen and allows the user to enable/disable screens.<br><br>Parameters:<br> * xrandr.overwrite_i3config: If set to 'true', this module assembles a new i3 config<br> every time a screen is enabled or disabled by taking the file "~/.config/i3/config.template"<br> and appending a file "~/.config/i3/config.<screen name>" for every screen.<br> * xrandr.autoupdate: If set to 'false', does *not* invoke xrandr automatically. Instead, the<br> module will only refresh when displays are enabled or disabled (defaults to true)<br><br>Requires the following python module:<br> * (optional) i3 - if present, the need for updating the widget list is auto-detected<br><br>Requires the following executable:<br> * xrandr<br> | |xrandr |Shows a widget for each connected screen and allows the user to enable/disable screens.<br><br>Parameters:<br> * xrandr.overwrite_i3config: If set to 'true', this module assembles a new i3 config<br> every time a screen is enabled or disabled by taking the file '~/.config/i3/config.template'<br> and appending a file '~/.config/i3/config.\<screen name\>' for every screen.<br> * xrandr.autoupdate: If set to 'false', does *not* invoke xrandr automatically. Instead, the<br> module will only refresh when displays are enabled or disabled (defaults to true)<br><br>Requires the following python module:<br> * (optional) i3 - if present, the need for updating the widget list is auto-detected<br><br>Requires the following executable:<br> * xrandr |
|zpool |Displays info about zpools present on the system<br><br>Parameters:<br> * zpool.list: Comma-separated list of zpools to display info for. If empty, info for all zpools<br> is displayed. (Default: "")<br> * zpool.format: Format string, tags {name}, {used}, {left}, {size}, {percentfree}, {percentuse},<br> {status}, {shortstatus}, {fragpercent}, {deduppercent} are supported.<br> (Default: "{name} {used}/{size} ({percentfree}%)")<br> * zpool.showio: Show also widgets detailing current read and write I/O (Default: true)<br> * zpool.ioformat: Format string for I/O widget, tags {ops} (operations per seconds) and {band}<br> (bandwidth) are supported. (Default: "{band}")<br> * zpool.warnfree: Warn if free space is below this percentage (Default: 10)<br> * zpool.sudo: Use sudo when calling the `zpool` binary. (Default: false)<br><br>Option `zpool.sudo` is intended for Linux users using zfsonlinux older than 0.7.0: In pre-0.7.0<br>releases of zfsonlinux regular users couldn't invoke even informative commands such as<br>`zpool list`. If this option is true, command `zpool list` is invoked with sudo. If this option<br>is used, the following (or ekvivalent) must be added to the `sudoers(5)`:<br><br>```<br><username/ALL> ALL = (root) NOPASSWD: /usr/bin/zpool list<br>```<br><br>Be aware of security implications of doing this!<br> | |yubikey |Shows yubikey information<br><br>Requires: https://github.com/Yubico/python-yubico<br><br>The output indicates that a YubiKey is not connected or it displays<br>the corresponding serial number. |
|zpool |Displays info about zpools present on the system<br><br>Parameters:<br> * zpool.list: Comma-separated list of zpools to display info for. If empty, info for all zpools<br> is displayed. (Default: '')<br> * zpool.format: Format string, tags {name}, {used}, {left}, {size}, {percentfree}, {percentuse},<br> {status}, {shortstatus}, {fragpercent}, {deduppercent} are supported.<br> (Default: '{name} {used}/{size} ({percentfree}%)')<br> * zpool.showio: Show also widgets detailing current read and write I/O (Default: true)<br> * zpool.ioformat: Format string for I/O widget, tags {ops} (operations per seconds) and {band}<br> (bandwidth) are supported. (Default: '{band}')<br> * zpool.warnfree: Warn if free space is below this percentage (Default: 10)<br> * zpool.sudo: Use sudo when calling the `zpool` binary. (Default: false)<br><br>Option `zpool.sudo` is intended for Linux users using zfsonlinux older than 0.7.0: In pre-0.7.0<br>releases of zfsonlinux regular users couldn't invoke even informative commands such as<br>`zpool list`. If this option is true, command `zpool list` is invoked with sudo. If this option<br>is used, the following (or ekvivalent) must be added to the `sudoers(5)`:<br><br>```<br>\<username/ALL\> ALL = (root) NOPASSWD: /usr/bin/zpool list<br>```<br><br>Be aware of security implications of doing this! |

View file