From 629a04a375a857ec303008dbfa1f9583f347c144 Mon Sep 17 00:00:00 2001 From: Pablo Alejandro Mancera Date: Fri, 7 Jul 2023 02:50:09 -0500 Subject: [PATCH] i3status-rust: update to 0.31.8. --- srcpkgs/i3status-rust/files/i3status-rs.1 | 7494 +++++++++++++++++++++ srcpkgs/i3status-rust/template | 18 +- 2 files changed, 7505 insertions(+), 7 deletions(-) create mode 100644 srcpkgs/i3status-rust/files/i3status-rs.1 diff --git a/srcpkgs/i3status-rust/files/i3status-rs.1 b/srcpkgs/i3status-rust/files/i3status-rs.1 new file mode 100644 index 00000000000000..2ce5c46f446931 --- /dev/null +++ b/srcpkgs/i3status-rust/files/i3status-rs.1 @@ -0,0 +1,7494 @@ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.TH i3status-rs 1 "i3status-rs 0.31.8" +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH NAME +i3status\-rs \- A feature\-rich and resource\-friendly replacement for i3status, written in Rust. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH SYNOPSIS +\fBi3status\-rs\fR [\fB\-\-never\-pause\fR] [\fB\-j\fR|\fB\-\-threads\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fICONFIG\fR] +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH DESCRIPTION +A feature\-rich and resource\-friendly replacement for i3status(1), written in Rust. The i3status\-rs program writes a stream of configurable "blocks" of system information (time, battery status, volume, etc.) to standard output in the JSON format understood by i3bar(1) and sway\-bar(5). +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH OPTIONS +.TP +\fB\-\-never\-pause\fR +Ignore any attempts by i3 to pause the bar when hidden/fullscreen +.TP +\fB\-j\fR, \fB\-\-threads\fR=\fIBLOCKING_THREADS\fR [default: 2] +The maximum number of blocking threads spawned by tokio +.TP +\fB\-h\fR, \fB\-\-help\fR +Print help (see a summary with \*(Aq\-h\*(Aq) +.TP +\fB\-V\fR, \fB\-\-version\fR +Print version +.TP +[\fICONFIG\fR] [default: config.toml] +Sets a TOML config file + +1. If full absolute path given, then use it as is: `/home/foo/i3rs\-config.toml` + +2. If filename given, e.g. "custom_theme.toml", then first look in `$XDG_CONFIG_HOME/i3status\-rust` + +3. Then look for it in `$XDG_DATA_HOME/i3status\-rust` + +4. Otherwise look for it in `/usr/share/i3status\-rust` +.SH BLOCKS +.SS amd_gpu +.PP +Display the stats of your AMD GPU +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]device\f[R] +T}@T{ +The device in \f[V]/sys/class/drm/\f[R] to read from. +T}@T{ +\f[V]\[dq]card0\[dq]\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $utilization \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]5\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(18.8n) lw(33.2n) lw(7.2n) lw(10.8n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]utilization\f[R] +T}@T{ +GPU utilization +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]vram_total\f[R] +T}@T{ +Total VRAM +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]vram_used\f[R] +T}@T{ +Used VRAM +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]vram_used_percents\f[R] +T}@T{ +Used VRAM / Total VRAM +T}@T{ +Number +T}@T{ +% +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]amd_gpu\[dq] +format = \[dq] $icon $utilization \[dq] +format_alt = \[dq] $icon MEM: $vram_used_percents ($vram_used/$vram_total) \[dq] +interval = 1 +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]gpu\f[R] +.SS apt +.PP +Pending updates available for your Debian/Ubuntu based system +.PP +Behind the scenes this uses \f[V]apt\f[R], and in order to run it +without root privileges i3status-rust will create its own package +database in \f[V]/tmp/i3rs-apt/\f[R] which may take up several MB or +more. +If you have a custom apt config then this block may not work as expected +- in that case please open an issue. +.PP +Tip: You can grab the list of available updates using +\f[V]APT_CONFIG=/tmp/i3rs-apt/apt.conf apt list --upgradable\f[R] +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]600\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_singular\f[R] +T}@T{ +Same as \f[V]format\f[R], but for when exactly one update is available. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_up_to_date\f[R] +T}@T{ +Same as \f[V]format\f[R], but for when no updates are available. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]warning_updates_regex\f[R] +T}@T{ +Display block as warning if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]critical_updates_regex\f[R] +T}@T{ +Display block as critical if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]ignore_phased_updates\f[R] +T}@T{ +Doesn\[cq]t include potentially held back phased updates in the count. +T}@T{ +\f[V]false\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]count\f[R] +T}@T{ +Number of updates available +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.PP +Update the list of pending updates every thirty minutes (1800 seconds): +.IP +.nf +\f[C] +[[block]] +block = \[dq]apt\[dq] +interval = 1800 +format = \[dq] $icon $count updates available \[dq] +format_singular = \[dq] $icon One update available \[dq] +format_up_to_date = \[dq] $icon system up to date \[dq] +critical_updates_regex = \[dq](linux|linux-lts|linux-zen)\[dq] +[[block.click]] +### shows dmenu with cached available updates. Any dmenu alternative should also work. +button = \[dq]left\[dq] +cmd = \[dq]APT_CONFIG=/tmp/i3rs-apt/apt.conf apt list --upgradable | tail -n +2 | rofi -dmenu\[dq] +[[block.click]] +### Updates the block on right click +button = \[dq]right\[dq] +update = true +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]update\f[R] +.SS backlight +.PP +The brightness of a backlight device +.PP +This block reads brightness information directly from the filesystem, so +it works under both X11 and Wayland. +The block uses \f[V]inotify\f[R] to listen for changes in the +device\[cq]s brightness directly, so there is no need to set an update +interval. +This block uses DBus to set brightness level using the mouse wheel, but +will fallback to sysfs if \f[V]systemd-logind\f[R] is not used. +.SS Root scaling +.PP +Some devices expose raw values that are best handled with nonlinear +scaling. +The human perception of lightness is close to the cube root of relative +luminance, so settings for \f[V]root_scaling\f[R] between 2.4 and 3.0 +are worth trying. +For devices with few discrete steps this should be 1.0 (linear). +More information: +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]device\f[R] +T}@T{ +A regex to match against \f[V]/sys/class/backlight\f[R] devices to read +brightness information from (can match 1 or more devices). +When there is no \f[V]device\f[R] specified, this block will display +information for all devices found in the \f[V]/sys/class/backlight\f[R] +directory. +T}@T{ +Default device +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $brightness \[dq]\f[R] +T} +T{ +\f[V]missing_format\f[R] +T}@T{ +A string to customise the output of this block. +No placeholders available +T}@T{ +\f[V]\[dq] no backlight devices \[dq]\f[R] +T} +T{ +\f[V]step_width\f[R] +T}@T{ +The brightness increment to use when scrolling, in percent +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]minimum\f[R] +T}@T{ +The minimum brightness that can be scrolled down to +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]maximum\f[R] +T}@T{ +The maximum brightness that can be scrolled up to +T}@T{ +\f[V]100\f[R] +T} +T{ +\f[V]cycle\f[R] +T}@T{ +The brightnesses to cycle through on each click +T}@T{ +\f[V][minimum, maximum]\f[R] +T} +T{ +\f[V]root_scaling\f[R] +T}@T{ +Scaling exponent reciprocal (ie. +root) +T}@T{ +\f[V]1.0\f[R] +T} +T{ +\f[V]invert_icons\f[R] +T}@T{ +Invert icons\[cq] ordering, useful if you have colorful emoji +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]ddcci_sleep_multiplier\f[R] +T}@T{ +See ddcutil +documentation (https://www.ddcutil.com/performance_options/#option-sleep-multiplier) +T}@T{ +\f[V]1.0\f[R] +T} +T{ +\f[V]ddcci_max_tries_write_read\f[R] +T}@T{ +The maximum number of times to attempt writing to or reading from a +ddcci monitor +T}@T{ +\f[V]10\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(11.5n) lw(38.1n) lw(7.1n) lw(13.3n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on backlight\[cq]s state +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]brightness\f[R] +T}@T{ +Current brightness +T}@T{ +Number +T}@T{ +% +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]cycle\f[R] +T}@T{ +Left +T} +T{ +\f[V]brightness_up\f[R] +T}@T{ +Wheel Up +T} +T{ +\f[V]brightness_down\f[R] +T}@T{ +Wheel Down +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]backlight\[dq] +device = \[dq]intel_backlight\[dq] +\f[R] +.fi +.PP +Hide missing backlight: +.IP +.nf +\f[C] +[[block]] +block = \[dq]backlight\[dq] +missing_format = \[dq]\[dq] +\f[R] +.fi +.SS calibright +.PP +Additional display brightness calibration can be set in +\f[V]$XDG_CONFIG_HOME/calibright/config.toml\f[R] See + for more details. +This block will override any global config set in +\f[V]$XDG_CONFIG_HOME/calibright/config.toml\f[R] +.SS D-Bus Fallback +.PP +If you don\[cq]t use \f[V]systemd-logind\f[R] i3status-rust will attempt +to set the brightness using sysfs. +In order to do this you\[cq]ll need to have write permission. +You can do this by writing a \f[V]udev\f[R] rule for your system. +.PP +First, check that your user is a member of the \[lq]video\[rq] group +using the \f[V]groups\f[R] command. +Then add a rule in the \f[V]/etc/udev/rules.d/\f[R] directory containing +the following, for example in \f[V]backlight.rules\f[R]: +.IP +.nf +\f[C] +ACTION==\[dq]add\[dq], SUBSYSTEM==\[dq]backlight\[dq], GROUP=\[dq]video\[dq], MODE=\[dq]0664\[dq] +\f[R] +.fi +.PP +This will allow the video group to modify all backlight devices. +You will also need to restart for this rule to take effect. +.SS Icons Used +.IP \[bu] 2 +\f[V]backlight\f[R] (as a progression) +.SS battery +.PP +Information about the internal power supply +.PP +This block can display the current battery state (Full, Charging or +Discharging), percentage charged and estimate time until (dis)charged +for an internal power supply. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]device\f[R] +T}@T{ +sysfs/UPower: The device in \f[V]/sys/class/power_supply/\f[R] to read +from (can also be \[lq]DisplayDevice\[rq] for UPower, which is a single +logical power source representing all physical power sources. +This is for example useful if your system has multiple batteries, in +which case the DisplayDevice behaves as if you had a single larger +battery.). +apc_ups: IPv4Address:port or hostname:port +T}@T{ +sysfs: the first battery device found in /sys/class/power_supply, with +\[lq]BATx\[rq] or \[lq]CMBx\[rq] entries taking precedence. +apc_ups: \[lq]localhost:3551\[rq]. +upower: \f[V]DisplayDevice\f[R] +T} +T{ +\f[V]driver\f[R] +T}@T{ +One of \f[V]\[dq]sysfs\[dq]\f[R], \f[V]\[dq]apc_ups\[dq]\f[R], or +\f[V]\[dq]upower\[dq]\f[R] +T}@T{ +\f[V]\[dq]sysfs\[dq]\f[R] +T} +T{ +\f[V]model\f[R] +T}@T{ +If present, the contents of +\f[V]/sys/class/power_supply/.../model_name\f[R] must match this value. +Typical use is to select by model name on devices that change their +path. +T}@T{ +N/A +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +Only relevant for driver = \[lq]sysfs\[rq] or \[lq]apc_ups\[rq]. +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $percentage \[dq]\f[R] +T} +T{ +\f[V]full_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the battery is full +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +T{ +\f[V]charging_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the battery is charging +T}@T{ +Links to \f[V]format\f[R] +T} +T{ +\f[V]empty_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the battery is empty +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +T{ +\f[V]not_charging_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the battery is not charging. +Defaults to the full battery icon as many batteries report this status +when they are full. +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +T{ +\f[V]missing_format\f[R] +T}@T{ +Same as \f[V]format\f[R] if the battery cannot be found. +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +T{ +\f[V]info\f[R] +T}@T{ +Minimum battery level, where state is set to info +T}@T{ +\f[V]60\f[R] +T} +T{ +\f[V]good\f[R] +T}@T{ +Minimum battery level, where state is set to good +T}@T{ +\f[V]60\f[R] +T} +T{ +\f[V]warning\f[R] +T}@T{ +Minimum battery level, where state is set to warning +T}@T{ +\f[V]30\f[R] +T} +T{ +\f[V]critical\f[R] +T}@T{ +Minimum battery level, where state is set to critical +T}@T{ +\f[V]15\f[R] +T} +T{ +\f[V]full_threshold\f[R] +T}@T{ +Percentage above which the battery is considered full +(\f[V]full_format\f[R] shown) +T}@T{ +\f[V]95\f[R] +T} +T{ +\f[V]empty_threshold\f[R] +T}@T{ +Percentage below which the battery is considered empty +T}@T{ +\f[V]7.5\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(8.3n) lw(46.5n) lw(12.1n) lw(3.2n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on battery\[cq]s state +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]percentage\f[R] +T}@T{ +Battery level, in percent +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]time\f[R] +T}@T{ +Time remaining until (dis)charge is complete. +Presented only if battery\[cq]s status is (dis)charging. +T}@T{ +String +T}@T{ +- +T} +T{ +\f[V]power\f[R] +T}@T{ +Power consumption by the battery or from the power supply when charging +T}@T{ +String or Float +T}@T{ +Watts +T} +.TE +.SS Examples +.PP +Basic usage: +.IP +.nf +\f[C] +[[block]] +block = \[dq]battery\[dq] +format = \[dq] $icon $percentage \[dq] +\f[R] +.fi +.IP +.nf +\f[C] +[[block]] +block = \[dq]battery\[dq] +format = \[dq] $percentage {$time |}\[dq] +device = \[dq]DisplayDevice\[dq] +driver = \[dq]upower\[dq] +\f[R] +.fi +.PP +Hide missing battery: +.IP +.nf +\f[C] +[[block]] +block = \[dq]battery\[dq] +missing_format = \[dq]\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]bat\f[R] (as a progression) +.IP \[bu] 2 +\f[V]bat_charging\f[R] (as a progression) +.IP \[bu] 2 +\f[V]bat_not_available\f[R] +.SS bluetooth +.PP +Monitor Bluetooth device +.PP +This block displays the connectivity of a given Bluetooth device and the +battery level if this is supported. +Relies on the Bluez D-Bus API. +.PP +When the device can be identified as an audio headset, a keyboard, +joystick, or mouse, use the relevant icon. +Otherwise, fall back on the generic Bluetooth symbol. +.PP +Right-clicking the block will attempt to connect (or disconnect) the +device. +.PP +Note: battery level information is not reported for some devices. +Enabling experimental features of +\f[V]bluez\f[R] (https://wiki.archlinux.org/title/bluetooth#Enabling_experimental_features) +may fix it. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]mac\f[R] +T}@T{ +MAC address of the Bluetooth device +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]adapter_mac\f[R] +T}@T{ +MAC Address of the Bluetooth adapter (in case your device was connected +to multiple currently available adapters) +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $icon $name{ $percentage|} \[lq] +T} +T{ +\f[V]disconnected_format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $icon{ $name|} \[lq] +T} +T{ +\f[V]battery_state\f[R] +T}@T{ +A mapping from battery percentage to block\[cq]s state (color). +See example below. +T}@T{ +0..15 -> critical, 16..30 -> warning, 31..60 -> info, 61..100 -> good +T} +.TE +.PP +.TS +tab(@); +lw(10.5n) lw(49.7n) lw(5.6n) lw(4.2n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on what type of device is connected +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]name\f[R] +T}@T{ +Device\[cq]s name +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]percentage\f[R] +T}@T{ +Device\[cq]s battery level (may be absent if the device is not +supported) +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]battery_icon\f[R] +T}@T{ +Battery icon (may be absent if the device is not supported) +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]available\f[R] +T}@T{ +Present if the device is available +T}@T{ +Flag +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle\f[R] +T}@T{ +Right +T} +.TE +.SS Examples +.PP +This example just shows the icon when device is connected. +.IP +.nf +\f[C] +[[block]] +block = \[dq]bluetooth\[dq] +mac = \[dq]00:18:09:92:1B:BA\[dq] +disconnected_format = \[dq]\[dq] +format = \[dq] $icon \[dq] +[block.battery_state] +\[dq]0..20\[dq] = \[dq]critical\[dq] +\[dq]21..70\[dq] = \[dq]warning\[dq] +\[dq]71..100\[dq] = \[dq]good\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]headphones\f[R] for bluetooth devices identifying as +\[lq]audio-card\[rq], \[lq]audio-headset\[rq] or +\[lq]audio-headphones\[rq] +.IP \[bu] 2 +\f[V]joystick\f[R] for bluetooth devices identifying as +\[lq]input-gaming\[rq] +.IP \[bu] 2 +\f[V]keyboard\f[R] for bluetooth devices identifying as +\[lq]input-keyboard\[rq] +.IP \[bu] 2 +\f[V]mouse\f[R] for bluetooth devices identifying as +\[lq]input-mouse\[rq] +.IP \[bu] 2 +\f[V]bluetooth\f[R] for all other devices +.SS cpu +.PP +CPU statistics +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $utilization \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]5\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(10.8n) lw(44.5n) lw(5.1n) lw(9.5n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +An icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]utilization\f[R] +T}@T{ +Average CPU utilization +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]utilization\f[R] +T}@T{ +Utilization of Nth logical CPU +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]barchart\f[R] +T}@T{ +Utilization of all logical CPUs presented as a barchart +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]frequency\f[R] +T}@T{ +Average CPU frequency (may be absent if CPU is not supported) +T}@T{ +Number +T}@T{ +Hz +T} +T{ +\f[V]frequency\f[R] +T}@T{ +Frequency of Nth logical CPU (may be absent if CPU is not supported) +T}@T{ +Number +T}@T{ +Hz +T} +T{ +\f[V]max_frequency\f[R] +T}@T{ +Max frequency of all logical CPUs +T}@T{ +Number +T}@T{ +Hz +T} +T{ +\f[V]boost\f[R] +T}@T{ +CPU turbo boost status (may be absent if CPU is not supported) +T}@T{ +Text +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]cpu\[dq] +interval = 1 +format = \[dq] $icon $barchart $utilization \[dq] +format_alt = \[dq] $icon $frequency{ $boost|} \[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]cpu\f[R] (as a progression) +.IP \[bu] 2 +\f[V]cpu_boost_on\f[R] +.IP \[bu] 2 +\f[V]cpu_boost_off\f[R] +.SS custom +.PP +The output of a custom shell command +.PP +For further customisation, use the \f[V]json\f[R] option and have the +shell command output valid JSON in the schema below: +.IP +.nf +\f[C] +{\[dq]icon\[dq]: \[dq]...\[dq], \[dq]state\[dq]: \[dq]...\[dq], \[dq]text\[dq]: \[dq]...\[dq], \[dq]short_text\[dq]: \[dq]...\[dq]} +\f[R] +.fi +.PP +\f[V]icon\f[R] is optional (default \[lq]\[lq]) \f[V]state\f[R] is +optional, it may be Idle, Info, Good, Warning, Critical (default Idle) +\f[V]short_text\f[R] is optional. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[lq]{ $icon|} $text.pango-str()\[rq] +T} +T{ +\f[V]command\f[R] +T}@T{ +Shell command to execute & display +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]persistent\f[R] +T}@T{ +Run command in the background; update display for each output line of +the command +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]cycle\f[R] +T}@T{ +Commands to execute and change when the button is clicked +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds (or \[lq]once\[rq] to update only once) +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]json\f[R] +T}@T{ +Use JSON from command output to format the block. +If the JSON is not valid, the block will error out. +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]watch_files\f[R] +T}@T{ +Watch files to trigger update on file modification. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]hide_when_empty\f[R] +T}@T{ +Hides the block when the command output (or json text field) is empty +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]shell\f[R] +T}@T{ +Specify the shell to use when running commands +T}@T{ +\f[V]$SHELL\f[R] if set, otherwise fallback to \f[V]sh\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(11.9n) lw(42.0n) lw(5.6n) lw(10.5n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Value of icon field from JSON output when it\[cq]s non-empty +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]text\f[R] +T}@T{ +Output of the script or text field from JSON output +T}@T{ +Text +T}@T{ +T} +T{ +\f[V]short_text\f[R] +T}@T{ +short_text field from JSON output +T}@T{ +Text +T}@T{ +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]cycle\f[R] +T}@T{ +Left +T} +.TE +.SS Examples +.PP +Display temperature, update every 10 seconds: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +command = \[aq]\[aq]\[aq] cat /sys/class/thermal/thermal_zone0/temp | awk \[aq]{printf(\[dq]%.1f\[rs]n\[dq],$1/1000)}\[aq] \[aq]\[aq]\[aq] +\f[R] +.fi +.PP +Cycle between \[lq]ON\[rq] and \[lq]OFF\[rq], update every 1 second, run +next cycle command when block is clicked: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +cycle = [\[dq]echo ON\[dq], \[dq]echo OFF\[dq]] +interval = 1 +[[block.click]] +button = \[dq]left\[dq] +action = \[dq]cycle\[dq] +\f[R] +.fi +.PP +Use JSON output: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +command = \[dq]echo \[aq]{\[rs]\[dq]icon\[rs]\[dq]:\[rs]\[dq]weather_thunder\[rs]\[dq],\[rs]\[dq]state\[rs]\[dq]:\[rs]\[dq]Critical\[rs]\[dq], \[rs]\[dq]text\[rs]\[dq]: \[rs]\[dq]Danger!\[rs]\[dq]}\[aq]\[dq] +json = true +\f[R] +.fi +.PP +Display kernel, update the block only once: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +command = \[dq]uname -r\[dq] +interval = \[dq]once\[dq] +\f[R] +.fi +.PP +Display the screen brightness on an intel machine and update this only +when \f[V]pkill -SIGRTMIN+4 i3status-rs\f[R] is called: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +command = \[aq]\[aq]\[aq] cat /sys/class/backlight/intel_backlight/brightness | awk \[aq]{print $1}\[aq] \[aq]\[aq]\[aq] +signal = 4 +interval = \[dq]once\[dq] +\f[R] +.fi +.PP +Update block when one or more specified files are modified: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom\[dq] +command = \[dq]cat custom_status\[dq] +watch_files = [\[dq]custom_status\[dq]] +interval = \[dq]once\[dq] +\f[R] +.fi +.SS TODO: +.IP \[bu] 2 +Use \f[V]shellexpand\f[R] +.SS custom_dbus +.PP +A block controlled by the DBus +.PP +This block creates a new DBus object in \f[V]rs.i3status\f[R] service. +This object implements \f[V]rs.i3status.custom\f[R] interface which +allows you to set block\[cq]s icon, text and state. +.PP +Output of +\f[V]busctl --user introspect rs.i3status / rs.i3status.custom\f[R]: +.IP +.nf +\f[C] +NAME TYPE SIGNATURE RESULT/VALUE FLAGS +rs.i3status.custom interface - - - +\&.SetIcon method s s - +\&.SetState method s s - +\&.SetText method ss s - +\f[R] +.fi +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +T}@T{ +\[lq]{ $icon|}{ $text.pango-str()|}\[rq] +T} +.TE +.PP +.TS +tab(@); +lw(8.8n) lw(45.5n) lw(5.4n) lw(10.2n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Value of icon set via \f[V]SetIcon\f[R] if the value is non-empty +string. +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]text\f[R] +T}@T{ +Value of the first string from SetText +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]short_text\f[R] +T}@T{ +Value of the second string from SetText +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.PP +Config: +.IP +.nf +\f[C] +[[block]] +block = \[dq]custom_dbus\[dq] +path = \[dq]/my_path\[dq] +\f[R] +.fi +.PP +Usage: +.IP +.nf +\f[C] +### set full text to \[aq]hello\[aq] and short text to \[aq]hi\[aq] +busctl --user call rs.i3status /my_path rs.i3status.custom SetText ss hello hi +### set icon to \[aq]music\[aq] +busctl --user call rs.i3status /my_path rs.i3status.custom SetIcon s music +### set state to \[aq]good\[aq] +busctl --user call rs.i3status /my_path rs.i3status.custom SetState s good +\f[R] +.fi +.PP +Because it\[cq]s impossible to publish objects to the same name from +different processes, having multiple dbus blocks in different bars +won\[cq]t work. +As a workaround, you can set the env var \f[V]I3RS_DBUS_NAME\f[R] to set +the interface a bar works on to differentiate between different +processes. +For example, setting this to `top', will allow you to use +\f[V]rs.i3status.top\f[R]. +.SS TODO +.IP \[bu] 2 +Send a signal on click? +.SS disk_space +.PP +Disk usage statistics +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]path\f[R] +T}@T{ +Path to collect information from. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]\[dq]/\[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update time in seconds +T}@T{ +\f[V]20\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $available \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]warning\f[R] +T}@T{ +A value which will trigger warning block state +T}@T{ +\f[V]20.0\f[R] +T} +T{ +\f[V]alert\f[R] +T}@T{ +A value which will trigger critical block state +T}@T{ +\f[V]10.0\f[R] +T} +T{ +\f[V]info_type\f[R] +T}@T{ +Determines which information will affect the block state. +Possible values are \f[V]\[dq]available\[dq]\f[R], +\f[V]\[dq]free\[dq]\f[R] and \f[V]\[dq]used\[dq]\f[R] +T}@T{ +\f[V]\[dq]available\[dq]\f[R] +T} +T{ +\f[V]alert_unit\f[R] +T}@T{ +The unit of \f[V]alert\f[R] and \f[V]warning\f[R] options. +If not set, percents are used. +Possible values are \f[V]\[dq]B\[dq]\f[R], \f[V]\[dq]KB\[dq]\f[R], +\f[V]\[dq]MB\[dq]\f[R], \f[V]\[dq]GB\[dq]\f[R] and +\f[V]\[dq]TB\[dq]\f[R] +T}@T{ +\f[V]None\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(9.5n) lw(49.6n) lw(5.8n) lw(5.1n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]path\f[R] +T}@T{ +The value of \f[V]path\f[R] option +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]percentage\f[R] +T}@T{ +Free or used percentage. +Depends on \f[V]info_type\f[R] +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]total\f[R] +T}@T{ +Total disk space +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]used\f[R] +T}@T{ +Used disk space +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]free\f[R] +T}@T{ +Free disk space +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]available\f[R] +T}@T{ +Available disk space (free disk space minus reserved system space) +T}@T{ +Number +T}@T{ +Bytes +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]disk_space\[dq] +info_type = \[dq]available\[dq] +alert_unit = \[dq]GB\[dq] +alert = 10.0 +warning = 15.0 +format = \[dq] $icon $available \[dq] +format_alt = \[dq] $icon $available / $total \[dq] +\f[R] +.fi +.PP +Update block on right click: +.IP +.nf +\f[C] +[[block]] +block = \[dq]disk_space\[dq] +[[block.click]] +button = \[dq]right\[dq] +update = true +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]disk_drive\f[R] +.SS dnf +.PP +Pending updates available for your Fedora system +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]600\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_singular\f[R] +T}@T{ +Same as \f[V]format\f[R], but for when exactly one update is available. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_up_to_date\f[R] +T}@T{ +Same as \f[V]format\f[R], but for when no updates are available. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]warning_updates_regex\f[R] +T}@T{ +Display block as warning if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]critical_updates_regex\f[R] +T}@T{ +Display block as critical if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]count\f[R] +T}@T{ +Number of updates available +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.PP +Update the list of pending updates every thirty minutes (1800 seconds): +.IP +.nf +\f[C] +[[block]] +block = \[dq]dnf\[dq] +interval = 1800 +format = \[dq] $icon $count.eng(w:1) updates available \[dq] +format_singular = \[dq] $icon One update available \[dq] +format_up_to_date = \[dq] $icon system up to date \[dq] +critical_updates_regex = \[dq](linux|linux-lts|linux-zen)\[dq] +[[block.click]] +### shows dmenu with cached available updates. Any dmenu alternative should also work. +button = \[dq]left\[dq] +cmd = \[dq]dnf list -q --upgrades | tail -n +2 | rofi -dmenu\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]update\f[R] +.SS docker +.PP +Local docker daemon status +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $running.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]socket_path\f[R] +T}@T{ +The path to the docker socket. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]\[dq]/var/run/docker.sock\[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Key +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]total\f[R] +T}@T{ +Total containers on the host +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]running\f[R] +T}@T{ +Containers running on the host +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]stopped\f[R] +T}@T{ +Containers stopped on the host +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]paused\f[R] +T}@T{ +Containers paused on the host +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]images\f[R] +T}@T{ +Total images on the host +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]docker\[dq] +interval = 2 +format = \[dq] $icon $running/$total \[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]docker\f[R] +.SS external_ip +.PP +External IP address and various information about it +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $ip $country_flag \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Interval in seconds for automatic updates +T}@T{ +\f[V]300\f[R] +T} +T{ +\f[V]with_network_manager\f[R] +T}@T{ +If `true', listen for NetworkManager events and update the IP +immediately if there was a change +T}@T{ +\f[V]true\f[R] +T} +T{ +\f[V]use_ipv4\f[R] +T}@T{ +If `true', use IPv4 for obtaining all info +T}@T{ +\f[V]false\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(14.6n) lw(20.4n) lw(17.5n) lw(17.5n). +T{ +Key +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]ip\f[R] +T}@T{ +The external IP address, as seen from a remote server +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]version\f[R] +T}@T{ +IPv4 or IPv6 +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]city\f[R] +T}@T{ +City name, such as \[lq]San Francisco\[rq] +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]region\f[R] +T}@T{ +Region name, such as \[lq]California\[rq] +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]region_code\f[R] +T}@T{ +Region code, such as \[lq]CA\[rq] for California +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country\f[R] +T}@T{ +Country code (2 letter, ISO 3166-1 alpha-2) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_name\f[R] +T}@T{ +Short country name +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_code\f[R] +T}@T{ +Country code (2 letter, ISO 3166-1 alpha-2) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_code_iso3\f[R] +T}@T{ +Country code (3 letter, ISO 3166-1 alpha-3) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_capital\f[R] +T}@T{ +Capital of the country +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_tld\f[R] +T}@T{ +Country specific TLD (top-level domain) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]continent_code\f[R] +T}@T{ +Continent code +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]in_eu\f[R] +T}@T{ +Region code, such as \[lq]CA\[rq] +T}@T{ +Flag +T}@T{ +- +T} +T{ +\f[V]postal\f[R] +T}@T{ +ZIP / Postal code +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]latitude\f[R] +T}@T{ +Latitude +T}@T{ +Number +T}@T{ +- (TODO: make degrees?) +T} +T{ +\f[V]longitude\f[R] +T}@T{ +Longitude +T}@T{ +Number +T}@T{ +- (TODO: make degrees?) +T} +T{ +\f[V]timezone\f[R] +T}@T{ +City +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]utc_offset\f[R] +T}@T{ +UTC offset (with daylight saving time) as +HHMM or -HHMM (HH is hours, +MM is minutes) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_calling_code\f[R] +T}@T{ +Country calling code (dial in code, comma separated) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]currency\f[R] +T}@T{ +Currency code (ISO 4217) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]currency_name\f[R] +T}@T{ +Currency name +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]languages\f[R] +T}@T{ +Languages spoken (comma separated 2 or 3 letter ISO 639 code with +optional hyphen separated country suffix) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_area\f[R] +T}@T{ +Area of the country (in sq km) +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]country_population\f[R] +T}@T{ +Population of the country +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]timezone\f[R] +T}@T{ +Time zone +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]org\f[R] +T}@T{ +Organization +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]asn\f[R] +T}@T{ +Autonomous system (AS) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]country_flag\f[R] +T}@T{ +Flag of the country +T}@T{ +Text (glyph) +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]external_ip\[dq] +format = \[dq] $ip $country_code \[dq] +\f[R] +.fi +.SS Notes +.PP +All the information comes from Check their +documentation here: +.PP +The IP is queried, 1) When i3status-rs starts, 2) When a signal is +received on D-Bus about a network configuration change, 3) Every 5 +minutes. +This periodic refresh exists to catch IP updates that don\[cq]t trigger +a notification, for example due to a IP refresh at the router. +.PP +Flags: They are not icons but unicode glyphs. +You will need a font that includes them. +Tested with: +.SS focused_window +.PP +Currently focused window +.PP +This block displays the title and/or the active marks (when used with +\f[V]sway\f[R]/\f[V]i3\f[R]) of the currently focused window. +Supported WMs are: \f[V]sway\f[R], \f[V]i3\f[R] and most wlroots-based +compositors. +See \f[V]driver\f[R] option for more info. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $title.str(max_w:21) |\[lq] +T} +T{ +\f[V]driver\f[R] +T}@T{ +Which driver to use. +Available values: \f[V]sway_ipc\f[R] - for \f[V]i3\f[R] and +\f[V]sway\f[R], \f[V]wlr_toplevel_management\f[R] - for Wayland +compositors that implement +wlr-foreign-toplevel-management-unstable-v1 (https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/blob/master/unstable/wlr-foreign-toplevel-management-unstable-v1.xml), +\f[V]auto\f[R] - try to automatically guess which driver to use. +T}@T{ +\f[V]\[dq]auto\[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(11.4n) lw(50.7n) lw(4.3n) lw(3.6n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]title\f[R] +T}@T{ +Window\[cq]s title (may be absent) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]marks\f[R] +T}@T{ +Window\[cq]s marks (present only with sway/i3) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]visible_marks\f[R] +T}@T{ +Window\[cq]s marks that do not start with \f[V]_\f[R] (present only with +sway/i3) +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]focused_window\[dq] +[block.format] +full = \[dq] $title.str(max_w:15) |\[dq] +short = \[dq] $title.str(max_w:10) |\[dq] +\f[R] +.fi +.PP +This example instead of hiding block when the window\[cq]s title is +empty displays \[lq]Missing\[rq] +.IP +.nf +\f[C] +[[block]] +block = \[dq]focused_window\[dq] +format = \[dq] $title.str(0,21) | Missing \[dq] + +## github +The number of GitHub notifications + +This block shows the unread notification count for a GitHub account. A GitHub [personal access token](https://github.com/settings/tokens/new) with the \[dq]notifications\[dq] scope is required, and must be passed using the \[ga]I3RS_GITHUB_TOKEN\[ga] environment variable or \[ga]token\[ga] configuration option. Optionally the colour of the block is determined by the highest notification in the following lists from highest to lowest: \[ga]critical\[ga],\[ga]warning\[ga],\[ga]info\[ga],\[ga]good\[ga] + +### Configuration + +Key | Values | Default +----|--------|-------- +\[ga]format\[ga] | A string to customise the output of this block. See below for available placeholders. | \[ga]\[dq] $icon $total.eng(w:1) \[dq]\[ga] +\[ga]interval\[ga] | Update interval in seconds | \[ga]30\[ga] +\[ga]token\[ga] | A GitHub personal access token with the \[dq]notifications\[dq] scope | \[ga]None\[ga] +\[ga]hide_if_total_is_zero\[ga] | Hide this block if the total count of notifications is zero | \[ga]false\[ga] +\[ga]critical\[ga] | List of notification types that change the block to the critical colour | \[ga]None\[ga] +\[ga]warning\[ga] | List of notification types that change the block to the warning colour | \[ga]None\[ga] +\[ga]info\[ga] | List of notification types that change the block to the info colour | \[ga]None\[ga] +\[ga]good\[ga] | List of notification types that change the block to the good colour | \[ga]None\[ga] + + +All the placeholders are numbers without a unit. + +Placeholder | Value +-------------------|------ +\[ga]icon\[ga] | A static icon +\[ga]total\[ga] | The total number of notifications +\[ga]assign\[ga] | You were assigned to the issue +\[ga]author\[ga] | You created the thread +\[ga]comment\[ga] | You commented on the thread +\[ga]ci_activity\[ga] | A GitHub Actions workflow run that you triggered was completed +\[ga]invitation\[ga] | You accepted an invitation to contribute to the repository +\[ga]manual\[ga] | You subscribed to the thread (via an issue or pull request) +\[ga]mention\[ga] | You were specifically \[at]mentioned in the content +\[ga]review_requested\[ga] | You, or a team you\[aq]re a member of, were requested to review a pull request +\[ga]security_alert\[ga] | GitHub discovered a security vulnerability in your repository +\[ga]state_change\[ga] | You changed the thread state (for example, closing an issue or merging a pull request) +\[ga]subscribed\[ga] | You\[aq]re watching the repository +\[ga]team_mention\[ga] | You were on a team that was mentioned + +### Examples + +\[ga]\[ga]\[ga]toml +[[block]] +block = \[dq]github\[dq] +format = \[dq] $icon $total.eng(w:1)|$mention.eng(w:1) \[dq] +interval = 60 +token = \[dq]...\[dq] +\f[R] +.fi +.IP +.nf +\f[C] +[[block]] +block = \[dq]github\[dq] +token = \[dq]...\[dq] +format = \[dq] $icon $total.eng(w:1) \[dq] +info = [\[dq]total\[dq]] +warning = [\[dq]mention\[dq],\[dq]review_requested\[dq]] +hide_if_total_is_zero = true +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]github\f[R] +.SS hueshift +.PP +Manage display temperature +.PP +This block displays the current color temperature in Kelvin. +When scrolling upon the block the color temperature is changed. +A left click on the block sets the color temperature to +\f[V]click_temp\f[R] that is by default to \f[V]6500K\f[R]. +A right click completely resets the color temperature to its default +value (\f[V]6500K\f[R]). +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $temperature \[dq]\f[R] +T} +T{ +\f[V]step\f[R] +T}@T{ +The step color temperature is in/decreased in Kelvin. +T}@T{ +\f[V]100\f[R] +T} +T{ +\f[V]hue_shifter\f[R] +T}@T{ +Program used to control screen color. +T}@T{ +Detect automatically +T} +T{ +\f[V]max_temp\f[R] +T}@T{ +Max color temperature in Kelvin. +T}@T{ +\f[V]10000\f[R] +T} +T{ +\f[V]min_temp\f[R] +T}@T{ +Min color temperature in Kelvin. +T}@T{ +\f[V]1000\f[R] +T} +T{ +\f[V]click_temp\f[R] +T}@T{ +Left click color temperature in Kelvin. +T}@T{ +\f[V]6500\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(20.5n) lw(28.0n) lw(7.5n) lw(14.0n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]temperature\f[R] +T}@T{ +Current temperature +T}@T{ +Number +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]set_click_temp\f[R] +T}@T{ +Left +T} +T{ +\f[V]reset\f[R] +T}@T{ +Right +T} +T{ +\f[V]temperature_up\f[R] +T}@T{ +Wheel Up +T} +T{ +\f[V]temperature_down\f[R] +T}@T{ +Wheel Down +T} +.TE +.SS Available Hue Shifters +.PP +.TS +tab(@); +l l. +T{ +Name +T}@T{ +Supports +T} +_ +T{ +\f[V]\[dq]redshift\[dq]\f[R] +T}@T{ +X11 +T} +T{ +\f[V]\[dq]sct\[dq]\f[R] +T}@T{ +X11 +T} +T{ +\f[V]\[dq]gammastep\[dq]\f[R] +T}@T{ +X11 and Wayland +T} +T{ +\f[V]\[dq]wl_gammarelay\[dq]\f[R] +T}@T{ +Wayland +T} +T{ +\f[V]\[dq]wl_gammarelay_rs\[dq]\f[R] +T}@T{ +Wayland +T} +T{ +\f[V]\[dq]wlsunset\[dq]\f[R] +T}@T{ +Wayland +T} +.TE +.PP +Note that at the moment, only +\f[V]wl_gammarelay\f[R] (https://github.com/jeremija/wl-gammarelay) and +\f[V]wl_gammarelay_rs\f[R] (https://github.com/MaxVerevkin/wl-gammarelay-rs) +subscribe to the events and update the bar when the temperature is +modified externally. +Also, these are the only drivers at the moment that work under Wayland +without flickering. +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]hueshift\[dq] +hue_shifter = \[dq]redshift\[dq] +step = 50 +click_temp = 3500 +\f[R] +.fi +.PP +A hard limit is set for the \f[V]max_temp\f[R] to \f[V]10000K\f[R] and +the same for the \f[V]min_temp\f[R] which is \f[V]1000K\f[R]. +The \f[V]step\f[R] has a hard limit as well, defined to \f[V]500K\f[R] +to avoid too brutal changes. +.SS kdeconnect +.PP +KDEConnect (https://community.kde.org/KDEConnect) indicator +.PP +Display info from the currently connected device in KDEConnect, updated +asynchronously. +.PP +Block colours are updated based on the battery level, unless all bat_* +thresholds are set to 0, in which case the block colours will depend on +the notification count instead. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]device_id\f[R] +T}@T{ +Device ID as per the output of \f[V]kdeconnect --list-devices\f[R]. +T}@T{ +Chooses the first found device, if any. +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $icon $name{ $bat_icon $bat_charge|}{ $notif_icon|} \[lq] +T} +T{ +\f[V]bat_info\f[R] +T}@T{ +Min battery level below which state is set to info. +T}@T{ +\f[V]60\f[R] +T} +T{ +\f[V]bat_good\f[R] +T}@T{ +Min battery level below which state is set to good. +T}@T{ +\f[V]60\f[R] +T} +T{ +\f[V]bat_warning\f[R] +T}@T{ +Min battery level below which state is set to warning. +T}@T{ +\f[V]30\f[R] +T} +T{ +\f[V]bat_critical\f[R] +T}@T{ +Min battery level below which state is set to critical. +T}@T{ +\f[V]15\f[R] +T} +T{ +\f[V]hide_disconnected\f[R] +T}@T{ +Whether to hide this block when disconnected +T}@T{ +\f[V]true\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(12.5n) lw(48.9n) lw(5.3n) lw(3.3n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on connection\[cq]s status +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]bat_icon\f[R] +T}@T{ +Battery level indicator (only when connected and if supported) +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]bat_charge\f[R] +T}@T{ +Battery charge level (only when connected and if supported) +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]network_icon\f[R] +T}@T{ +Cell Network indicator (only when connected and if supported) +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]network_type\f[R] +T}@T{ +Cell Network type (only when connected and if supported) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]network_strength\f[R] +T}@T{ +Cell Network level (only when connected and if supported) +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]notif_icon\f[R] +T}@T{ +Only when connected and there are notifications +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]notif_count\f[R] +T}@T{ +Number of notifications on your phone (only when connected and non-zero) +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]name\f[R] +T}@T{ +Name of your device as reported by KDEConnect (if available) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]connected\f[R] +T}@T{ +Present if your device is connected +T}@T{ +Flag +T}@T{ +- +T} +.TE +.SS Example +.PP +Do not show the name, do not set the \[lq]good\[rq] state. +.IP +.nf +\f[C] +[[block]] +block = \[dq]kdeconnect\[dq] +format = \[dq] $icon {$bat_icon $bat_charge |}{$notif_icon |}{$network_icon$network_strength $network_type |}\[dq] +bat_good = 101 +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]bat\f[R] (as a progression) +.IP \[bu] 2 +\f[V]bat_charging\f[R] (as a progression) +.IP \[bu] 2 +\f[V]net_cellular\f[R] (as a progression) +.IP \[bu] 2 +\f[V]notification\f[R] +.IP \[bu] 2 +\f[V]phone\f[R] +.IP \[bu] 2 +\f[V]phone_disconnected\f[R] +.SS keyboard_layout +.PP +Keyboard layout indicator +.PP +Four drivers are available: - \f[V]setxkbmap\f[R] which polls setxkbmap +to get the current layout - \f[V]localebus\f[R] which can read +asynchronous updates from the systemd \f[V]org.freedesktop.locale1\f[R] +D-Bus path - \f[V]kbddbus\f[R] which uses +kbdd (https://github.com/qnikst/kbdd) to monitor per-window layout +changes via DBus - \f[V]sway\f[R] which can read asynchronous updates +from the sway IPC +.PP +Which of these methods is appropriate will depend on your system setup. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]driver\f[R] +T}@T{ +One of \f[V]\[dq]setxkbmap\[dq]\f[R], \f[V]\[dq]localebus\[dq]\f[R], +\f[V]\[dq]kbddbus\[dq]\f[R] or \f[V]\[dq]sway\[dq]\f[R], depending on +your system. +T}@T{ +\f[V]\[dq]setxkbmap\[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +Only used by the \f[V]\[dq]setxkbmap\[dq]\f[R] driver. +T}@T{ +\f[V]60\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $layout \[dq]\f[R] +T} +T{ +\f[V]sway_kb_identifier\f[R] +T}@T{ +Identifier of the device you want to monitor, as found in the output of +\f[V]swaymsg -t get_inputs\f[R]. +T}@T{ +Defaults to first input found +T} +T{ +\f[V]mappings\f[R] +T}@T{ +Map \f[V]layout (variant)\f[R] to custom short name. +T}@T{ +\f[V]None\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l. +T{ +Key +T}@T{ +Value +T}@T{ +Type +T} +_ +T{ +\f[V]layout\f[R] +T}@T{ +Keyboard layout name +T}@T{ +String +T} +T{ +\f[V]variant\f[R] +T}@T{ +Keyboard variant name or \f[V]N/A\f[R] if not applicable +T}@T{ +String +T} +.TE +.SS Examples +.PP +Check \f[V]setxkbmap\f[R] every 15 seconds: +.IP +.nf +\f[C] +[[block]] +block = \[dq]keyboard_layout\[dq] +driver = \[dq]setxkbmap\[dq] +interval = 15 +\f[R] +.fi +.PP +Listen to D-Bus for changes: +.IP +.nf +\f[C] +[[block]] +block = \[dq]keyboard_layout\[dq] +driver = \[dq]localebus\[dq] +\f[R] +.fi +.PP +Listen to kbdd for changes, the text is in the following format: +\[lq]English (US)\[rq] - {$layout ($variant)} use block.mappings to +override with shorter names as shown below. +Also use format = \[rq] $layout ($variant) \[rq] to see the full text to +map, or you can use: dbus-monitor interface=ru.gentoo.kbdd to see the +exact variant spelling +.IP +.nf +\f[C] +[[block]] +block = \[dq]keyboard_layout\[dq] +driver = \[dq]kbddbus\[dq] +[block.mappings] +\[dq]English (US)\[dq] = \[dq]us\[dq] +\[dq]Bulgarian (new phonetic)\[dq] = \[dq]bg\[dq] +\f[R] +.fi +.PP +Listen to sway for changes: +.IP +.nf +\f[C] +[[block]] +block = \[dq]keyboard_layout\[dq] +driver = \[dq]sway\[dq] +sway_kb_identifier = \[dq]1133:49706:Gaming_Keyboard_G110\[dq] +\f[R] +.fi +.PP +Listen to sway for changes and override mappings: +.IP +.nf +\f[C] +[[block]] +block = \[dq]keyboard_layout\[dq] +driver = \[dq]sway\[dq] +format = \[dq] $layout \[dq] +[block.mappings] +\[dq]English (Workman)\[dq] = \[dq]EN\[dq] +\[dq]Russian (N/A)\[dq] = \[dq]RU\[dq] +\f[R] +.fi +.SS load +.PP +System load average +.SS Configuration +.PP +.TS +tab(@); +lw(7.3n) lw(57.5n) lw(5.3n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $1m.eng(w:4) \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]3\f[R] +T} +T{ +\f[V]info\f[R] +T}@T{ +Minimum load, where state is set to info +T}@T{ +\f[V]0.3\f[R] +T} +T{ +\f[V]warning\f[R] +T}@T{ +Minimum load, where state is set to warning +T}@T{ +\f[V]0.6\f[R] +T} +T{ +\f[V]critical\f[R] +T}@T{ +Minimum load, where state is set to critical +T}@T{ +\f[V]0.9\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]1m\f[R] +T}@T{ +1 minute load average +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]5m\f[R] +T}@T{ +5 minute load average +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]15m\f[R] +T}@T{ +15 minute load average +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]load\[dq] +format = \[dq] $icon 1min avg: $1m.eng(w:4) \[dq] +interval = 1 +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]cogs\f[R] +.SS maildir +.PP +Unread mail. +Only supports maildir format. +.PP +Note that you need to enable \f[V]maildir\f[R] feature to use this +block: +.IP +.nf +\f[C] +cargo build --release --features maildir +\f[R] +.fi +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $status \[dq]\f[R] +T} +T{ +\f[V]inboxes\f[R] +T}@T{ +List of maildir inboxes to look for mails in. +Supports path/glob expansions (e.g.\ \f[V]\[ti]\f[R] and \f[V]*\f[R]). +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]threshold_warning\f[R] +T}@T{ +Number of unread mails where state is set to warning. +T}@T{ +\f[V]1\f[R] +T} +T{ +\f[V]threshold_critical\f[R] +T}@T{ +Number of unread mails where state is set to critical. +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]display_type\f[R] +T}@T{ +Which part of the maildir to count: \f[V]\[dq]new\[dq]\f[R], +\f[V]\[dq]cur\[dq]\f[R], or \f[V]\[dq]all\[dq]\f[R]. +T}@T{ +\f[V]\[dq]new\[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]status\f[R] +T}@T{ +Number of emails +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Examples +.IP +.nf +\f[C] +[[block]] +block = \[dq]maildir\[dq] +interval = 60 +inboxes = [\[dq]\[ti]/mail/local\[dq], \[dq]\[ti]/maildir/account1/*\[dq]] +threshold_warning = 1 +threshold_critical = 10 +display_type = \[dq]new\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]mail\f[R] +.SS memory +.PP +Memory and swap usage +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block when in \[lq]Memory\[rq] +view. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $mem_avail.eng(prefix:M)/$mem_total.eng(prefix:M)($mem_total_used_percents.eng(w:2)) \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]warning_mem\f[R] +T}@T{ +Percentage of memory usage, where state is set to warning +T}@T{ +\f[V]80.0\f[R] +T} +T{ +\f[V]warning_swap\f[R] +T}@T{ +Percentage of swap usage, where state is set to warning +T}@T{ +\f[V]80.0\f[R] +T} +T{ +\f[V]critical_mem\f[R] +T}@T{ +Percentage of memory usage, where state is set to critical +T}@T{ +\f[V]95.0\f[R] +T} +T{ +\f[V]critical_swap\f[R] +T}@T{ +Percentage of swap usage, where state is set to critical +T}@T{ +\f[V]95.0\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(14.9n) lw(46.5n) lw(4.6n) lw(4.0n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Memory icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]icon_swap\f[R] +T}@T{ +Swap icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]mem_total\f[R] +T}@T{ +Total physical ram available +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]mem_free\f[R] +T}@T{ +Free memory not yet used by the kernel or userspace (in general you +should use mem_avail) +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]mem_free_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]mem_avail\f[R] +T}@T{ +Kernel estimate of usable free memory which includes cached memory and +buffers +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]mem_avail_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]mem_total_used\f[R] +T}@T{ +mem_total - mem_free +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]mem_total_used_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]mem_used\f[R] +T}@T{ +Memory used, excluding cached memory and buffers; same as htop\[cq]s +green bar +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]mem_used_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]buffers\f[R] +T}@T{ +Buffers, similar to htop\[cq]s blue bar +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]buffers_percent\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]cached\f[R] +T}@T{ +Cached memory (taking into account ZFS ARC cache), similar to htop\[cq]s +yellow bar +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]cached_percent\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]swap_total\f[R] +T}@T{ +Swap total +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]swap_free\f[R] +T}@T{ +Swap free +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]swap_free_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]swap_used\f[R] +T}@T{ +Swap used +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]swap_used_percents\f[R] +T}@T{ +as above but as a percentage of total memory +T}@T{ +Number +T}@T{ +Percents +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]memory\[dq] +format = \[dq] $icon $mem_used_percents.eng(w:1) \[dq] +format_alt = \[dq] $icon_swap $swap_free.eng(w:3,u:B,p:M)/$swap_total.eng(w:3,u:B,p:M)($swap_used_percents.eng(w:2)) \[dq] +interval = 30 +warning_mem = 70 +critical_mem = 90 +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]memory_mem\f[R] +.IP \[bu] 2 +\f[V]memory_swap\f[R] +.SS menu +.PP +A custom menu +.PP +This block allows you to quickly run a custom shell command. +Left-click on this block to activate it, then scroll through configured +items. +Left-click on the item to run it and optionally confirm your action by +left-clicking again. +Right-click any time to deactivate this block. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]text\f[R] +T}@T{ +Text that will be displayed when the block is inactive. +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]items\f[R] +T}@T{ +A list of \[lq]items\[rq]. +See examples below. +T}@T{ +\f[B]Required\f[R] +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]menu\[dq] +text = \[dq]\[rs]uf011\[dq] +[[block.items]] +display = \[dq] -> Sleep <-\[dq] +cmd = \[dq]systemctl suspend\[dq] +[[block.items]] +display = \[dq] -> Power Off <-\[dq] +cmd = \[dq]poweroff\[dq] +confirm_msg = \[dq]Are you sure you want to power off?\[dq] +[[block.items]] +display = \[dq] -> Reboot <-\[dq] +cmd = \[dq]reboot\[dq] +confirm_msg = \[dq]Are you sure you want to reboot?\[dq] +\f[R] +.fi +.SS music +.PP +The current song title and artist +.PP +Also provides buttons for play/pause, previous and next. +.PP +Supports all music players that implement the MediaPlayer2 +Interface (https://specifications.freedesktop.org/mpris-spec/latest/Player_Interface.html). +This includes: +.IP \[bu] 2 +Spotify +.IP \[bu] 2 +VLC +.IP \[bu] 2 +mpd (via mpDris2 (https://github.com/eonpatapon/mpDris2)) +.PP +and many others. +.PP +By default the block tracks all players available on the MPRIS bus. +Right clicking on the block will cycle it to the next player. +You can pin the widget to a given player via the \[lq]player\[rq] +setting. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $icon {$combo.str(max_w:25,rot_interval:0.5) $play |}\[lq] +T} +T{ +\f[V]player\f[R] +T}@T{ +Name(s) of the music player(s) MPRIS interface. +This can be either a music player name or an array of music player +names. +Run busctl \[en]user list | grep \[lq]org.mpris.MediaPlayer2.\[rq] | cut +-d\[cq] \[cq] -f1 and the name is the part after +\[lq]org.mpris.MediaPlayer2.\[rq]. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interface_name_exclude\f[R] +T}@T{ +A list of regex patterns for player MPRIS interface names to ignore. +T}@T{ +\f[V][\[dq]playerctld\[dq]]\f[R] +T} +T{ +\f[V]separator\f[R] +T}@T{ +String to insert between artist and title. +T}@T{ +\f[V]\[dq] - \[dq]\f[R] +T} +T{ +\f[V]seek_step_secs\f[R] +T}@T{ +Positive number of seconds to seek forward/backward when scrolling on +the bar. +Does not need to be an integer. +T}@T{ +\f[V]1\f[R] +T} +T{ +\f[V]volume_step\f[R] +T}@T{ +The percent volume level is increased/decreased for the selected audio +device when scrolling. +Capped automatically at 50. +T}@T{ +\f[V]5\f[R] +T} +.TE +.PP +Note: All placeholders except \f[V]icon\f[R] can be absent. +See the examples below to learn how to handle this. +.PP +.TS +tab(@); +lw(27.2n) lw(31.1n) lw(11.7n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T} +T{ +\f[V]artist\f[R] +T}@T{ +Current artist +T}@T{ +Text +T} +T{ +\f[V]title\f[R] +T}@T{ +Current title +T}@T{ +Text +T} +T{ +\f[V]url\f[R] +T}@T{ +Current song url +T}@T{ +Text +T} +T{ +\f[V]combo\f[R] +T}@T{ +Resolves to \[lq]\f[V]$artist[sep]$title\[dq]\f[R], +\f[V]\[dq]$artist\[dq]\f[R], \f[V]\[dq]$title\[dq]\f[R], or +\f[V]\[dq]$url\[dq]\f[R] depending on what information is available. +\f[V][sep]\f[R] is set by \f[V]separator\f[R] option. +T}@T{ +Text +T} +T{ +\f[V]player\f[R] +T}@T{ +Name of the current player (taken from the last part of its MPRIS bus +name) +T}@T{ +Text +T} +T{ +\f[V]avail\f[R] +T}@T{ +Total number of players available to switch between +T}@T{ +Number +T} +T{ +\f[V]cur\f[R] +T}@T{ +Total number of players available to switch between +T}@T{ +Number +T} +T{ +\f[V]play\f[R] +T}@T{ +Play/Pause button +T}@T{ +Clickable icon +T} +T{ +\f[V]next\f[R] +T}@T{ +Next button +T}@T{ +Clickable icon +T} +T{ +\f[V]prev\f[R] +T}@T{ +Previous button +T}@T{ +Clickable icon +T} +T{ +\f[V]volume_icon\f[R] +T}@T{ +Icon based on volume. +Missing if unsupported. +T}@T{ +Icon +T} +T{ +\f[V]volume\f[R] +T}@T{ +Current volume. +Missing if muted or unsupported. +T}@T{ +Number +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]play_pause\f[R] +T}@T{ +Left on \f[V]$play\f[R] +T} +T{ +\f[V]next\f[R] +T}@T{ +Left on \f[V]$next\f[R] +T} +T{ +\f[V]prev\f[R] +T}@T{ +Left on \f[V]$prev\f[R] +T} +T{ +\f[V]next_player\f[R] +T}@T{ +Right +T} +T{ +\f[V]seek_forward\f[R] +T}@T{ +Wheel Up +T} +T{ +\f[V]seek_backward\f[R] +T}@T{ +Wheel Down +T} +T{ +\f[V]volume_up\f[R] +T}@T{ +- +T} +T{ +\f[V]volume_down\f[R] +T}@T{ +- +T} +.TE +.SS Examples +.PP +Show the currently playing song on Spotify only, with play & next +buttons and limit the width to 20 characters: +.IP +.nf +\f[C] +[[block]] +block = \[dq]music\[dq] +format = \[dq] $icon {$combo.str(max_w:20) $play $next |}\[dq] +player = \[dq]spotify\[dq] +\f[R] +.fi +.PP +Same thing for any compatible player, takes the first active on the bus, +but ignores \[lq]mpd\[rq] or anything with \[lq]kdeconnect\[rq] in the +name: +.IP +.nf +\f[C] +[[block]] +block = \[dq]music\[dq] +format = \[dq] $icon {$combo.str(max_w:20) $play $next |}\[dq] +interface_name_exclude = [\[dq].*kdeconnect.*\[dq], \[dq]mpd\[dq]] +\f[R] +.fi +.PP +Same as above, but displays with rotating text +.IP +.nf +\f[C] +[[block]] +block = \[dq]music\[dq] +format = \[dq] $icon {$combo.str(max_w:20,rot_interval:0.5) $play $next |}\[dq] +interface_name_exclude = [\[dq].*kdeconnect.*\[dq], \[dq]mpd\[dq]] +\f[R] +.fi +.PP +Click anywhere to play/pause: +.IP +.nf +\f[C] +[[block]] +block = \[dq]music\[dq] +[[block.click]] +button = \[dq]left\[dq] +action = \[dq]play_pause\[dq] +\f[R] +.fi +.PP +Scroll to change the player volume, use the forward and back buttons to +seek: +.IP +.nf +\f[C] +[[block]] +block = \[dq]music\[dq] +format = \[dq] $icon $volume_icon $combo $play $next| \[dq] +seek_step_secs = 10 +[[block.click]] +button = \[dq]up\[dq] +action = \[dq]volume_up\[dq] +[[block.click]] +button = \[dq]down\[dq] +action = \[dq]volume_down\[dq] +[[block.click]] +button = \[dq]forward\[dq] +action = \[dq]seek_forward\[dq] +[[block.click]] +button = \[dq]back\[dq] +action = \[dq]seek_backward\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]music\f[R] +.IP \[bu] 2 +\f[V]music_next\f[R] +.IP \[bu] 2 +\f[V]music_play\f[R] +.IP \[bu] 2 +\f[V]music_prev\f[R] +.IP \[bu] 2 +\f[V]volume_muted\f[R] +.IP \[bu] 2 +\f[V]volume\f[R] (as a progression) +.SS net +.PP +Network information +.PP +This block uses \f[V]sysfs\f[R] and \f[V]netlink\f[R] and thus does not +require any external dependencies. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]device\f[R] +T}@T{ +Network interface to monitor (as specified in +\f[V]/sys/class/net/\f[R]). +Supports regex. +T}@T{ +If not set, device will be automatically selected every +\f[V]interval\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]2\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon \[ha]icon_net_down $speed_down.eng(prefix:K) \[ha]icon_net_up $speed_up.eng(prefix:K) \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]inactive_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the interface is inactive +T}@T{ +\f[V]\[dq] $icon Down \[dq]\f[R] +T} +T{ +\f[V]missing_format\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when the device is missing +T}@T{ +\f[V]\[dq] \[tmu] \[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.PP +.TS +tab(@); +lw(18.0n) lw(29.0n) lw(8.0n) lw(15.0n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on device\[cq]s type +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]speed_down\f[R] +T}@T{ +Download speed +T}@T{ +Number +T}@T{ +Bytes per second +T} +T{ +\f[V]speed_up\f[R] +T}@T{ +Upload speed +T}@T{ +Number +T}@T{ +Bytes per second +T} +T{ +\f[V]graph_down\f[R] +T}@T{ +Download speed graph +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]graph_up\f[R] +T}@T{ +Upload speed graph +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]device\f[R] +T}@T{ +The name of device +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]ssid\f[R] +T}@T{ +Netfork SSID (WiFi only) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]frequency\f[R] +T}@T{ +WiFi frequency +T}@T{ +Number +T}@T{ +Hz +T} +T{ +\f[V]signal_strength\f[R] +T}@T{ +WiFi signal +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]bitrate\f[R] +T}@T{ +WiFi connection bitrate +T}@T{ +Number +T}@T{ +Bits per second +T} +T{ +\f[V]ip\f[R] +T}@T{ +IPv4 address of the iface +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]ipv6\f[R] +T}@T{ +IPv6 address of the iface +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.PP +Display WiFi info if available +.IP +.nf +\f[C] +[[block]] +block = \[dq]net\[dq] +format = \[dq] $icon {$signal_strength $ssid $frequency|Wired connection} via $device \[dq] +\f[R] +.fi +.PP +Display exact device +.IP +.nf +\f[C] +[[block]] +block = \[dq]net\[dq] +device = \[dq]\[ha]wlo0$\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]net_loopback\f[R] +.IP \[bu] 2 +\f[V]net_vpn\f[R] +.IP \[bu] 2 +\f[V]net_wired\f[R] +.IP \[bu] 2 +\f[V]net_wireless\f[R] (as a progression) +.IP \[bu] 2 +\f[V]net_up\f[R] +.IP \[bu] 2 +\f[V]net_down\f[R] +.SS notify +.PP +Display and toggle the state of notifications daemon +.PP +Left-clicking on this block will enable/disable notifications. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]driver\f[R] +T}@T{ +Which notifications daemon is running. +Available drivers are: \f[V]\[dq]dunst\[dq]\f[R] and +\f[V]\[dq]swaync\[dq]\f[R] +T}@T{ +\f[V]\[dq]dunst\[dq]\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(29.7n) lw(31.1n) lw(5.7n) lw(3.5n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on notification\[cq]s state +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]notification_count\f[R][1] +T}@T{ +The number of notification (omitted if 0) +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]paused\f[R] +T}@T{ +Present only if notifications are disabled +T}@T{ +Flag +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_paused\f[R] +T}@T{ +Left +T} +T{ +\f[V]show\f[R] +T}@T{ +- +T} +.TE +.SS Examples +.PP +How to use \f[V]paused\f[R] flag +.IP +.nf +\f[C] +[[block]] +block = \[dq]notify\[dq] +format = \[dq] $icon {$paused{Off}|On} \[dq] +\f[R] +.fi +.PP +How to use \f[V]notification_count\f[R] +.IP +.nf +\f[C] +[[block]] +block = \[dq]notify\[dq] +format = \[dq] $icon {($notification_count.eng(w:1)) |}\[dq] +\f[R] +.fi +.PP +How to remap actions +.IP +.nf +\f[C] +[[block]] +block = \[dq]notify\[dq] +driver = \[dq]swaync\[dq] +[[block.click]] +button = \[dq]left\[dq] +action = \[dq]show\[dq] +[[block.click]] +button = \[dq]right\[dq] +action = \[dq]toggle_paused\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]bell\f[R] +.IP \[bu] 2 +\f[V]bell-slash\f[R] +.SS notmuch +.PP +Count of notmuch messages +.PP +This block queries a notmuch database and displays the count of +messages. +.PP +The simplest configuration will return the total count of messages in +the notmuch database stored at $HOME/.mail +.PP +Note that you need to enable \f[V]notmuch\f[R] feature to use this +block: +.IP +.nf +\f[C] +cargo build --release --features notmuch +\f[R] +.fi +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $count \[dq]\f[R] +T} +T{ +\f[V]maildir\f[R] +T}@T{ +Path to the directory containing the notmuch database. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]\[ti]/.mail\f[R] +T} +T{ +\f[V]query\f[R] +T}@T{ +Query to run on the database. +T}@T{ +\f[V]\[dq]\[dq]\f[R] +T} +T{ +\f[V]threshold_critical\f[R] +T}@T{ +Mail count that triggers \f[V]critical\f[R] state. +T}@T{ +\f[V]99999\f[R] +T} +T{ +\f[V]threshold_warning\f[R] +T}@T{ +Mail count that triggers \f[V]warning\f[R] state. +T}@T{ +\f[V]99999\f[R] +T} +T{ +\f[V]threshold_good\f[R] +T}@T{ +Mail count that triggers \f[V]good\f[R] state. +T}@T{ +\f[V]99999\f[R] +T} +T{ +\f[V]threshold_info\f[R] +T}@T{ +Mail count that triggers \f[V]info\f[R] state. +T}@T{ +\f[V]99999\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]10\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(12.2n) lw(44.6n) lw(8.1n) lw(5.1n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]count\f[R] +T}@T{ +Number of messages for the query +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]notmuch\[dq] +query = \[dq]tag:alert and not tag:trash\[dq] +threshold_warning = 1 +threshold_critical = 10 +[[block.click]] +button = \[dq]left\[dq] +update = true +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]mail\f[R] +.SS nvidia_gpu +.PP +Display the stats of your NVidia GPU +.PP +By default \f[V]show_temperature\f[R] shows the used memory. +Clicking the left mouse on the \[lq]temperature\[rq] part of the block +will alternate it between showing used or total available memory. +.PP +Clicking the left mouse button on the \[lq]fan speed\[rq] part of the +block will cause it to enter into a fan speed setting mode. +In this mode you can scroll the mouse wheel over the block to change the +fan speeds, and left click to exit the mode. +.PP +Requires \f[V]nvidia-smi\f[R] for displaying info and +\f[V]nvidia_settings\f[R] for setting fan speed. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]gpu_id\f[R] +T}@T{ +GPU id in system. +T}@T{ +\f[V]0\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $utilization $memory $temperature \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]1\f[R] +T} +T{ +\f[V]idle\f[R] +T}@T{ +Maximum temperature, below which state is set to idle +T}@T{ +\f[V]50\f[R] +T} +T{ +\f[V]good\f[R] +T}@T{ +Maximum temperature, below which state is set to good +T}@T{ +\f[V]70\f[R] +T} +T{ +\f[V]info\f[R] +T}@T{ +Maximum temperature, below which state is set to info +T}@T{ +\f[V]75\f[R] +T} +T{ +\f[V]warning\f[R] +T}@T{ +Maximum temperature, below which state is set to warning +T}@T{ +\f[V]80\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l. +T{ +Placeholder +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]name\f[R] +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]utilization\f[R] +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]memory\f[R] +T}@T{ +Number +T}@T{ +Bytes +T} +T{ +\f[V]temperature\f[R] +T}@T{ +Number +T}@T{ +Degrees +T} +T{ +\f[V]fan_speed\f[R] +T}@T{ +Number +T}@T{ +Percents +T} +T{ +\f[V]clocks\f[R] +T}@T{ +Number +T}@T{ +Hertz +T} +T{ +\f[V]power\f[R] +T}@T{ +Number +T}@T{ +Watts +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_mem_total\f[R] +T}@T{ +Left on \f[V]$memory\f[R] +T} +T{ +\f[V]toggle_fan_controlled\f[R] +T}@T{ +Left on \f[V]$fan_speed\f[R] +T} +T{ +\f[V]fan_speed_up\f[R] +T}@T{ +Wheel Up on \f[V]$fan_speed\f[R] +T} +T{ +\f[V]fan_speed_down\f[R] +T}@T{ +Wheel Down on \f[V]$fan_speed\f[R] +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]nvidia_gpu\[dq] +interval = 1 +format = \[dq] $icon GT 1030 $utilization $temperature $clocks \[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]gpu\f[R] +.SS TODO +.IP \[bu] 2 +Provide a \f[V]mappings\f[R] option similar to +\f[V]keyboard_layout\f[R]\[cq]s to map GPU names to labels? +.SS pacman +.PP +Pending updates available on pacman or an AUR helper. +.PP +Requires fakeroot to be installed (only required for pacman). +.PP +Tip: You can grab the list of available updates using +\f[V]fakeroot pacman -Qu --dbpath /tmp/checkup-db-i3statusrs/\f[R]. +If you have the \f[V]CHECKUPDATES_DB\f[R] env var set on your system +then substitute that dir instead. +.PP +Note: \f[V]pikaur\f[R] may hang the whole block if there is no internet +connectivity +reference (https://github.com/actionless/pikaur/issues/595). +In that case, try a different AUR helper. +.SS Pacman hook +.PP +Tip: On Arch Linux you can setup a \f[V]pacman\f[R] hook to signal +i3status-rs to update after packages have been upgraded, so you +won\[cq]t have stale info in your pacman block. +.PP +In the block configuration, set \f[V]signal = 1\f[R] (or other number if +\f[V]1\f[R] is being used by some other block): +.IP +.nf +\f[C] +[[block]] +block = \[dq]pacman\[dq] +signal = 1 +\f[R] +.fi +.PP +Create \f[V]/etc/pacman.d/hooks/i3status-rust.hook\f[R] with the below +contents: +.IP +.nf +\f[C] +[Trigger] +Operation = Upgrade +Type = Package +Target = * + +[Action] +When = PostTransaction +Exec = /usr/bin/pkill -SIGRTMIN+1 i3status-rs +\f[R] +.fi +.SS Configuration +.PP +.TS +tab(@); +lw(13.3n) lw(26.7n) lw(30.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +If setting \f[V]aur_command\f[R] then set interval appropriately as to +not exceed the AUR\[cq]s daily rate limit. +T}@T{ +\f[V]600\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $pacman.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_singular\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when exactly one update is available. +T}@T{ +\f[V]\[dq] $icon $pacman.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_up_to_date\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when no updates are available. +T}@T{ +\f[V]\[dq] $icon $pacman.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]warning_updates_regex\f[R] +T}@T{ +Display block as warning if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]critical_updates_regex\f[R] +T}@T{ +Display block as critical if updates matching regex are available. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]aur_command\f[R] +T}@T{ +AUR command to check available updates, which outputs in the same format +as pacman. +e.g.\ \f[V]yay -Qua\f[R] +T}@T{ +Required if \f[V]$both\f[R] or \f[V]$aur\f[R] are used +T} +.TE +.PP +.TS +tab(@); +lw(8.4n) lw(53.1n) lw(5.2n) lw(3.2n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]pacman\f[R] +T}@T{ +Number of updates available according to \f[V]pacman\f[R] +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]aur\f[R] +T}@T{ +Number of updates available according to \f[V]\f[R] +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]both\f[R] +T}@T{ +Cumulative number of updates available according to \f[V]pacman\f[R] and +\f[V]\f[R] +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Examples +.PP +pacman only config: +.IP +.nf +\f[C] +[[block]] +block = \[dq]pacman\[dq] +interval = 600 +format = \[dq] $icon $pacman updates available \[dq] +format_singular = \[dq] $icon $pacman update available \[dq] +format_up_to_date = \[dq] $icon system up to date \[dq] +critical_updates_regex = \[dq](linux|linux-lts|linux-zen)\[dq] +[[block.click]] +### pop-up a menu showing the available updates. Replace wofi with your favourite menu command. +button = \[dq]left\[dq] +cmd = \[dq]fakeroot pacman -Qu --dbpath /tmp/checkup-db-i3statusrs/ | wofi --show dmenu\[dq] +[[block.click]] +### Updates the block on right click +button = \[dq]right\[dq] +update = true +\f[R] +.fi +.PP +pacman only config using warnings with ZFS modules: +.IP +.nf +\f[C] +[[block]] +block = \[dq]pacman\[dq] +interval = 600 +format = \[dq] $icon $pacman updates available \[dq] +format_singular = \[dq] $icon $pacman update available \[dq] +format_up_to_date = \[dq] $icon system up to date \[dq] +### If a linux update is available, but no ZFS package, it won\[aq]t be possible to +### actually perform a system upgrade, so we show a warning. +warning_updates_regex = \[dq](linux|linux-lts|linux-zen)\[dq] +### If ZFS is available, we know that we can and should do an upgrade, so we show +### the status as critical. +critical_updates_regex = \[dq](zfs|zfs-lts)\[dq] +\f[R] +.fi +.PP +pacman and AUR helper config: +.IP +.nf +\f[C] +[[block]] +block = \[dq]pacman\[dq] +interval = 600 +error_interval = 300 +format = \[dq] $icon $pacman + $aur = $both updates available \[dq] +format_singular = \[dq] $icon $both update available \[dq] +format_up_to_date = \[dq] $icon system up to date \[dq] +critical_updates_regex = \[dq](linux|linux-lts|linux-zen)\[dq] +### aur_command should output available updates to stdout (ie behave as echo -ne \[dq]update\[rs]n\[dq]) +aur_command = \[dq]yay -Qua\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]update\f[R] +.SS pomodoro +.PP +A pomodoro timer (https://en.wikipedia.org/wiki/Pomodoro_Technique) +.SS Technique +.PP +There are six steps in the original technique: 1) Decide on the task to +be done. +2) Set the pomodoro timer (traditionally to 25 minutes). +3) Work on the task. +4) End work when the timer rings and put a checkmark on a piece of +paper. +5) If you have fewer than four checkmarks, take a short break (3\[en]5 +minutes) and then return to step 2. +6) After four pomodoros, take a longer break (15\[en]30 minutes), reset +your checkmark count to zero, then go to step 1. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +T}@T{ +\[rq] $icon{ $message|} \[lq] +T} +T{ +\f[V]message\f[R] +T}@T{ +Message when timer expires +T}@T{ +\f[V]\[dq]Pomodoro over! Take a break!\[dq]\f[R] +T} +T{ +\f[V]break_message\f[R] +T}@T{ +Message when break is over +T}@T{ +\f[V]\[dq]Break over! Time to work!\[dq]\f[R] +T} +T{ +\f[V]notify_cmd\f[R] +T}@T{ +A shell command to run as a notifier. +\f[V]{msg}\f[R] will be substituted with either \f[V]message\f[R] or +\f[V]break_message\f[R]. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]blocking_cmd\f[R] +T}@T{ +Is \f[V]notify_cmd\f[R] blocking? +If it is, then pomodoro block will wait until the command finishes +before proceeding. +Otherwise, you will have to click on the block in order to proceed. +T}@T{ +\f[V]false\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T} +T{ +\f[V]message\f[R] +T}@T{ +Current message +T}@T{ +Text +T} +.TE +.SS Example +.PP +Use \f[V]swaynag\f[R] as a notifier: +.IP +.nf +\f[C] +[[block]] +block = \[dq]pomodoro\[dq] +notify_cmd = \[dq]swaynag -m \[aq]{msg}\[aq]\[dq] +blocking_cmd = true +\f[R] +.fi +.PP +Use \f[V]notify-send\f[R] as a notifier: +.IP +.nf +\f[C] +[[block]] +block = \[dq]pomodoro\[dq] +notify_cmd = \[dq]notify-send \[aq]{msg}\[aq]\[dq] +blocking_cmd = false +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]pomodoro\f[R] +.IP \[bu] 2 +\f[V]pomodoro_started\f[R] +.IP \[bu] 2 +\f[V]pomodoro_stopped\f[R] +.IP \[bu] 2 +\f[V]pomodoro_paused\f[R] +.IP \[bu] 2 +\f[V]pomodoro_break\f[R] +.SS TODO +.IP \[bu] 2 +Use different icons. +.IP \[bu] 2 +Use format strings. +.SS rofication +.PP +The number of pending notifications in rofication-daemon +.PP +A different color is used if there are critical notifications. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Refresh rate in seconds. +T}@T{ +\f[V]1\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for placeholders. +T}@T{ +\f[V]\[dq] $icon $num.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]socket_path\f[R] +T}@T{ +Socket path for the rofication daemon. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]\[dq]/tmp/rofi_notification_daemon\[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]num\f[R] +T}@T{ +Number of pending notifications +T}@T{ +Number +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]rofication\[dq] +interval = 1 +socket_path = \[dq]/tmp/rofi_notification_daemon\[dq] +[[block.click]] +button = \[dq]left\[dq] +cmd = \[dq]rofication-gui\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]bell\f[R] +.SS service_status +.PP +Display the status of a service +.PP +Right now only \f[V]systemd\f[R] is supported. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]driver\f[R] +T}@T{ +Which init system is running the service. +Available drivers are: \f[V]\[dq]systemd\[dq]\f[R] +T}@T{ +\f[V]\[dq]systemd\[dq]\f[R] +T} +T{ +\f[V]service\f[R] +T}@T{ +The name of the service +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]active_format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $service active \[dq]\f[R] +T} +T{ +\f[V]inactive_format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $service inactive \[dq]\f[R] +T} +T{ +\f[V]active_state\f[R] +T}@T{ +A valid [\f[V]State\f[R]] +T}@T{ +[\f[V]State::Idle\f[R]] +T} +T{ +\f[V]inactive_state\f[R] +T}@T{ +A valid [\f[V]State\f[R]] +T}@T{ +[\f[V]State::Critical\f[R]] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]service\f[R] +T}@T{ +The name of the service +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.PP +Example using an icon: +.IP +.nf +\f[C] +[[block]] +block = \[dq]service_status\[dq] +service = \[dq]cups\[dq] +active_format = \[dq] \[ha]icon_tea \[dq] +inactive_format = \[dq] no \[ha]icon_tea \[dq] +\f[R] +.fi +.PP +Example overriding the default \f[V]inactive_state\f[R]: +.IP +.nf +\f[C] +[[block]] +block = \[dq]service_status\[dq] +service = \[dq]shadow\[dq] +active_format = \[dq]\[dq] +inactive_format = \[dq] Integrity of password and group files failed \[dq] +inactive_state = \[dq]Warning\[dq] +\f[R] +.fi +.SS sound +.PP +Volume level +.PP +This block displays the volume level (according to PulseAudio or ALSA). +Right click to toggle mute, scroll to adjust volume. +.PP +Requires a PulseAudio installation or \f[V]alsa-utils\f[R] for ALSA. +.PP +Note that if you are using PulseAudio commands (such as \f[V]pactl\f[R]) +to control your volume, you should select the +\f[V]\[dq]pulseaudio\[dq]\f[R] (or \f[V]\[dq]auto\[dq]\f[R]) driver to +see volume changes that exceed 100%. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]driver\f[R] +T}@T{ +\f[V]\[dq]auto\[dq]\f[R], \f[V]\[dq]pulseaudio\[dq]\f[R], +\f[V]\[dq]alsa\[dq]\f[R]. +T}@T{ +\f[V]\[dq]auto\[dq]\f[R] (Pulseaudio with ALSA fallback) +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +$icon {$volume.eng(w:2) |} +T} +T{ +\f[V]name\f[R] +T}@T{ +PulseAudio device name, or the ALSA control name as found in the output +of \f[V]amixer -D yourdevice scontrols\f[R]. +T}@T{ +PulseAudio: \f[V]\[at]DEFAULT_SINK\[at]\f[R] / ALSA: \f[V]Master\f[R] +T} +T{ +\f[V]device\f[R] +T}@T{ +ALSA device name, usually in the form \[lq]hw:X\[rq] or \[lq]hw:X,Y\[rq] +where \f[V]X\f[R] is the card number and \f[V]Y\f[R] is the device +number as found in the output of \f[V]aplay -l\f[R]. +T}@T{ +\f[V]default\f[R] +T} +T{ +\f[V]device_kind\f[R] +T}@T{ +PulseAudio device kind: \f[V]source\f[R] or \f[V]sink\f[R]. +T}@T{ +\f[V]\[dq]sink\[dq]\f[R] +T} +T{ +\f[V]natural_mapping\f[R] +T}@T{ +When using the ALSA driver, display the \[lq]mapped volume\[rq] as given +by \f[V]alsamixer\f[R]/\f[V]amixer -M\f[R], which represents the volume +level more naturally with respect for the human ear. +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]step_width\f[R] +T}@T{ +The percent volume level is increased/decreased for the selected audio +device when scrolling. +Capped automatically at 50. +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]max_vol\f[R] +T}@T{ +Max volume in percent that can be set via scrolling. +Note it can still be set above this value if changed by another +application. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]show_volume_when_muted\f[R] +T}@T{ +Show the volume even if it is currently muted. +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]headphones_indicator\f[R] +T}@T{ +Change icon when headphones are plugged in (pulseaudio only) +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]mappings\f[R] +T}@T{ +Map \f[V]output_name\f[R] to a custom name. +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]mappings_use_regex\f[R] +T}@T{ +Let \f[V]mappings\f[R] match using regex instead of string equality. +The replacement will be regex aware and can contain capture groups. +T}@T{ +\f[V]true\f[R] +T} +T{ +\f[V]active_port_mappings\f[R] +T}@T{ +Map \f[V]active_port\f[R] to a custom name. +The replacement will be regex aware and can contain capture groups. +T}@T{ +\f[V]None\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(18.6n) lw(31.0n) lw(7.1n) lw(13.3n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on volume +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]volume\f[R] +T}@T{ +Current volume. +Missing if muted. +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]output_name\f[R] +T}@T{ +PulseAudio or ALSA device name +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]output_description\f[R] +T}@T{ +PulseAudio device description, will fallback to \f[V]output_name\f[R] if +no description is available and will be overwritten by mappings +(mappings will still use \f[V]output_name\f[R]) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]active_port\f[R] +T}@T{ +Active port (same as information in Ports section of +\f[V]pactl list cards\f[R]). +Will be absent if not supported by \f[V]driver\f[R] or if mapped to +\f[V]\[dq]\[dq]\f[R] in \f[V]active_port_mappings\f[R]. +T}@T{ +Text +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_mute\f[R] +T}@T{ +Right +T} +T{ +\f[V]volume_up\f[R] +T}@T{ +Wheel Up +T} +T{ +\f[V]volume_down\f[R] +T}@T{ +Wheel Down +T} +.TE +.SS Examples +.PP +Change the default scrolling step width to 3 percent: +.IP +.nf +\f[C] +[[block]] +block = \[dq]sound\[dq] +step_width = 3 +\f[R] +.fi +.PP +Change the output name shown: +.IP +.nf +\f[C] +[[block]] +block = \[dq]sound\[dq] +format = \[dq] $icon $output_name{ $volume|} \[dq] +[block.mappings] +\[dq]alsa_output.usb-Harman_Multimedia_JBL_Pebbles_1.0.0-00.analog-stereo\[dq] = \[dq]Speakers\[dq] +\[dq]alsa_output.pci-0000_00_1b.0.analog-stereo\[dq] = \[dq]Headset\[dq] +\f[R] +.fi +.PP +Since the default value for the \f[V]device_kind\f[R] key is +\f[V]sink\f[R], to display \f[B]\f[BI]microphone\f[B]\f[R] block you +have to use the \f[V]source\f[R] value: +.IP +.nf +\f[C] +[[block]] +block = \[dq]sound\[dq] +driver = \[dq]pulseaudio\[dq] +device_kind = \[dq]source\[dq] +\f[R] +.fi +.PP +Display warning in block if microphone if using the wrong port: +.IP +.nf +\f[C] +[[block]] +block = \[dq]sound\[dq] +driver = \[dq]pulseaudio\[dq] +device_kind = \[dq]source\[dq] +format = \[dq] $icon { $volume|} {$active_port |}\[dq] +[block.active_port_mappings] +\[dq]analog-input-rear-mic\[dq] = \[dq]\[dq] # Mapping to an empty string makes \[ga]$active_port\[ga] absent +\[dq]analog-input-front-mic\[dq] = \[dq]ERR!\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]microphone_muted\f[R] (as a progression) +.IP \[bu] 2 +\f[V]microphone\f[R] (as a progression) +.IP \[bu] 2 +\f[V]volume_muted\f[R] (as a progression) +.IP \[bu] 2 +\f[V]volume\f[R] (as a progression) +.IP \[bu] 2 +\f[V]headphones\f[R] +.SS speedtest +.PP +Ping, download, and upload speeds +.PP +This block which requires +\f[V]speedtest-cli\f[R] (https://github.com/sivel/speedtest-cli). +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] \[ha]icon_ping $ping \[ha]icon_net_down $speed_down \[ha]icon_net_up $speed_up \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]1800\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]ping\f[R] +T}@T{ +Ping delay +T}@T{ +Number +T}@T{ +Seconds +T} +T{ +\f[V]speed_down\f[R] +T}@T{ +Download speed +T}@T{ +Number +T}@T{ +Bits per second +T} +T{ +\f[V]speed_up\f[R] +T}@T{ +Upload speed +T}@T{ +Number +T}@T{ +Bits per second +T} +.TE +.SS Example +.PP +Show only ping (with an icon) +.IP +.nf +\f[C] +[[block]] +block = \[dq]speedtest\[dq] +interval = 1800 +format = \[dq] \[ha]icon_ping $ping \[dq] +\f[R] +.fi +.PP +Hide ping and display speed in bytes per second each using 4 characters +(without icons) +.IP +.nf +\f[C] +[[block]] +block = \[dq]speedtest\[dq] +interval = 1800 +format = \[dq] $speed_down.eng(w:4,u:B) $speed_up(w:4,u:B) \[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]ping\f[R] +.IP \[bu] 2 +\f[V]net_down\f[R] +.IP \[bu] 2 +\f[V]net_up\f[R] +.SS taskwarrior +.PP +The number of tasks from the taskwarrior list +.PP +Clicking the right mouse button on the icon cycles the view of the block +through the user\[cq]s filters. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]600\f[R] (10min) +T} +T{ +\f[V]warning_threshold\f[R] +T}@T{ +The threshold of pending (or started) tasks when the block turns into a +warning state +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]critical_threshold\f[R] +T}@T{ +The threshold of pending (or started) tasks when the block turns into a +critical state +T}@T{ +\f[V]20\f[R] +T} +T{ +\f[V]filters\f[R] +T}@T{ +A list of tables with the keys \f[V]name\f[R] and \f[V]filter\f[R]. +\f[V]filter\f[R] specifies the criteria that must be met for a task to +be counted towards this filter. +T}@T{ +\f[V][{name = \[dq]pending\[dq], filter = \[dq]-COMPLETED -DELETED\[dq]}]\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_singular\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when exactly one task is pending. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]format_everything_done\f[R] +T}@T{ +Same as \f[V]format\f[R] but for when all tasks are completed. +T}@T{ +\f[V]\[dq] $icon $count.eng(w:1) \[dq]\f[R] +T} +T{ +\f[V]data_location\f[R] +T}@T{ +Directory in which taskwarrior stores its data files. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]\[dq]\[ti]/.task\[dq]\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(13.6n) lw(43.8n) lw(7.8n) lw(4.9n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]count\f[R] +T}@T{ +The number of tasks matching current filter +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]filter_name\f[R] +T}@T{ +The name of current filter +T}@T{ +Text +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]next_filter\f[R] +T}@T{ +Right +T} +.TE +.SS Example +.PP +In this example, block will be hidden if \f[V]count\f[R] is zero. +.IP +.nf +\f[C] +[[block]] +block = \[dq]taskwarrior\[dq] +interval = 60 +format = \[dq] $icon count.eng(w:1) tasks \[dq] +format_singular = \[dq] $icon 1 task \[dq] +format_everything_done = \[dq]\[dq] +warning_threshold = 10 +critical_threshold = 20 +[[block.filters]] +name = \[dq]today\[dq] +filter = \[dq]+PENDING +OVERDUE or +DUETODAY\[dq] +[[block.filters]] +name = \[dq]some-project\[dq] +filter = \[dq]project:some-project +PENDING\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]tasks\f[R] +.SS tea_timer +.PP +Timer +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\[rq] $icon {$minutes:$seconds |}\[lq] +T} +T{ +\f[V]increment\f[R] +T}@T{ +The numbers of seconds to add each time the block is clicked. +T}@T{ +30 +T} +T{ +\f[V]done_cmd\f[R] +T}@T{ +A command to run in \f[V]sh\f[R] when timer finishes. +T}@T{ +None +T} +.TE +.PP +.TS +tab(@); +lw(11.4n) lw(43.1n) lw(5.4n) lw(10.1n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]hours\f[R] +T}@T{ +The hours remaining on the timer +T}@T{ +Text +T}@T{ +h +T} +T{ +\f[V]minutes\f[R] +T}@T{ +The minutes remaining on the timer +T}@T{ +Text +T}@T{ +mn +T} +T{ +\f[V]seconds\f[R] +T}@T{ +The seconds remaining on the timer +T}@T{ +Text +T}@T{ +s +T} +.TE +.PP +\f[V]hours\f[R], \f[V]minutes\f[R], and \f[V]seconds\f[R] are unset when +the timer is inactive. +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]increment\f[R] +T}@T{ +Left / Wheel Up +T} +T{ +\f[V]decrement\f[R] +T}@T{ +Wheel Down +T} +T{ +\f[V]reset\f[R] +T}@T{ +Right +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]tea_timer\[dq] +format = \[dq] $icon {$minutes:$seconds |}\[dq] +done_cmd = \[dq]notify-send \[aq]Timer Finished\[aq]\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]tea\f[R] +.SS temperature +.PP +The system temperature +.PP +This block displays the system temperature, based on +\f[V]libsensors\f[R] library. +.PP +This block has two modes: \[lq]collapsed\[rq], which uses only color as +an indicator, and \[lq]expanded\[rq], which shows the content of a +\f[V]format\f[R] string. +The average, minimum, and maximum temperatures are computed using all +sensors displayed by \f[V]sensors\f[R], or optionally filtered by +\f[V]chip\f[R] and \f[V]inputs\f[R]. +.PP +Requires \f[V]libsensors\f[R] and appropriate kernel modules for your +hardware. +.PP +Run \f[V]sensors\f[R] command to list available chips and inputs. +.PP +Note that the colour of the block is always determined by the maximum +temperature across all sensors, not the average. +You may need to keep this in mind if you have a misbehaving sensor. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders +T}@T{ +\f[V]\[dq] $icon $average avg, $max max \[dq]\f[R] +T} +T{ +\f[V]format_alt\f[R] +T}@T{ +If set, block will switch between \f[V]format\f[R] and +\f[V]format_alt\f[R] on every click +T}@T{ +\f[V]None\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]scale\f[R] +T}@T{ +Either \f[V]\[dq]celsius\[dq]\f[R] or \f[V]\[dq]fahrenheit\[dq]\f[R] +T}@T{ +\f[V]\[dq]celsius\[dq]\f[R] +T} +T{ +\f[V]good\f[R] +T}@T{ +Maximum temperature to set state to good +T}@T{ +\f[V]20\f[R] \[de]C (\f[V]68\f[R] \[de]F) +T} +T{ +\f[V]idle\f[R] +T}@T{ +Maximum temperature to set state to idle +T}@T{ +\f[V]45\f[R] \[de]C (\f[V]113\f[R] \[de]F) +T} +T{ +\f[V]info\f[R] +T}@T{ +Maximum temperature to set state to info +T}@T{ +\f[V]60\f[R] \[de]C (\f[V]140\f[R] \[de]F) +T} +T{ +\f[V]warning\f[R] +T}@T{ +Maximum temperature to set state to warning. +Beyond this temperature, state is set to critical +T}@T{ +\f[V]80\f[R] \[de]C (\f[V]176\f[R] \[de]F) +T} +T{ +\f[V]chip\f[R] +T}@T{ +Narrows the results to a given chip name. +\f[V]*\f[R] may be used as a wildcard. +T}@T{ +None +T} +T{ +\f[V]inputs\f[R] +T}@T{ +Narrows the results to individual inputs reported by each chip. +T}@T{ +None +T} +.TE +.PP +.TS +tab(@); +lw(15.1n) lw(40.7n) lw(14.2n). +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_format\f[R] +T}@T{ +Toggles between \f[V]format\f[R] and \f[V]format_alt\f[R] +T}@T{ +Left +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]min\f[R] +T}@T{ +Minimum temperature among all inputs +T}@T{ +Number +T}@T{ +Degrees +T} +T{ +\f[V]average\f[R] +T}@T{ +Average temperature among all inputs +T}@T{ +Number +T}@T{ +Degrees +T} +T{ +\f[V]max\f[R] +T}@T{ +Maximum temperature among all inputs +T}@T{ +Number +T}@T{ +Degrees +T} +.TE +.PP +Note that when block is collapsed, no placeholders are provided. +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]temperature\[dq] +format = \[dq] $icon $max max \[dq] +format_alt = \[dq] $icon $min min, $max max, $average avg \[dq] +interval = 10 +chip = \[dq]*-isa-*\[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]thermometer\f[R] +.SS time +.PP +The current time. +.SS Configuration +.PP +.TS +tab(@); +lw(28.5n) lw(20.7n) lw(20.7n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +Format string. +See chrono +docs (https://docs.rs/chrono/0.3.0/chrono/format/strftime/index.html#specifiers) +for all options. +T}@T{ +\f[V]\[dq] $icon $timestamp.datetime() \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]timezone\f[R] +T}@T{ +A timezone specifier (e.g.\ \[lq]Europe/Lisbon\[rq]) +T}@T{ +Local timezone +T} +.TE +.PP +.TS +tab(@); +lw(13.2n) lw(42.6n) lw(9.5n) lw(4.7n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]timestamp\f[R] +T}@T{ +The current time +T}@T{ +Datetime +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]next_timezone\f[R] +T}@T{ +Left +T} +T{ +\f[V]prev_timezone\f[R] +T}@T{ +Right +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]time\[dq] +interval = 60 +[block.format] +full = \[dq] $icon $timestamp.datetime(f:\[aq]%a %Y-%m-%d %R %Z\[aq], l:fr_BE) \[dq] +short = \[dq] $icon $timestamp.datetime(f:%R) \[dq] +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]time\f[R] +.SS toggle +.PP +A Toggle block +.PP +You can add commands to be executed to disable the toggle +(\f[V]command_off\f[R]), and to enable it (\f[V]command_on\f[R]). +If these command exit with a non-zero status, the block will not be +toggled and the block state will be changed to give a visual warning of +the failure. +You also need to specify a command to determine the state of the toggle +(\f[V]command_state\f[R]). +When the command outputs nothing, the toggle is disabled, otherwise +enabled. +By specifying the interval property you can let the command_state be +executed continuously. +.PP +To run those commands, the shell form \f[V]$SHELL\f[R] environment +variable is used. +If such variable is not presented, \f[V]sh\f[R] is used. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders +T}@T{ +\f[V]\[dq] $icon \[dq]\f[R] +T} +T{ +\f[V]command_on\f[R] +T}@T{ +Shell command to enable the toggle +T}@T{ +Yes +T} +T{ +\f[V]command_off\f[R] +T}@T{ +Shell command to disable the toggle +T}@T{ +Yes +T} +T{ +\f[V]command_state\f[R] +T}@T{ +Shell command to determine the state. +Empty output => No, otherwise => Yes. +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]icon_on\f[R] +T}@T{ +Icon override for the toggle button while on +T}@T{ +\f[V]\[dq]toggle_on\[dq]\f[R] +T} +T{ +\f[V]icon_off\f[R] +T}@T{ +Icon override for the toggle button while off +T}@T{ +\f[V]\[dq]toggle_off\[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +If not set, \f[V]command_state\f[R] will run only on click. +T}@T{ +None +T} +.TE +.PP +.TS +tab(@); +lw(13.6n) lw(43.8n) lw(7.8n) lw(4.9n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon based on toggle\[cq]s state +T}@T{ +Icon +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle\f[R] +T}@T{ +Left +T} +.TE +.SS Examples +.PP +This is what can be used to toggle an external monitor configuration: +.IP +.nf +\f[C] +[[block]] +block = \[dq]toggle\[dq] +format = \[dq] $icon 4k \[dq] +command_state = \[dq]xrandr | grep \[aq]DP1 connected 38\[aq] | grep -v eDP1\[dq] +command_on = \[dq]\[ti]/.screenlayout/4kmon_default.sh\[dq] +command_off = \[dq]\[ti]/.screenlayout/builtin.sh\[dq] +interval = 5 +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]toggle_off\f[R] +.IP \[bu] 2 +\f[V]toggle_on\f[R] +.SS uptime +.PP +System\[cq]s uptime +.PP +This block displays system uptime in terms of two biggest units, so +minutes and seconds, or hours and minutes or days and hours or weeks and +days. +.SS Configuration +.PP +.TS +tab(@); +lw(16.4n) lw(41.7n) lw(11.9n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders +T}@T{ +\f[V]\[dq] $icon $text \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds +T}@T{ +\f[V]60\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]text\f[R] +T}@T{ +Current uptime +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]uptime\[dq] +interval = 3600 # update every hour +\f[R] +.fi +.SS Used Icons +.IP \[bu] 2 +\f[V]uptime\f[R] +.SS TODO: +.IP \[bu] 2 +Add \f[V]time\f[R] or \f[V]dur\f[R] formatter to +\f[V]src/formatting/formatter.rs\f[R] +.SS vpn +.PP +Shows the current connection status for VPN networks +.PP +This widget toggles the connection on left click. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]driver\f[R] +T}@T{ +Which vpn should be used . +Available drivers are: \f[V]\[dq]nordvpn\[dq]\f[R] and +\f[V]\[dq]mullvad\[dq]\f[R] +T}@T{ +\f[V]\[dq]nordvpn\[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]10\f[R] +T} +T{ +\f[V]format_connected\f[R] +T}@T{ +A string to customise the output in case the network is connected. +See below for available placeholders. +T}@T{ +\f[V]\[dq] VPN: $icon \[dq]\f[R] +T} +T{ +\f[V]format_disconnected\f[R] +T}@T{ +A string to customise the output in case the network is disconnected. +See below for available placeholders. +T}@T{ +\f[V]\[dq] VPN: $icon \[dq]\f[R] +T} +T{ +\f[V]state_connected\f[R] +T}@T{ +The widgets state if the vpn network is connected. +T}@T{ +\f[V]info\f[R] +T} +T{ +\f[V]state_disconnected\f[R] +T}@T{ +The widgets state if the vpn network is disconnected +T}@T{ +\f[V]idle\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(9.9n) lw(48.6n) lw(6.6n) lw(4.9n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]country\f[R] +T}@T{ +Country currently connected to +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]flag\f[R] +T}@T{ +Country specific flag (depends on a font supporting them) +T}@T{ +Text +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l l. +T{ +Action +T}@T{ +Default button +T}@T{ +Description +T} +_ +T{ +\f[V]toggle\f[R] +T}@T{ +Left +T}@T{ +toggles the vpn network connection +T} +.TE +.SS Drivers +.SS nordvpn +.PP +Behind the scenes the nordvpn driver uses the \f[V]nordvpn\f[R] command +line binary. +In order for this to work properly the binary should be executable +without root privileges. +.SS Mullvad +.PP +Behind the scenes the mullvad driver uses the \f[V]mullvad\f[R] command +line binary. +In order for this to work properly the binary should be executable and +mullvad daemon should be running. +.SS Example +.PP +Shows the current vpn network state: +.IP +.nf +\f[C] +[[block]] +block = \[dq]vpn\[dq] +driver = \[dq]nordvpn\[dq] +interval = 10 +format_connected = \[dq]VPN: $icon \[dq] +format_disconnected = \[dq]VPN: $icon \[dq] +state_connected = \[dq]good\[dq] +state_disconnected = \[dq]warning\[dq] +\f[R] +.fi +.PP +Possible values for \f[V]state_connected\f[R] and +\f[V]state_disconnected\f[R]: +.IP +.nf +\f[C] +warning +critical +good +info +idle +\f[R] +.fi +.SS Icons Used +.IP \[bu] 2 +\f[V]net_vpn\f[R] +.IP \[bu] 2 +\f[V]net_wired\f[R] +.IP \[bu] 2 +\f[V]net_down\f[R] +.IP \[bu] 2 +country code flags (if supported by font) +.PP +Flags: They are not icons but unicode glyphs. +You will need a font that includes them. +Tested with: +.SS watson +.PP +Watson statistics +.PP +Watson (http://tailordev.github.io/Watson/) is a simple CLI time +tracking application. +This block will show the name of your current active project, tags and +optionally recorded time. +Clicking the widget will toggle the \f[V]show_time\f[R] variable +dynamically. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders +T}@T{ +\f[V]\[dq] $text |\[dq]\f[R] +T} +T{ +\f[V]show_time\f[R] +T}@T{ +Whether to show recorded time. +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]state_path\f[R] +T}@T{ +Path to the Watson state file. +Supports path expansions e.g.\ \f[V]\[ti]\f[R]. +T}@T{ +\f[V]$XDG_CONFIG_HOME/watson/state\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +T}@T{ +\f[V]60\f[R] +T} +.TE +.PP +.TS +tab(@); +l l l l. +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]text\f[R] +T}@T{ +Current activity +T}@T{ +Text +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l l. +T{ +Action +T}@T{ +Description +T}@T{ +Default button +T} +_ +T{ +\f[V]toggle_show_time\f[R] +T}@T{ +Toggle the value of \f[V]show_time\f[R] +T}@T{ +Left +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]watson\[dq] +show_time = true +state_path = \[dq]\[ti]/.config/watson/state\[dq] +\f[R] +.fi +.SS TODO +.IP \[bu] 2 +Extend functionality: start / stop watson using this block +.SS weather +.PP +Current weather +.PP +This block displays local weather and temperature information. +In order to use this block, you will need access to a supported weather +API service. +At the time of writing, OpenWeatherMap and met.no are supported. +.PP +Configuring this block requires configuring a weather service, which may +require API keys and other parameters. +.PP +If using the \f[V]autolocate\f[R] feature, set the autolocate update +interval such that you do not exceed ipapi.co\[cq]s free daily limit of +1000 hits. +Or use \f[V]autolocate_interval = \[dq]once\[dq]\f[R] to only run on +initialization. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]service\f[R] +T}@T{ +The configuration of a weather service (see below). +T}@T{ +\f[B]Required\f[R] +T} +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +Text may need to be escaped, refer to Escaping Text. +T}@T{ +\f[V]\[dq] $icon $weather $temp \[dq]\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval, in seconds. +T}@T{ +\f[V]600\f[R] +T} +T{ +\f[V]autolocate\f[R] +T}@T{ +Gets your location using the ipapi.co IP location service (no API key +required). +If the API call fails then the block will fallback to \f[V]city_id\f[R] +or \f[V]place\f[R]. +T}@T{ +\f[V]false\f[R] +T} +T{ +\f[V]autolocate_interval\f[R] +T}@T{ +Update interval for \f[V]autolocate\f[R] in seconds or \[lq]once\[rq] +T}@T{ +\f[V]interval\f[R] +T} +.TE +.SS OpenWeatherMap Options +.PP +To use the service you will need a (free) API key. +.PP +.TS +tab(@); +lw(9.3n) lw(18.7n) lw(23.3n) lw(18.7n). +T{ +Key +T}@T{ +Values +T}@T{ +Required +T}@T{ +Default +T} +_ +T{ +\f[V]name\f[R] +T}@T{ +\f[V]openweathermap\f[R]. +T}@T{ +Yes +T}@T{ +None +T} +T{ +\f[V]api_key\f[R] +T}@T{ +Your OpenWeatherMap API key. +T}@T{ +Yes +T}@T{ +None +T} +T{ +\f[V]city_id\f[R] +T}@T{ +OpenWeatherMap\[cq]s ID for the city. +T}@T{ +Yes* +T}@T{ +None +T} +T{ +\f[V]place\f[R] +T}@T{ +OpenWeatherMap `By city name' search query. +See here (https://openweathermap.org/current) +T}@T{ +Yes* +T}@T{ +None +T} +T{ +\f[V]coordinates\f[R] +T}@T{ +GPS latitude longitude coordinates as a tuple, example: +\f[V][\[dq]39.2362\[dq],\[dq]9.3317\[dq]]\f[R] +T}@T{ +Yes* +T}@T{ +None +T} +T{ +\f[V]units\f[R] +T}@T{ +Either \f[V]\[dq]metric\[dq]\f[R] or \f[V]\[dq]imperial\[dq]\f[R]. +T}@T{ +No +T}@T{ +\f[V]\[dq]metric\[dq]\f[R] +T} +T{ +\f[V]lang\f[R] +T}@T{ +Language code. +See here (https://openweathermap.org/current#multi). +Currently only affects \f[V]weather_verbose\f[R] key. +T}@T{ +No +T}@T{ +\f[V]\[dq]en\[dq]\f[R] +T} +.TE +.PP +One of \f[V]city_id\f[R], \f[V]place\f[R] or \f[V]coordinates\f[R] is +required. +If more than one are supplied, \f[V]city_id\f[R] takes precedence over +\f[V]place\f[R] which takes place over \f[V]coordinates\f[R]. +.PP +The options \f[V]api_key\f[R], \f[V]city_id\f[R], \f[V]place\f[R] can be +omitted from configuration, in which case they must be provided in the +environment variables \f[V]OPENWEATHERMAP_API_KEY\f[R], +\f[V]OPENWEATHERMAP_CITY_ID\f[R], \f[V]OPENWEATHERMAP_PLACE\f[R]. +.SS met.no Options +.PP +.TS +tab(@); +lw(9.3n) lw(18.7n) lw(23.3n) lw(18.7n). +T{ +Key +T}@T{ +Values +T}@T{ +Required +T}@T{ +Default +T} +_ +T{ +\f[V]name\f[R] +T}@T{ +\f[V]metno\f[R]. +T}@T{ +Yes +T}@T{ +None +T} +T{ +\f[V]coordinates\f[R] +T}@T{ +GPS latitude longitude coordinates as a tuple, example: +\f[V][\[dq]39.2362\[dq],\[dq]9.3317\[dq]]\f[R] +T}@T{ +Required if \f[V]autolocate = false\f[R] +T}@T{ +None +T} +T{ +\f[V]lang\f[R] +T}@T{ +Language code: \f[V]en\f[R], \f[V]nn\f[R] or \f[V]nb\f[R] +T}@T{ +No +T}@T{ +\f[V]en\f[R] +T} +T{ +\f[V]altitude\f[R] +T}@T{ +Meters above sea level of the ground +T}@T{ +No +T}@T{ +Approximated by server +T} +.TE +.PP +Met.no does not support location name. +.SS Available Format Keys +.PP +.TS +tab(@); +lw(12.7n) lw(48.1n) lw(5.7n) lw(3.5n). +T{ +Key +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +Icon representing the weather +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]location\f[R] +T}@T{ +Location name (exact format depends on the service) +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]temp\f[R] +T}@T{ +Temperature +T}@T{ +Number +T}@T{ +degrees +T} +T{ +\f[V]apparent\f[R] +T}@T{ +Australian Apparent Temperature +T}@T{ +Number +T}@T{ +degrees +T} +T{ +\f[V]humidity\f[R] +T}@T{ +Humidity +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]weather\f[R] +T}@T{ +Textual brief description of the weather, e.g.\ \[lq]Raining\[rq] +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]weather_verbose\f[R] +T}@T{ +Textual verbose description of the weather, e.g.\ \[lq]overcast +clouds\[rq] +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]wind\f[R] +T}@T{ +Wind speed +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]wind_kmh\f[R] +T}@T{ +Wind speed. +The wind speed in km/h +T}@T{ +Number +T}@T{ +- +T} +T{ +\f[V]direction\f[R] +T}@T{ +Wind direction, e.g.\ \[lq]NE\[rq] +T}@T{ +Text +T}@T{ +- +T} +.TE +.SS Example +.PP +Show detailed weather in San Francisco through the OpenWeatherMap +service: +.IP +.nf +\f[C] +[[block]] +block = \[dq]weather\[dq] +format = \[dq] $icon $weather ($location) $temp, $wind m/s $direction \[dq] +[block.service] +name = \[dq]openweathermap\[dq] +api_key = \[dq]XXX\[dq] +city_id = \[dq]5398563\[dq] +units = \[dq]metric\[dq] +\f[R] +.fi +.SS Used Icons +.IP \[bu] 2 +\f[V]weather_sun\f[R] (when weather is reported as \[lq]Clear\[rq]) +.IP \[bu] 2 +\f[V]weather_rain\f[R] (when weather is reported as \[lq]Rain\[rq] or +\[lq]Drizzle\[rq]) +.IP \[bu] 2 +\f[V]weather_clouds\f[R] (when weather is reported as \[lq]Clouds\[rq], +\[lq]Fog\[rq] or \[lq]Mist\[rq]) +.IP \[bu] 2 +\f[V]weather_thunder\f[R] (when weather is reported as +\[lq]Thunderstorm\[rq]) +.IP \[bu] 2 +\f[V]weather_snow\f[R] (when weather is reported as \[lq]Snow\[rq]) +.IP \[bu] 2 +\f[V]weather_default\f[R] (in all other cases) +.SS xrandr +.PP +X11 screen information +.PP +X11 screen information (name, brightness, resolution). +With a click you can toggle through your active screens and with wheel +up and down you can adjust the selected screens brightness. +Regarding brightness control, xrandr changes the brightness of the +display using gamma rather than changing the brightness in hardware, so +if that is not desirable then consider using the \f[V]backlight\f[R] +block instead. +.PP +NOTE: Some users report issues +(e.g.\ here (https://github.com/greshake/i3status-rust/issues/274) and +here (https://github.com/greshake/i3status-rust/issues/668) when using +this block. +The cause is currently unknown, however setting a higher update interval +may help. +.SS Configuration +.PP +.TS +tab(@); +lw(14.0n) lw(28.0n) lw(28.0n). +T{ +Key +T}@T{ +Values +T}@T{ +Default +T} +_ +T{ +\f[V]format\f[R] +T}@T{ +A string to customise the output of this block. +See below for available placeholders. +T}@T{ +\f[V]\[dq] $icon $display $brightness_icon $brightness \[dq]\f[R] +T} +T{ +\f[V]step_width\f[R] +T}@T{ +The steps brightness is in/decreased for the selected screen (When +greater than 50 it gets limited to 50). +T}@T{ +\f[V]5\f[R] +T} +T{ +\f[V]interval\f[R] +T}@T{ +Update interval in seconds. +T}@T{ +\f[V]5\f[R] +T} +.TE +.PP +.TS +tab(@); +lw(17.7n) lw(29.6n) lw(7.9n) lw(14.8n). +T{ +Placeholder +T}@T{ +Value +T}@T{ +Type +T}@T{ +Unit +T} +_ +T{ +\f[V]icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]display\f[R] +T}@T{ +The name of a monitor +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]brightness\f[R] +T}@T{ +The brightness of a monitor +T}@T{ +Number +T}@T{ +% +T} +T{ +\f[V]brightness_icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +T{ +\f[V]resolution\f[R] +T}@T{ +The resolution of a monitor +T}@T{ +Text +T}@T{ +- +T} +T{ +\f[V]res_icon\f[R] +T}@T{ +A static icon +T}@T{ +Icon +T}@T{ +- +T} +.TE +.PP +.TS +tab(@); +l l. +T{ +Action +T}@T{ +Default button +T} +_ +T{ +\f[V]cycle_outputs\f[R] +T}@T{ +Left +T} +T{ +\f[V]brightness_up\f[R] +T}@T{ +Wheel Up +T} +T{ +\f[V]brightness_down\f[R] +T}@T{ +Wheel Down +T} +.TE +.SS Example +.IP +.nf +\f[C] +[[block]] +block = \[dq]xrandr\[dq] +format = \[dq] $icon $brightness $resolution \[dq] +\f[R] +.fi +.SS Used Icons +.IP \[bu] 2 +\f[V]xrandr\f[R] +.IP \[bu] 2 +\f[V]backlight\f[R] +.IP \[bu] 2 +\f[V]resolution\f[R] +.SH NOTES +.SS [1] +.PP +when using \f[V]notification_count\f[R] with the \f[V]dunst\f[R] driver +use dunst > 1.9.0 +.SH THEMES +.SS Choosing your theme and icon set +.PP +To use a theme or icon set other than the default, add them to your +configuration file like so: +.IP +.nf +\f[C] +[theme] +theme = \[dq]solarized-dark\[dq] +[icons] +icons = \[dq]awesome6\[dq] +\f[R] +.fi +.PP +Both the theme and icon set can be loaded from a separate file. +.IP +.nf +\f[C] +[theme] +theme = \[dq]\[dq] +[icons] +icons = \[dq]\[dq] +\f[R] +.fi +.PP +where \f[V]\f[R] can be either a filename or a full path and will +be checked in this order: +.IP "1." 3 +If full absolute path given, then use it as is: +\f[V]/home/foo/custom_theme.toml\f[R] +.IP "2." 3 +If filename given, e.g.\ \[lq]custom_theme.toml\[rq], then first check +\f[V]$XDG_CONFIG_HOME/i3status-rust/themes\f[R] +.IP "3." 3 +Then look for it in \f[V]$XDG_DATA_HOME/i3status-rust/themes\f[R] +.IP "4." 3 +Otherwise look for it in \f[V]/usr/share/i3status-rust/themes\f[R] +.PP +Notes: - In case with icon sets, the file should be in the +\f[V]icons\f[R] subdirectory instead of \f[V]themes\f[R]. +- You can omit the \f[V].toml\f[R] extension while specifying +\f[V]file\f[R] parameters. +- All the predefined themes are provided as files, so you use them as +examples of how to write your own themes/icon sets. +.SS Available themes +.PP +Note: screenshots were generated using this +config (https://github.com/greshake/i3status-rust/blob/master/gen-screenshots/screenshot_config.toml) +with this swaybar +config (https://github.com/greshake/i3status-rust/blob/master/gen-screenshots/swayconfig_i3rs). +.IP \[bu] 2 +\f[V]plain\f[R] (default) +[IMAGE: plain (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/plain.png)] +.IP \[bu] 2 +\f[V]solarized-dark\f[R] +[IMAGE: solarized-dark (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/solarized-dark.png)] +.IP \[bu] 2 +\f[V]solarized-light\f[R] +[IMAGE: solarized-light (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/solarized-light.png)] +.IP \[bu] 2 +\f[V]slick\f[R] +[IMAGE: slick (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/slick.png)] +.IP \[bu] 2 +\f[V]modern\f[R] +[IMAGE: modern (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/modern.png)] +.IP \[bu] 2 +\f[V]bad-wolf\f[R] +[IMAGE: bad-wolf (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/bad-wolf.png)] +.IP \[bu] 2 +\f[V]gruvbox-light\f[R] +[IMAGE: gruvbox-light (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/gruvbox-light.png)] +.IP \[bu] 2 +\f[V]gruvbox-dark\f[R] +[IMAGE: gruvbox-dark (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/gruvbox-dark.png)] +.IP \[bu] 2 +\f[V]space-villain\f[R] +[IMAGE: space-villain (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/space-villain.png)] +.IP \[bu] 2 +\f[V]native\f[R] (like plain with no background and native separators) +[IMAGE: native (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/native.png)] +.IP \[bu] 2 +\f[V]semi-native\f[R] (like native but with background) +[IMAGE: semi-native (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/semi-native.png)] +.IP \[bu] 2 +\f[V]nord-dark\f[R] (polar night) +[IMAGE: nord-dark (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/nord-dark.png)] +.IP \[bu] 2 +\f[V]dracula\f[R] +[IMAGE: dracula (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/dracula.png)] +.IP \[bu] 2 +\f[V]srcery\f[R] +[IMAGE: srcery (https://raw.githubusercontent.com/greshake/i3status-rust/master/img/themes/srcery.png)] +.SS Available icon sets +.IP \[bu] 2 +\f[V]none\f[R] (default. +Uses text labels instead of icons) +.IP \[bu] 2 +\f[V]awesome4\f[R] (Font Awesome 4.x) +.IP \[bu] 2 +\f[V]awesome5\f[R] (Font Awesome 5.x) +.IP \[bu] 2 +\f[V]awesome6\f[R] (Font Awesome 6.x) +.IP \[bu] 2 +\f[V]material\f[R] +.IP \[bu] 2 +\f[V]material-nf\f[R] (Any font from Nerd Fonts collection) +.PP +\f[B]Note\f[R]: In order to use the material icon set, you need a +patched material icons font which can be found +here (https://gist.github.com/draoncc/3c20d8d4262892ccd2e227eefeafa8ef/raw/3e6e12c213fba1ec28aaa26430c3606874754c30/MaterialIcons-Regular-for-inline.ttf). +Make sure to pass it in your i3 configuration bar block. +.SS Overriding themes and icon sets +.PP +Create a block in the configuration called \f[V]theme\f[R] or +\f[V]icons\f[R] like so: +.IP +.nf +\f[C] +[theme] +theme = \[dq]solarized-dark\[dq] +[theme.overrides] +# Example: redefine \[ga]idle\[ga] colors +idle_bg = \[dq]#123456\[dq] +idle_fg = \[dq]#abcdef\[dq] +# Example: swap \[ga]good\[ga] and \[ga]warning\[ga] colors +good_fg = { link = \[dq]warning_fg\[dq] } +good_bg = { link = \[dq]warning_bg\[dq] } +warning_fg = { link = \[dq]good_fg\[dq] } +warning_bg = { link = \[dq]good_bg\[dq] } + +[icons] +icons = \[dq]awesome6\[dq] +[icons.overrides] +bat = \[dq] | | \[dq] +bat_full = \[dq] |X| \[dq] +bat_charging = \[dq] |\[ha]| \[dq] +bat_discharging = \[dq] |v| \[dq] +\f[R] +.fi +.PP +Besides global overrides you may also use per-block overrides using the +\f[V]theme_overrides\f[R], \f[V]icons_overrides\f[R] and +\f[V]icons_format\f[R] options available for all blocks. +For example: +.IP +.nf +\f[C] +[[block]] +block = \[dq]cpu\[dq] +icons_format = \[dq]{icon}\[dq] +[block.theme_overrides] +idle_bg = \[dq]#123456\[dq] +idle_fg = \[dq]#abcdef\[dq] +[block.icons_overrides] +cpu_boost_on = \[dq]ON\[dq] +cpu_boost_off = \[dq]OFF\[dq] +\f[R] +.fi +.SS Available theme overrides +.PP +All \f[V]bg\f[R] and \f[V]fg\f[R] overrides are html hex color codes +like \f[V]#000000\f[R] or \f[V]#789ABC\f[R]. +A fourth byte for alpha (like \f[V]#acbdef42\f[R]) works on some +systems. +\f[V]00\f[R] is transparent, \f[V]FF\f[R] is opaque. +.PP +The tints are added to every second block counting from the right. +They will therefore always brighten the block and never darken it. +The alpha channel, if it works, can also be alternated in the same way. +.PP +Feel free to take a look at the provided color schemes for reference. +.IP \[bu] 2 +\f[V]idle_bg\f[R] +.IP \[bu] 2 +\f[V]idle_fg\f[R] +.IP \[bu] 2 +\f[V]good_bg\f[R] +.IP \[bu] 2 +\f[V]good_fg\f[R] +.IP \[bu] 2 +\f[V]warning_bg\f[R] +.IP \[bu] 2 +\f[V]warning_fg\f[R] +.IP \[bu] 2 +\f[V]critical_bg\f[R] +.IP \[bu] 2 +\f[V]critical_fg\f[R] +.IP \[bu] 2 +\f[V]info_bg\f[R] +.IP \[bu] 2 +\f[V]info_fg\f[R] +.IP \[bu] 2 +\f[V]alternating_tint_bg\f[R] +.IP \[bu] 2 +\f[V]alternating_tint_fg\f[R] +.IP \[bu] 2 +\f[V]separator_bg\f[R] +.IP \[bu] 2 +\f[V]separator_fg\f[R] +.IP \[bu] 2 +\f[V]separator\f[R] +.IP \[bu] 2 +\f[V]end_separator\f[R] +.SS Available icon overrides +.PP +These can be directly set to a string containing the desired unicode +codepoint(s) or use a TOML escape sequence like +\f[V]\[dq]\[rs]uf0f3\[dq]\f[R] for up to 4-nibble codepoints and +\f[V]\[dq]\[rs]U0001f312\[dq]\f[R] for up to 8-nibble codepoints. +.PP +You can find the codepoints in the documentation of the icon font +you\[cq]re using. +.PP +Refer to individual block\[cq]s documentation for a list of used icons +or provided icon +sets (https://github.com/greshake/i3status-rust/tree/master/files/icons) +for a complete list of icons. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH VERSION +v0.31.8 +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.SH AUTHORS +Kai Greshake , Contributors on GitHub (https, //github.com/greshake/i3status\-rust/graphs/contributors) diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template index 788270ca956f6b..f5cb81d21941ce 100644 --- a/srcpkgs/i3status-rust/template +++ b/srcpkgs/i3status-rust/template @@ -1,23 +1,27 @@ # Template file for 'i3status-rust' pkgname=i3status-rust -version=0.22.0 -revision=2 +version=0.31.8 +revision=1 build_style=cargo +configure_args="$(vopt_if notmuch '--features notmuch')" make_check_args="--bins" hostmakedepends="pkg-config" -makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel" +makedepends="pulseaudio-devel openssl-devel libsensors-devel + $(vopt_if notmuch libnotmuch-devel)" short_desc="Replacement for i3status, written in Rust" maintainer="Jan Christian Grünhage " license="GPL-3.0-only" homepage="https://github.com/greshake/i3status-rust" changelog="https://raw.githubusercontent.com/greshake/i3status-rust/master/NEWS.md" distfiles="https://github.com/greshake/i3status-rust/archive/refs/tags/v${version}.tar.gz" -checksum=cd28a90ccb2f9faaaef1e528619f1018981609d77f409abe4877350d810d3324 +checksum=31d391a08d45ab877a36479a6f453768303a836efae6ffcf555013b2f12fce2f + +build_options="notmuch" +desc_option_notmuch="Required for optional notmuch block" post_install() { vmkdir usr/share/i3status-rust - vcopy ${wrksrc}/files/icons usr/share/i3status-rust/ - vcopy ${wrksrc}/files/themes usr/share/i3status-rust/ + vcopy ${wrksrc}/files/* usr/share/i3status-rust/ - vman man/i3status-rs.1 + vman ${FILESDIR}/i3status-rs.1 }