[docs] significant revamp - add sphinx support

make it possible to compile documentation via sphinx - main change is to
use RST instead of MarkDown for most files.
This commit is contained in:
tobi-wan-kenobi 2020-05-04 20:02:48 +02:00
parent fdd239d234
commit 49c1465b65
21 changed files with 1859 additions and 526 deletions

View file

@ -11,7 +11,7 @@ If you want to file a bug, simply open an issue and describe your problem. Thing
But even if you can't provide those, any indicator that something is not working as it should is much appreciated!
### Adding a new module or theme
If you want to add a new module, please have a look at [how to write a new module](doc/HOWTO_MODULE.md) and [how to write a new theme](doc/HOWTO_THEME.md). Then simply create a Pull Request and I will review the changes as soon as possible.
If you want to add a new module, please have a look at [how to write a new module](docs/development/module.rst) and [how to write a new theme](docs/development/theme.rst). Then simply create a Pull Request and I will review the changes as soon as possible.
If you want to do me a *big* favour, check the Travis status for any failing unit tests. Oh - and if you happen to add unit tests, that's also something I am very grateful for!
Thanks for reading until here! :)

View file

@ -7,7 +7,7 @@
**Many, many thanks to all contributors! I am still amazed by and deeply grateful for how many PRs this project gets.**
![List of modules](doc/LIST-OF-MODULES.md)
![List of modules](docs/modules.rst)
![Solarized Powerline](screenshots/themes/powerline-solarized.png)
@ -15,8 +15,8 @@ bumblebee-status is a modular, theme-able status line generator for the [i3 wind
Focus is on:
* ease of use, sane defaults (no mandatory configuration file)
* [custom themes](doc/development/WRITING-A-THEME.md)
* [custom modules](doc/development/WRITING-A-MODULE.md)
* [custom themes](docs/development/theme.rst)
* [custom modules](docs/development/module.rst)
I hope you like it and I appreciate any kind of feedback: bug reports, feature requests, etc. :)
@ -37,15 +37,15 @@ bar {
```
# Documentation
See [the docs](doc/) for detailed documentation.
See [the docs](docs/) for detailed documentation.
See [FAQ](doc/FAQ.md) for. well, FAQs.
See [FAQ](docs/FAQ.rst) for. well, FAQs.
Other resources:
* A list of [available modules](doc/LIST-OF-MODULES.md)
* [How to write a module](doc/development/WRITING-A-MODULE.md)
* [How to write a theme](doc/development/WRITING-A-THEME.md)
* A list of [available modules](docs/modules.rst)
* [How to write a module](docs/development/module.rst)
* [How to write a theme](docs/development/theme.rst)
# Installation
```
@ -63,7 +63,7 @@ pip install --user bumblebee-status
```
# Dependencies
[Available modules](doc/LIST-OF-MODULES.md) lists the dependencies (Python modules and external executables)
[Available modules](docs/modules.rst) lists the dependencies (Python modules and external executables)
for each module. If you are not using a module, you don't need the dependencies.
# Usage
@ -118,4 +118,4 @@ Restart i3wm and - that's it!
# Examples
![List of themes](./doc/LIST-OF-THEMES.md)
![List of themes](./docs/themes.rst)

View file

@ -1,25 +0,0 @@
# FAQs
## My bar doesn't show any background colors
Please check that you are using i3wm 4.12 or later. Before that, i3wm didn't have background color support for the status bar.
## Some of the icons don't render correctly
Please check that you have ![Font Awesome](https://fontawesome.com/) installed (version 4).
:information_source: The ![Font Awesome](https://fontawesome.com/) is required for all themes that contain icons (because that is the font that includes these icons). Please refer to your distribution's package management on how to install them, or get them from their website directly. Also, please note that Font Awesome removed some icons used by `bumblebee-status` from the free set in version 5, so if possible, stick with 4.
```
# Font Awesome installation instructions
# Arch Linux
$ sudo pacman -S awesome-terminal-fonts
# FreeBSD
$ sudo pkg install font-awesome
$ sudo pkg install py36-tzlocal py36-pytz py36-netifaces py36-psutil py36-requests #for dependencies
# Other
# see https://github.com/gabrielelana/awesome-terminal-fonts
```

View file

@ -1,89 +0,0 @@
# Features and advanced usage
## Events
Many modules provide default handling for various events, for example:
- Mouse-Wheel on any module moves to the next/previous i3 workspace
- Left-click on the "disk" module opens the specified path in a file browser
- Left-click on either "memory" or "cpu" opens a system monitor
- Left-click on a "pulseaudio" (or pasource/pasink) module toggles the mute state
- Mouse-Wheel up/down on a "pulseaudio" module raises/lowers the volume
You can provide your own handlers to any module by using the following "special" configuration parameters:
- left-click
- right-click
- middle-click
- wheel-up
- wheel-down
For example, to execute "pavucontrol" whenever you left-click on the nic module, you could write:
`$ bumblebee-status -p nic.left-click="pavucontrol"`
In the string, you can use the following format identifiers:
- name
- instance
- button
For example:
`$ bumblebee-status -p disk.left-click="nautilus {instance}"`
## Update intervals
The general "update interval" is set using the `-i|--interval` parameter of `bumblebee-status`, and defaults to 1 second.
Some modules override this interval to update less frequently (e.g. the kernel version is updated only very rarely, as it
usually doesn't change during runtime).
Also, modules like `weather` or `stock` update less frequently, to avoid hitting API limits.
For each module, it is possible to specify a parameter `interval` to override that behaviour.
For example, to update the battery status once per minute, you'd use something like this:
`$ bumblebee-status -m battery -p battery.interval=1m`
The format supports:
- numbers (assumed to be seconds - `battery.interval=20` means every 20s)
- `h`, `m`, `s` and combinations thereof - `battery.interval=2m30s` means every 2 minutes, 30 seconds)
## Errors
If errors occur, you should see them in the i3bar itself. If that does not work, or you need more information for troubleshooting, you can activate a debug log using the `-d` or `--debug` switch:
```
$ ./bumblebee-status -d -m <list of modules>
```
This will log to stderr, so unless you are running `bumblebee-status` interactively in the CLI, you'll need to specify a logfile using `-f` or `--logfile`. Note that putting `bumblebee-status` into debug mode will show an indicator in the bar to make sure you don't forget to clean up the log file occasionally.
## Automatically hiding modules
If you want to have a minimal bar that stays out of the way, you can use the `-a` or `--autohide` switch to specify a list of module names. All those modules will only be displayed when (and as long as) their state is either warning or critical (high CPU usage, low disk space, etc.). As long as the module is in a "normal" state and does not require attention, it will remain hidden.
Note that this parameter is specified *in addition* to `-m` (i.e. to autohide the CPU module, you would use `bumblebee-status -m cpu memory traffic -a cpu`).
## Additional widget themeing
There are a few parameters you can tweak directly from the commandline via `-p` or `--parameters`:
- `<modulename>.theme.minwidth` sets the minimum width of a module/widget (can be a comma-separated list for multi-widget modules). The parameter can be either an integer (in which case it is taken as "number of characters", or a string, in which case the minwidth is the width of the string (e.g. `-p cpu.minwidth="100.00%"`)
- `<modulename>.theme.align` sets the alignment (again, can be comma-separated for multi-widget modules) - defaults to `left`, valid values are `left`, `right` and `center`
An example:
```
$ bumblebee-status -m sensors2 -p sensors2.theme.minwidth=10,10,10,10 sensors2.theme.align=center,center,left,right
```
## Configuration files
Any parameter that can be specified using `-p <name>=<value>` on the commandline, can alternatively be specified in one of the following configuration files:
- ~/.bumblebee-status.conf
- ~/.config/bumblebee-status.conf
- ~/.config/bumblebee-status/config
These parameters act as **fallback**, so values specified on the commandline take precedence.
Configuration files have the following format:
```
[module-parameters]
<key> = <value>
```
For example:
```
[module-parameters]
github.token=abcdefabcdef12345
```

View file

@ -1,89 +0,0 @@
# Table of modules
|Name |Description |
|-----|------------|
|__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 |
|amixer |get volume level<br /><br />Parameters:<br /> * amixer.device: Device to use, defaults to "Master,0"<p /><p />![amixer](../screenshots/amixer.png) |
|apt |Displays APT package update information (\<to upgrade\>/\<to remove \>)<br />Requires the following packages:<br /> * aptitude |
|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.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)<p /><p />![battery](../screenshots/battery.png) |
|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)<p /><p />![bluetooth](../screenshots/bluetooth.png) |
|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) |
|brightness |Displays the brightness of a display<br /><br />Parameters:<br /> * brightness.step: The amount of increase/decrease on scroll in % (defaults to 2)<p /><p />![brightness](../screenshots/brightness.png) |
|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<p /><p />![caffeine](../screenshots/caffeine.png) |
|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.<p /><p />![cmus](../screenshots/cmus.png) |
|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}%')<p /><p />![cpu](../screenshots/cpu.png) |
|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. |
|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<p /><p />![currency](../screenshots/currency.png) |
|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<p /><p />![date](../screenshots/date.png) |
|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<p /><p />![datetime](../screenshots/datetime.png) |
|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 |
|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 |
|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}%)')<p /><p />![disk](../screenshots/disk.png) |
|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)<p /><p />![dnf](../screenshots/dnf.png) |
|docker_ps |Displays the number of docker containers running<br /><br />Requires the following python packages:<br /> * docker |
|dunst |Toggle dunst notifications.<p /><p />![dunst](../screenshots/dunst.png) |
|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.<p /><p />![getcrypto](../screenshots/getcrypto.png) |
|git |Print the branch and git status for the<br />currently focused window.<br /><br />Requires:<br /> * xcwd<br /> * Python module 'pygit2'<p /><p />![git](../screenshots/git.png) |
|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.<p /><p />![github](../screenshots/github.png) |
|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) |
|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<p /><p />![http_status](../screenshots/http_status.png) |
|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')<p /><p />![indicator](../screenshots/indicator.png) |
|kernel |Shows Linux kernel version information<p /><p />![kernel](../screenshots/kernel.png) |
|layout |Displays and changes the current keyboard layout<br /><br />Requires the following executable:<br /> * setxkbmap<p /><p />![layout](../screenshots/layout.png) |
|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-xkbswitch |Displays and changes the current keyboard layout<br /><br />Requires the following executable:<br /> * xkb-switch |
|libvirtvms |Displays count of running libvirt VMs.<br />Required the following python packages:<br /> * libvirt |
|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)<p /><p />![load](../screenshots/load.png) |
|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}'<p /><p />![memory](../screenshots/memory.png) |
|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 |
|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.<p /><p />![mpd](../screenshots/mpd.png) |
|network_traffic |Displays network traffic<br />* No extra configuration needed |
|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}')<p /><p />![nic](../screenshots/nic.png) |
|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/) |
|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 |
|octoprint |Displays the Octorpint status and the printer's bed/tools temperature in the status bar.<br /><br /> Left click opens a popup which shows the bed & tools temperatures and additionally a livestream of the webcam (if enabled).<br /><br />Parameters:<br /> * octoprint.address : Octoprint address (e.q: http://192.168.1.3)<br /> * octoprint.apitoken : Octorpint API Token (can be obtained from the Octoprint Webinterface)<br /> * octoprint.webcam : Set to True if a webcam is connected (default: False) |
|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<p /><p />![pacman](../screenshots/pacman.png) |
|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) |
|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)<p /><p />![ping](../screenshots/ping.png) |
|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) |
|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 |
|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 |
|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 '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'<p /><p />![redshift](../screenshots/redshift.png) |
|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 |
|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)<p /><p />![sensors](../screenshots/sensors.png) |
|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)<p /><p />![sensors2](../screenshots/sensors2.png) |
|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)<p /><p />![shortcut](../screenshots/shortcut.png) |
|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') |
|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%%' |
|spacer |Draws a widget with configurable text content.<br /><br />Parameters:<br /> * spacer.text: Widget contents (defaults to empty string)<p /><p />![spacer](../screenshots/spacer.png) |
|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<p /><p />![spotify](../screenshots/spotify.png) |
|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)<p /><p />![stock](../screenshots/stock.png) |
|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 |
|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') |
|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)<p /><p />![taskwarrior](../screenshots/taskwarrior.png) |
|test |Test module |
|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<p /><p />![time](../screenshots/time.png) |
|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<p /><p />![title](../screenshots/title.png) |
|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)<p /><p />![todo](../screenshots/todo.png) |
|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<p /><p />![traffic](../screenshots/traffic.png) |
|twmn |Toggle twmn notifications. |
|uptime |Displays the system uptime.<p /><p />![uptime](../screenshots/uptime.png) |
|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)<p /><p />![vault](../screenshots/vault.png) |
|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\> |
|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<p /><p />![weather](../screenshots/weather.png) |
|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<p /><p />![xrandr](../screenshots/xrandr.png) |
|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!<p /><p />![zpool](../screenshots/zpool.png) |

View file

@ -1,71 +0,0 @@
# Themes
Here are some screenshots of various themes:
:exclamation: Some themes (e.g. all 'powerline' themes) require [Font Awesome](http://fontawesome.io/) and a powerline-compatible font ([powerline-fonts](https://github.com/powerline/fonts).
:exclamation: If you want to add your own theme, just drop it into `~/.config/bumblebee-status/themes/`
Gruvbox Powerline (`-t gruvbox-powerline`) (contributed by [@TheEdgeOfRage](https://github.com/TheEdgeOfRage)):
![Gruvbox Powerline](../screenshots/themes/powerline-gruvbox.png)
Gruvbox Powerline Light (`-t gruvbox-powerline-light`) (contributed by [freed00m](https://github.com/freed00m)):
![Gruvbox Powerline Light](../screenshots/themes/gruvbox-powerline-light.png)
Solarized Powerline (`-t solarized-powerline`):
![Solarized Powerline](../screenshots/themes/powerline-solarized.png)
Gruvbox (`-t gruvbox`):
![Gruvbox](../screenshots/themes/gruvbox.png)
Gruvbox Light (`-t gruvbox-light`) (contributed by [freed00m](https://github.com/freed00m)):
![Gruvbox Light](../screenshots/themes/gruvbox-light.png)
Solarized (`-t solarized`):
![Solarized](../screenshots/themes/solarized.png)
Powerline (`-t powerline`):
![Powerline](../screenshots/themes/powerline.png)
Greyish Powerline (`-t greyish-powerline`) (contributed by Joshua Bark):
![Greyish Powerline](../screenshots/themes/powerline-greyish.png)
Iceberg (`-t iceberg`) (contributed by [whzup](https://github.com/whzup)):
![Iceberg](../screenshots/themes/iceberg.png)
Iceberg Powerline (`-t iceberg-powerline`) (contributed by [whzup](https://github.com/whzup)):
![Iceberg Powerline](../screenshots/themes/iceberg-powerline.png)
Iceberg Dark Powerline (`-t iceberg-dark-powerline`) (contributed by [gkeep](https://github.com/gkeep)):
![Iceberg Dark Powerline](../screenshots/themes/iceberg-dark-powerline.png)
Iceberg Rainbow (`-t iceberg-rainbow`) (contributed by [whzup](https://github.com/whzup)):
![Iceberg Rainbow](../screenshots/themes/iceberg-rainbow.png)
Iceberg Contrast (`-t iceberg-contrast`) (contributed by [martindoublem](https://github.com/martindoublem)):
![Iceberg Contrast](../screenshots/themes/iceberg-contrast.png)
One Dark Powerline (`-t onedark-powerline`) (contributed by [dillasyx](https://github.com/dillasyx)):
![One Dark Powerline](../screenshots/themes/onedark-powerline.png)
Dracula Powerline (-t dracula-powerline) (contributed by [xsteadfastx](https://github.com/xsteadfastx)):
![Dracula Powerline](../screenshots/themes/dracula-powerline.png)
Default (nothing or `-t default`):
![Default](../screenshots/themes/default.png)

View file

@ -1,130 +0,0 @@
# Writing a bumblebee-status module
## Introduction
Adding a new module to `bumblebee-status` is straight-forward:
- Add a new Python module in `modules/contrib/`. The name of the
module will be the name that the user needs to specify when
invoking `bumblebee-status` (i.e. a module called `modules/contrib/test.py`
will be loaded using `bumblebee-status -m test`)
- See below for how to actually write the module
- Test (run `bumblebee-status` in the CLI)
- Make sure your changes don't break anything: `./coverage.sh`
- If you want to do me favour, run your module through `black -t py34` before submitting
## Pull requests
The project **gladly** accepts PRs for bugfixes, new functionality, new
modules, etc.
When you feel comfortable with what you've developed, please just open
a PR, somebody will look at it eventually :) Thanks!
## Coding guidelines
I'm pretty open to whatever style you use, but if it's all the same to you
(and yes, I know that the current codebase is only slowly adapting to this):
- Please favour single quotes for strings (except for docstrings, which are always """)
- For private methods/variables, please use a leading `__` (e.g. `__output` rather than `_output`)
## Hello world
This example will show "hello world" in the status bar:
```python
"""Short description"""
import core.module
import core.widget
class Module(core.module.Module):
def __init__(self, config):
super().__init__(config, core.widget.Widget(self.full_text))
def full_text(self, widgets):
return 'hello world'
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
```
## Of modules and widgets
There are two important concepts for module writers:
- A module is something that offers a single set of coherent functionality
- A module has 1 to n "widgets", which translates to individual blocks in the i3bar
Very often, this is a 1:1 relationship, and a single module has a single widget. If that's the
case for you, you can stop reading now :)
Otherwise, you have a number of ways to handle widgets:
- During the `super().init__(...)` inside the module's constructor, you can specify a **list**
of widgets, and those will comprise the widgets (in ordered fashion)
- During runtime, you can set a new list of widgets by using the `self.widgets(<new list>)`
method of the module
## Adding widgets at runtime
If you want to add widgets during runtime, please use the `add_widget()` method of the module:
```
def do_something(self):
self.add_widget(full_text="my sample text", name="<optional name>")
```
TODO: expand on this
## Periodic updates
`bumblebee-status` modules have two different ways to update their data:
1. Each interval, the callback registered when the widget was created is called. You can do arbitrarily complex things there
2. Each interval, **before** the widget's callback is invoked, a generic `update(self, widgets)` method is called on the **module**
Largely, where you want to put your update code is up to you. My observations:
- If you want to change the widgets a module has, you **have** to stick with `update()`
- For simple modules, doing the data update in the widget callback is simplest (see `kernel`, for example)
## Advanced topics
### Event handlers
The `core.input` module can be used to execute callbacks during mouse events:
```python
import core.module
import core.widget
import core.input
class Module(core.module.Module):
@core.decorators.every(minutes=60, seconds=20)
def __init__(self, config):
super().__init__(config=config, widgets=<widgets>)
core.input.register(widget, button=core.input.LEFT_MOUSE, cmd=<cmd>)
```
The command can be either a CLI tool that will be directly executed (e.g. `cmd='shutdown -h now'`)
or a method that will be executed. The method's signature needs to be: `def <name>(self, event)`,
where "event" is the event data provided by i3wm.
The full list of possible bindings:
- LEFT_MOUSE
- RIGHT_MOUSE
- MIDDLE_MOUSE
- WHEEL_UP
- WHEEL_UP
### Setting a default update interval
To change the default update interval, you can use a simple decorator:
```python
import core.module
import core.widget
import core.decorators
class Module(core.module.Module):
@core.decorators.every(minutes=60, seconds=20)
def __init__(self, config):
super().__init__(config=config, widgets=<widgets>)
```
**NOTE**: This makes the update interval of the module independent of what the
user configures via `-i <interval>`! It is still possible to override the module's
interval using `-p <module>.interval=<value>`, however.
## TODOs
- default update interval
- scrolling
- theme.minwidth
- scrolling decorator
- theme.exclude
- per module update interval -> nice string format
- update via events

View file

@ -1,111 +0,0 @@
# How to write themes
## Introduction
`bumblebee-status` themes are simply JSON files that describe various attributes (foreground color,
background color, etc.) of the blocks that make up a status bar.
It is possible to specify each attribute at various levels:
- For a specific state of a specific module
- For a specific module
- A cycle of attributes (those are cycled through widget-by-widget)
- Default values
Looking up a value follows the "more specific rather than more generic" approach. In other words,
if a foreground color exists for the "warning" state of module "a", any less specific foreground
color value that **would** match will be ignored.
Themes are loaded from the following locations:
- `$(BUMBLEBEE_STATUS_BASE_DIR)/themes/`
- `~/.config/bumblebee-status/themes/`
## Basic structure
A very simple theme file looks like this:
```json
{
"icons": [ "awesome-fonts" ],
"defaults": {
"fg": "#000000",
"bg": "#ffffff",
"warning": {
"fg": "#ff0000",
"bg": "#ffffff"
}
}
}
```
## Icons
Using the `icons` directive, it's possible to reuse icon definitions for multiple themes.
The value of the field is the **basename** of a JSON file located in `$(THEME_DIRECTORY)/icons/`.
The format of the icon file is identical to the theme itself (as the two are essentially just
merged into a single JSON.
## Color definitions and pyWAL support
`bumblebee-status` supports [github:dylanaraps/pywal](https://github.com/dylanaraps/pywal) definitions.
To make use of them, simply generate a colorset using pyWAL and reference it in the theme like
this:
```json
{
"icons": [ ... ],
"colors": [ "wal" ],
"defaults": {
"critical": {
"fg": "cursor",
"bg": "color5"
},
"warning": {
"fg": "cursor",
"bg": "color6"
},
}
}
```
Additionally, you can use the `colors` directive to set up named colors for your scheme:
```json
{
"icons": [ ... ],
"colors": [ { "red": "#ff0000", "green": "#00ff00", "black": "#000000" } ],
"defaults": {
"critical": {
"fg": "red",
"bg": "black"
}
}
```
## Pango support
All values that accept a full text (i.e. the base level, `prefix` and `suffix`) accept a special
attribute `pango` **instead** of all other attributes. In other words, if you specify `pango`,
any other attribute on that level (foreground color, etc.) will be ignored!
Inside `pango`, you can just specify arbitrary Pango attributes, and those will be applied to a
`<span></span>` that's automatically enclosing the actual text.
## Full list of attributes
(TODO: Add explanation)
- defaults
- cycle
- icons
- warning
- critical
- fg
- bg
- separator
- padding
- pango
- prefix
- suffix
- default-separators
- separator-block-width
- &lt;module name&gt;
- &lt;state&gt;
## Examples
see [github:tobi-wan-kenobi/bumblebee-status/themes](https://github.com/tobi-wan-kenobi/bumblebee-status/tree/master/themes)

38
docs/FAQ.rst Normal file
View file

@ -0,0 +1,38 @@
.. contents::
FAQs
====
My bar doesnt show any background colors
-----------------------------------------
Please check that you are using i3wm 4.12 or later. Before that, i3wm
didnt have background color support for the status bar.
Some of the icons dont render correctly
----------------------------------------
Please check that you have |Font Awesome| installed (version 4).
.. note:: The |Font Awesome| is required for all themes that
contain icons (because that is the font that includes these icons).
Please refer to your distributions package management on how to install
them, or get them from their website directly. Also, please note that
Font Awesome removed some icons used by ``bumblebee-status`` from the
free set in version 5, so if possible, stick with 4.
.. code-block:: bash
# Font Awesome installation instructions
# Arch Linux
$ sudo pacman -S awesome-terminal-fonts
# FreeBSD
$ sudo pkg install font-awesome
$ sudo pkg install py36-tzlocal py36-pytz py36-netifaces py36-psutil py36-requests #for dependencies
# Other
# see https://github.com/gabrielelana/awesome-terminal-fonts
.. |Font Awesome| image:: https://fontawesome.com/

20
docs/Makefile Normal file
View file

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

52
docs/conf.py Normal file
View file

@ -0,0 +1,52 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = 'bumblebee-status'
copyright = '2020, tobi-wan-kenobi'
author = 'tobi-wan-kenobi'
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'sphinx_rtd_theme'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

View file

@ -0,0 +1,16 @@
Developer's Guide
============================================
.. toctree::
:maxdepth: 2
:caption: Contents:
module
theme
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

160
docs/development/module.rst Normal file
View file

@ -0,0 +1,160 @@
How to write a new module
=========================
Introduction
------------
Adding a new module to ``bumblebee-status`` is straight-forward:
- Add a new Python module in ``modules/contrib/``. The name of the
module will be the name that the user needs to specify when invoking
``bumblebee-status`` (i.e. a module called
``modules/contrib/test.py`` will be loaded using
``bumblebee-status -m test``)
- See below for how to actually write the module
- Test (run ``bumblebee-status`` in the CLI)
- Make sure your changes dont break anything: ``./coverage.sh``
- If you want to do me favour, run your module through
``black -t py34`` before submitting
Pull requests
-------------
The project **gladly** accepts PRs for bugfixes, new functionality, new
modules, etc. When you feel comfortable with what youve developed,
please just open a PR, somebody will look at it eventually :) Thanks!
Coding guidelines
-----------------
Im pretty open to whatever style you use, but if its all the same to
you (and yes, I know that the current codebase is only slowly adapting
to this): - Please favour single quotes for strings (except for
docstrings, which are always """) - For private methods/variables,
please use a leading ``__`` (e.g. ``__output`` rather than ``_output``)
Hello world
-----------
This example will show “hello world” in the status bar:
.. code:: python
"""Short description"""
import core.module
import core.widget
class Module(core.module.Module):
def __init__(self, config):
super().__init__(config, core.widget.Widget(self.full_text))
def full_text(self, widgets):
return 'hello world'
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
Of modules and widgets
----------------------
There are two important concepts for module writers: - A module is
something that offers a single set of coherent functionality - A module
has 1 to n “widgets”, which translates to individual blocks in the i3bar
Very often, this is a 1:1 relationship, and a single module has a single
widget. If thats the case for you, you can stop reading now :)
Otherwise, you have a number of ways to handle widgets: - During the
``super().init__(...)`` inside the modules constructor, you can specify
a **list** of widgets, and those will comprise the widgets (in ordered
fashion) - During runtime, you can set a new list of widgets by using
the ``self.widgets(<new list>)`` method of the module
Adding widgets at runtime
-------------------------
If you want to add widgets during runtime, please use the
``add_widget()`` method of the module:
::
def do_something(self):
self.add_widget(full_text="my sample text", name="<optional name>")
TODO: expand on this
Periodic updates
----------------
``bumblebee-status`` modules have two different ways to update their
data: 1. Each interval, the callback registered when the widget was
created is called. You can do arbitrarily complex things there 2. Each
interval, **before** the widgets callback is invoked, a generic
``update(self, widgets)`` method is called on the **module**
Largely, where you want to put your update code is up to you. My
observations: - If you want to change the widgets a module has, you
**have** to stick with ``update()`` - For simple modules, doing the data
update in the widget callback is simplest (see ``kernel``, for example)
Advanced topics
---------------
Event handlers
~~~~~~~~~~~~~~
The ``core.input`` module can be used to execute callbacks during mouse
events:
.. code:: python
import core.module
import core.widget
import core.input
class Module(core.module.Module):
@core.decorators.every(minutes=60, seconds=20)
def __init__(self, config):
super().__init__(config=config, widgets=<widgets>)
core.input.register(widget, button=core.input.LEFT_MOUSE, cmd=<cmd>)
The command can be either a CLI tool that will be directly executed
(e.g. ``cmd='shutdown -h now'``) or a method that will be executed. The
methods signature needs to be: ``def <name>(self, event)``, where
“event” is the event data provided by i3wm.
The full list of possible bindings: - LEFT_MOUSE - RIGHT_MOUSE -
MIDDLE_MOUSE - WHEEL_UP - WHEEL_UP
Setting a default update interval
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To change the default update interval, you can use a simple decorator:
.. code:: python
import core.module
import core.widget
import core.decorators
class Module(core.module.Module):
@core.decorators.every(minutes=60, seconds=20)
def __init__(self, config):
super().__init__(config=config, widgets=<widgets>)
**NOTE**: This makes the update interval of the module independent of
what the user configures via ``-i <interval>``! It is still possible to
override the modules interval using ``-p <module>.interval=<value>``,
however.
TODOs
-----
- default update interval
- scrolling
- theme.minwidth
- scrolling decorator
- theme.exclude
- per module update interval -> nice string format
- update via events

132
docs/development/theme.rst Normal file
View file

@ -0,0 +1,132 @@
How to write a new theme
========================
Introduction
------------
``bumblebee-status`` themes are simply JSON files that describe various
attributes (foreground color, background color, etc.) of the blocks that
make up a status bar.
It is possible to specify each attribute at various levels: - For a
specific state of a specific module - For a specific module - A cycle of
attributes (those are cycled through widget-by-widget) - Default values
Looking up a value follows the “more specific rather than more generic”
approach. In other words, if a foreground color exists for the “warning”
state of module “a”, any less specific foreground color value that
**would** match will be ignored.
Themes are loaded from the following locations: -
``$(BUMBLEBEE_STATUS_BASE_DIR)/themes/`` -
``~/.config/bumblebee-status/themes/``
Basic structure
---------------
A very simple theme file looks like this:
.. code:: json
{
"icons": [ "awesome-fonts" ],
"defaults": {
"fg": "#000000",
"bg": "#ffffff",
"warning": {
"fg": "#ff0000",
"bg": "#ffffff"
}
}
}
Icons
-----
Using the ``icons`` directive, its possible to reuse icon definitions
for multiple themes. The value of the field is the **basename** of a
JSON file located in ``$(THEME_DIRECTORY)/icons/``. The format of the
icon file is identical to the theme itself (as the two are essentially
just merged into a single JSON.
Color definitions and pyWAL support
-----------------------------------
``bumblebee-status`` supports
`github:dylanaraps/pywal <https://github.com/dylanaraps/pywal>`__
definitions.
To make use of them, simply generate a colorset using pyWAL and
reference it in the theme like this:
.. code:: json
{
"icons": [ ],
"colors": [ "wal" ],
"defaults": {
"critical": {
"fg": "cursor",
"bg": "color5"
},
"warning": {
"fg": "cursor",
"bg": "color6"
},
}
}
Additionally, you can use the ``colors`` directive to set up named
colors for your scheme:
.. code:: json
{
"icons": [ ],
"colors": [ { "red": "#ff0000", "green": "#00ff00", "black": "#000000" } ],
"defaults": {
"critical": {
"fg": "red",
"bg": "black"
}
}
Pango support
-------------
All values that accept a full text (i.e. the base level, ``prefix`` and
``suffix``) accept a special attribute ``pango`` **instead** of all
other attributes. In other words, if you specify ``pango``, any other
attribute on that level (foreground color, etc.) will be ignored!
Inside ``pango``, you can just specify arbitrary Pango attributes, and
those will be applied to a ``<span></span>`` thats automatically
enclosing the actual text.
Full list of attributes
-----------------------
(TODO: Add explanation)
- defaults
- cycle
- icons
- warning
- critical
- fg
- bg
- separator
- padding
- pango
- prefix
- suffix
- default-separators
- separator-block-width
- <module name>
- <state>
Examples
--------
see
`github:tobi-wan-kenobi/bumblebee-status/themes <https://github.com/tobi-wan-kenobi/bumblebee-status/tree/master/themes>`__

131
docs/features.rst Normal file
View file

@ -0,0 +1,131 @@
Advanced usage
===========================
Events
------
Many modules provide default handling for various events, for example:
- Mouse-Wheel on any module moves to the next/previous i3 workspace
- Left-click on the “disk” module opens the specified path in a file
browser
- Left-click on either “memory” or “cpu” opens a system monitor
- Left-click on a “pulseaudio” (or pasource/pasink) module toggles the
mute state
- Mouse-Wheel up/down on a “pulseaudio” module raises/lowers the volume
You can provide your own handlers to any module by using the following
“special” configuration parameters:
- left-click
- right-click
- middle-click
- wheel-up
- wheel-down For example, to execute “pavucontrol” whenever you
left-click on the nic module, you could write:
``$ bumblebee-status -p nic.left-click="pavucontrol"``
In the string, you can use the following format identifiers: - name -
instance - button
For example:
``$ bumblebee-status -p disk.left-click="nautilus {instance}"``
Update intervals
----------------
The general “update interval” is set using the ``-i|--interval``
parameter of ``bumblebee-status``, and defaults to 1 second. Some
modules override this interval to update less frequently (e.g. the
kernel version is updated only very rarely, as it usually doesnt change
during runtime). Also, modules like ``weather`` or ``stock`` update less
frequently, to avoid hitting API limits.
For each module, it is possible to specify a parameter ``interval`` to
override that behaviour.
For example, to update the battery status once per minute, youd use
something like this:
``$ bumblebee-status -m battery -p battery.interval=1m``
The format supports: - numbers (assumed to be seconds -
``battery.interval=20`` means every 20s) - ``h``, ``m``, ``s`` and
combinations thereof - ``battery.interval=2m30s`` means every 2 minutes,
30 seconds)
Errors
------
If errors occur, you should see them in the i3bar itself. If that does
not work, or you need more information for troubleshooting, you can
activate a debug log using the ``-d`` or ``--debug`` switch:
::
$ ./bumblebee-status -d -m <list of modules>
This will log to stderr, so unless you are running ``bumblebee-status``
interactively in the CLI, youll need to specify a logfile using ``-f``
or ``--logfile``. Note that putting ``bumblebee-status`` into debug mode
will show an indicator in the bar to make sure you dont forget to clean
up the log file occasionally.
Automatically hiding modules
----------------------------
If you want to have a minimal bar that stays out of the way, you can use
the ``-a`` or ``--autohide`` switch to specify a list of module names.
All those modules will only be displayed when (and as long as) their
state is either warning or critical (high CPU usage, low disk space,
etc.). As long as the module is in a “normal” state and does not require
attention, it will remain hidden. Note that this parameter is specified
*in addition* to ``-m`` (i.e. to autohide the CPU module, you would use
``bumblebee-status -m cpu memory traffic -a cpu``).
Additional widget themeing
--------------------------
There are a few parameters you can tweak directly from the commandline
via ``-p`` or ``--parameters``: - ``<modulename>.theme.minwidth`` sets
the minimum width of a module/widget (can be a comma-separated list for
multi-widget modules). The parameter can be either an integer (in which
case it is taken as “number of characters”, or a string, in which case
the minwidth is the width of the string
(e.g. ``-p cpu.minwidth="100.00%"``) - ``<modulename>.theme.align`` sets
the alignment (again, can be comma-separated for multi-widget modules) -
defaults to ``left``, valid values are ``left``, ``right`` and
``center``
An example:
::
$ bumblebee-status -m sensors2 -p sensors2.theme.minwidth=10,10,10,10 sensors2.theme.align=center,center,left,right
Configuration files
-------------------
Any parameter that can be specified using ``-p <name>=<value>`` on the
commandline, can alternatively be specified in one of the following
configuration files: - ~/.bumblebee-status.conf -
~/.config/bumblebee-status.conf - ~/.config/bumblebee-status/config
These parameters act as **fallback**, so values specified on the
commandline take precedence.
Configuration files have the following format:
::
[module-parameters]
<key> = <value>
For example:
::
[module-parameters]
github.token=abcdefabcdef12345

25
docs/index.rst Normal file
View file

@ -0,0 +1,25 @@
.. bumblebee-status documentation master file, created by
sphinx-quickstart on Mon May 4 08:03:26 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to bumblebee-status's documentation!
============================================
.. toctree::
:maxdepth: 2
:caption: Contents
introduction
features
FAQ
modules
themes
development/index
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

131
docs/introduction.rst Normal file
View file

@ -0,0 +1,131 @@
Introduction
================
General
----------------
bumblebee-status is a modular, theme-able status line generator for the
`i3 window manager <https://i3wm.org/>`__.
Focus is on:
- ease of use, sane defaults (no mandatory configuration file)
- custom modules: :doc:`development/module`
- custom themes: :doc:`development/theme`
I hope you like it and I appreciate any kind of feedback: bug reports,
feature requests, etc. :)
Thanks a lot!
Required i3wm version: 4.12+ (in earlier versions, blocks wont have
background colors)
Supported Python versions: 3.4, 3.5, 3.6, 3.7, 3.8
Supported FontAwesome version: 4 (free version of 5 doesnt include some
of the icons)
Example usage:
.. code-block::
bar {
status_command <path>/bumblebee-status \
-m cpu memory battery time pasink pasource \
-p time.format="%H:%M" \
-t solarized
}
Installation
----------------
.. code-block::
# from git (development snapshot)
$ git clone git://github.com/tobi-wan-kenobi/bumblebee-status
# from AUR:
git clone https://aur.archlinux.org/bumblebee-status.git
cd bumblebee-status
makepkg -sicr
# from PyPI (thanks @tony):
# will install bumblebee-status into ~/.local/bin/bumblebee-status
pip install --user bumblebee-status
Dependencies
------------
:doc:`development/module` lists the dependencies
(Python modules and external executables) for each module. If you are
not using a module, you dont need the dependencies.
Usage
------------
Normal usage
~~~~~~~~~~~~
In your i3wm configuration, modify the *status_command* for your i3bar
like this:
.. code-block::
bar {
status_command <path to bumblebee-status/bumblebee-status> \
-m <list of modules> \
-p <list of module parameters> \
-t <theme>
}
You can retrieve a list of modules (and their parameters) and themes by
entering:
.. code-block::
$ cd bumblebee-status
$ ./bumblebee-status -l themes
$ ./bumblebee-status -l modules
To change the update interval, use:
.. code-block::
$ ./bumblebee-status -m <list of modules> -p interval=<interval in seconds>
The update interval can also be changed on a per-module basis, like
this:
.. code-block::
$ ./bumblebee-status -m cpu memory -p cpu.interval=5s memory.interval=1m
All modules can be given “aliases” using ``<module name>:<alias>``, by
which they can be parametrized, for example:
.. code-block::
$ ./bumblebee-status -m disk:root disk:home -p root.path=/ home.path=/home
As a simple example, this is what my i3 configuration looks like:
.. code-block::
bar {
font pango:Inconsolata 10
position top
tray_output none
status_command ~/.i3/bumblebee-status/bumblebee-status -m nic disk:root \
cpu memory battery date time pasink pasource dnf \
-p root.path=/ time.format="%H:%M CW %V" date.format="%a, %b %d %Y" \
-t solarized-powerline
}
Restart i3wm and - thats it!
Examples
---------
.. include:: themes.rst

35
docs/make.bat Normal file
View file

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

974
docs/modules.rst Normal file
View file

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

134
docs/themes.rst Normal file
View file

@ -0,0 +1,134 @@
Themes
======
Here are some screenshots of various themes:
.. warning:: Some themes (e.g. all powerline themes) require `Font
Awesome <http://fontawesome.io/>`__ and a powerline-compatible font
(`powerline-fonts <https://github.com/powerline/fonts>`__.
.. note:: If you want to add your own theme, just drop it into
`~/.config/bumblebee-status/themes/`
Gruvbox Powerline (``-t gruvbox-powerline``) (contributed by
`TheEdgeOfRage <https://github.com/TheEdgeOfRage>`__):
.. figure:: ../screenshots/themes/powerline-gruvbox.png
:alt: Gruvbox Powerline
Gruvbox Powerline
Gruvbox Powerline Light (``-t gruvbox-powerline-light``) (contributed by
`freed00m <https://github.com/freed00m>`__):
.. figure:: ../screenshots/themes/gruvbox-powerline-light.png
:alt: Gruvbox Powerline Light
Gruvbox Powerline Light
Solarized Powerline (``-t solarized-powerline``):
.. figure:: ../screenshots/themes/powerline-solarized.png
:alt: Solarized Powerline
Solarized Powerline
Gruvbox (``-t gruvbox``):
.. figure:: ../screenshots/themes/gruvbox.png
:alt: Gruvbox
Gruvbox
Gruvbox Light (``-t gruvbox-light``) (contributed by
`freed00m <https://github.com/freed00m>`__):
.. figure:: ../screenshots/themes/gruvbox-light.png
:alt: Gruvbox Light
Gruvbox Light
Solarized (``-t solarized``):
.. figure:: ../screenshots/themes/solarized.png
:alt: Solarized
Solarized
Powerline (``-t powerline``):
.. figure:: ../screenshots/themes/powerline.png
:alt: Powerline
Powerline
Greyish Powerline (``-t greyish-powerline``) (contributed by Joshua
Bark):
.. figure:: ../screenshots/themes/powerline-greyish.png
:alt: Greyish Powerline
Greyish Powerline
Iceberg (``-t iceberg``) (contributed by
`whzup <https://github.com/whzup>`__):
.. figure:: ../screenshots/themes/iceberg.png
:alt: Iceberg
Iceberg
Iceberg Powerline (``-t iceberg-powerline``) (contributed by
`whzup <https://github.com/whzup>`__):
.. figure:: ../screenshots/themes/iceberg-powerline.png
:alt: Iceberg Powerline
Iceberg Powerline
Iceberg Dark Powerline (``-t iceberg-dark-powerline``) (contributed by
`gkeep <https://github.com/gkeep>`__):
.. figure:: ../screenshots/themes/iceberg-dark-powerline.png
:alt: Iceberg Dark Powerline
Iceberg Dark Powerline
Iceberg Rainbow (``-t iceberg-rainbow``) (contributed by
`whzup <https://github.com/whzup>`__):
.. figure:: ../screenshots/themes/iceberg-rainbow.png
:alt: Iceberg Rainbow
Iceberg Rainbow
Iceberg Contrast (``-t iceberg-contrast``) (contributed by
`martindoublem <https://github.com/martindoublem>`__):
.. figure:: ../screenshots/themes/iceberg-contrast.png
:alt: Iceberg Contrast
Iceberg Contrast
One Dark Powerline (``-t onedark-powerline``) (contributed by
`dillasyx <https://github.com/dillasyx>`__):
.. figure:: ../screenshots/themes/onedark-powerline.png
:alt: One Dark Powerline
One Dark Powerline
Dracula Powerline (-t dracula-powerline) (contributed by
`xsteadfastx <https://github.com/xsteadfastx>`__):
.. figure:: ../screenshots/themes/dracula-powerline.png
:alt: Dracula Powerline
Dracula Powerline
Default (nothing or ``-t default``):
.. figure:: ../screenshots/themes/default.png
:alt: Default
Default