Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] i3status-rust: update to 0.31.8.
@ 2023-07-07  7:56 pablomancera
  2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ messages in thread
From: pablomancera @ 2023-07-07  7:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1114 bytes --]

There is a new pull request by pablomancera against master on the void-packages repository

https://github.com/pablomancera/void-packages i3status-rust
https://github.com/void-linux/void-packages/pull/44899

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, x86_64


A patch file from https://github.com/void-linux/void-packages/pull/44899.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-i3status-rust-44899.patch --]
[-- Type: text/x-diff, Size: 1951 bytes --]

From 8a2ee2d041f596c6246364a7115c116fdde4d272 Mon Sep 17 00:00:00 2001
From: Pablo Alejandro Mancera <pablo.mancera@hotmail.com>
Date: Fri, 7 Jul 2023 02:50:09 -0500
Subject: [PATCH] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f..591197661d34 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,23 +1,31 @@
 # 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')"
+	$(vopt_if notmuch libnotmuch-devel)"
 make_check_args="--bins"
-hostmakedepends="pkg-config"
-makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel"
+hostmakedepends="pkg-config pandoc"
+makedepends="pulseaudio-devel openssl-devel libsensors-devel
 short_desc="Replacement for i3status, written in Rust"
 maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
 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_build() {
+	cargo xtask generate-manpage
+}
 
 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 ${wrksrc}/man/i3status-rs.1
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
@ 2023-07-07  8:02 ` pablomancera
  2023-07-08 14:56 ` Bnyro
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: pablomancera @ 2023-07-07  8:02 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1119 bytes --]

There is an updated pull request by pablomancera against master on the void-packages repository

https://github.com/pablomancera/void-packages i3status-rust
https://github.com/void-linux/void-packages/pull/44899

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, x86_64


A patch file from https://github.com/void-linux/void-packages/pull/44899.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-i3status-rust-44899.patch --]
[-- Type: text/x-diff, Size: 1951 bytes --]

From 5f62e55c84dfb07ac699390bb014b271173d8a52 Mon Sep 17 00:00:00 2001
From: Pablo Alejandro Mancera <pablo.mancera@hotmail.com>
Date: Fri, 7 Jul 2023 02:50:09 -0500
Subject: [PATCH] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f..cc12c3251fba 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,23 +1,31 @@
 # 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"
+hostmakedepends="pkg-config pandoc"
+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 <jan.christian@gruenhage.xyz>"
 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_build() {
+	cargo xtask generate-manpage
+}
 
 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 ${wrksrc}/man/i3status-rs.1
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
  2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
@ 2023-07-08 14:56 ` Bnyro
  2023-07-09  0:12 ` [PR PATCH] [Updated] " pablomancera
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Bnyro @ 2023-07-08 14:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 159 bytes --]

New comment by Bnyro on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#issuecomment-1627369594

Comment:
(supersedes #44067)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
  2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
  2023-07-08 14:56 ` Bnyro
@ 2023-07-09  0:12 ` pablomancera
  2023-07-09  0:35 ` pablomancera
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: pablomancera @ 2023-07-09  0:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1119 bytes --]

There is an updated pull request by pablomancera against master on the void-packages repository

https://github.com/pablomancera/void-packages i3status-rust
https://github.com/void-linux/void-packages/pull/44899

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, x86_64


A patch file from https://github.com/void-linux/void-packages/pull/44899.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-i3status-rust-44899.patch --]
[-- Type: text/x-diff, Size: 128480 bytes --]

From 629a04a375a857ec303008dbfa1f9583f347c144 Mon Sep 17 00:00:00 2001
From: Pablo Alejandro Mancera <pablo.mancera@hotmail.com>
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 000000000000..2ce5c46f4469
--- /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: <https://en.wikipedia.org/wiki/Lightness>
+.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
+<https://github.com/bim9262/calibright> 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<N>\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<N>\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 /<path> 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 <https://ipapi.co/json/> Check their
+documentation here: <https://ipapi.co/api/#complete-location5>
+.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: <https://www.babelstone.co.uk/Fonts/Flags.html>
+.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] -&gt;   Sleep   &lt;-\[dq]
+cmd = \[dq]systemctl suspend\[dq]
+[[block.items]]
+display = \[dq] -&gt; Power Off &lt;-\[dq]
+cmd = \[dq]poweroff\[dq]
+confirm_msg = \[dq]Are you sure you want to power off?\[dq]
+[[block.items]]
+display = \[dq] -&gt;  Reboot   &lt;-\[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]<aur_command>\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]<aur_command>\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: <https://www.babelstone.co.uk/Fonts/Flags.html>
+.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]<file>\[dq]
+[icons]
+icons = \[dq]<file>\[dq]
+\f[R]
+.fi
+.PP
+where \f[V]<file>\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 <development@kai\-greshake.de>, Contributors on GitHub (https, //github.com/greshake/i3status\-rust/graphs/contributors)
diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f..f5cb81d21941 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 <jan.christian@gruenhage.xyz>"
 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
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (2 preceding siblings ...)
  2023-07-09  0:12 ` [PR PATCH] [Updated] " pablomancera
@ 2023-07-09  0:35 ` pablomancera
  2023-07-26  7:55 ` [PR REVIEW] " classabbyamp
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: pablomancera @ 2023-07-09  0:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 634 bytes --]

New comment by pablomancera on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#issuecomment-1627555958

Comment:
Compiling with and without the notmuch option did not make any changes to the generated manpage, and building the manpage seemed to be difficult for cross compiling and local compiling at least on an aarch64 device (due some issues compiling the pandoc dependency). So I think it's best to bundle the generated manpage as a file and install it with the template.

With this change the generated package worked on a Raspberry Pi 4, both cross compiling from my PC and compiling locally.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR REVIEW] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (3 preceding siblings ...)
  2023-07-09  0:35 ` pablomancera
@ 2023-07-26  7:55 ` classabbyamp
  2023-07-26  8:04 ` classabbyamp
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: classabbyamp @ 2023-07-26  7:55 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 217 bytes --]

New review comment by classabbyamp on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#discussion_r1274523034

Comment:
no we are not going to vendor a 7.5k line man page from upstream

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR REVIEW] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (4 preceding siblings ...)
  2023-07-26  7:55 ` [PR REVIEW] " classabbyamp
@ 2023-07-26  8:04 ` classabbyamp
  2023-07-26  8:16 ` kartikynwa
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: classabbyamp @ 2023-07-26  8:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 413 bytes --]

New review comment by classabbyamp on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#discussion_r1274523034

Comment:
no we are not going to vendor a 7.5k line man page from upstream. it's just a reality of using pandoc for documentation generation in void packages that it might not be available for all archs, unless it can be done on the host architecture when cross-building

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR REVIEW] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (5 preceding siblings ...)
  2023-07-26  8:04 ` classabbyamp
@ 2023-07-26  8:16 ` kartikynwa
  2023-09-16  5:31 ` [PR PATCH] [Closed]: " pablomancera
  2023-09-16  5:31 ` pablomancera
  8 siblings, 0 replies; 14+ messages in thread
From: kartikynwa @ 2023-07-26  8:16 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 286 bytes --]

New review comment by kartikynwa on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#discussion_r1274547216

Comment:
For conditionally generating man pages you can look at this for reference: https://github.com/void-linux/void-packages/pull/44917/files

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (7 preceding siblings ...)
  2023-09-16  5:31 ` [PR PATCH] [Closed]: " pablomancera
@ 2023-09-16  5:31 ` pablomancera
  8 siblings, 0 replies; 14+ messages in thread
From: pablomancera @ 2023-09-16  5:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 167 bytes --]

New comment by pablomancera on void-packages repository

https://github.com/void-linux/void-packages/pull/44899#issuecomment-1722141981

Comment:
Superseded by #46079

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Closed]: i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
                   ` (6 preceding siblings ...)
  2023-07-26  8:16 ` kartikynwa
@ 2023-09-16  5:31 ` pablomancera
  2023-09-16  5:31 ` pablomancera
  8 siblings, 0 replies; 14+ messages in thread
From: pablomancera @ 2023-09-16  5:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1061 bytes --]

There's a closed pull request on the void-packages repository

i3status-rust: update to 0.31.8.
https://github.com/void-linux/void-packages/pull/44899

Description:
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, x86_64
- I built this PR locally for these architectures:
  - aarch64
  - aarch64 (crossbuild)
  - armv6l (crossbuild)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] " kartikynwa
                   ` (2 preceding siblings ...)
  2023-07-26  7:51 ` kartikynwa
@ 2023-07-26  7:57 ` kartikynwa
  3 siblings, 0 replies; 14+ messages in thread
From: kartikynwa @ 2023-07-26  7:57 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]

There is an updated pull request by kartikynwa against master on the void-packages repository

https://github.com/kartikynwa/void-packages update-i3status-rust
https://github.com/void-linux/void-packages/pull/44917

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, (x86_64-glibc)

#### Notes
- The updates include breaking changes. Users of v0.22.0 who inadvertently upgrade will see errors and will have to update their configs according to [the changelog](https://github.com/greshake/i3status-rust/blob/master/NEWS.md).
- I am not sure about the pandoc requirement to build the manpage. I looked at existing templates for reference. Some do pandoc-based manpage generation only on certain architectures and usually these packages are marked as `crossbuild=no`. Some pointers on this would be appreciated.

A patch file from https://github.com/void-linux/void-packages/pull/44917.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-update-i3status-rust-44917.patch --]
[-- Type: text/x-diff, Size: 1891 bytes --]

From 09af5645abe971cdafaaacf0c6389aede27fb66a Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Sat, 8 Jul 2023 10:32:15 +0530
Subject: [PATCH] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f6..4338ae2029db9 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,10 +1,10 @@
 # Template file for 'i3status-rust'
 pkgname=i3status-rust
-version=0.22.0
-revision=2
+version=0.31.8
+revision=1
 build_style=cargo
 make_check_args="--bins"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config	$(vopt_if docs pandoc)"
 makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel"
 short_desc="Replacement for i3status, written in Rust"
 maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
@@ -12,12 +12,27 @@ 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="docs"
+desc_option_docs="Enable manpage generation"
+
+if [ -z "$CROSS_BUILD" ]; then
+	build_options_default="docs"
+fi
+
+post_build() {
+	if [ "$build_option_docs" ]; then
+		cargo xtask generate-manpage
+	fi
+}
 
 post_install() {
 	vmkdir usr/share/i3status-rust
 	vcopy ${wrksrc}/files/icons usr/share/i3status-rust/
 	vcopy ${wrksrc}/files/themes usr/share/i3status-rust/
 
-	vman man/i3status-rs.1
+	if [ "$build_option_docs" ]; then
+		vman man/i3status-rs.1
+	fi
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] " kartikynwa
  2023-07-26  6:54 ` [PR PATCH] [Updated] " kartikynwa
  2023-07-26  7:24 ` kartikynwa
@ 2023-07-26  7:51 ` kartikynwa
  2023-07-26  7:57 ` kartikynwa
  3 siblings, 0 replies; 14+ messages in thread
From: kartikynwa @ 2023-07-26  7:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]

There is an updated pull request by kartikynwa against master on the void-packages repository

https://github.com/kartikynwa/void-packages update-i3status-rust
https://github.com/void-linux/void-packages/pull/44917

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, (x86_64-glibc)

#### Notes
- The updates include breaking changes. Users of v0.22.0 who inadvertently upgrade will see errors and will have to update their configs according to [the changelog](https://github.com/greshake/i3status-rust/blob/master/NEWS.md).
- I am not sure about the pandoc requirement to build the manpage. I looked at existing templates for reference. Some do pandoc-based manpage generation only on certain architectures and usually these packages are marked as `crossbuild=no`. Some pointers on this would be appreciated.

A patch file from https://github.com/void-linux/void-packages/pull/44917.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-update-i3status-rust-44917.patch --]
[-- Type: text/x-diff, Size: 2995 bytes --]

From f5807271061ddd2a1bfcb01ed34e16e937707a5b Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Fri, 31 Mar 2023 14:19:15 +0530
Subject: [PATCH 1/2] New package: rsgain-3.2.1

---
 srcpkgs/rsgain/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/rsgain/template

diff --git a/srcpkgs/rsgain/template b/srcpkgs/rsgain/template
new file mode 100644
index 0000000000000..d05d859f8558f
--- /dev/null
+++ b/srcpkgs/rsgain/template
@@ -0,0 +1,17 @@
+# Template file for 'rsgain'
+pkgname=rsgain
+version=3.2.1
+revision=1
+build_style=cmake
+hostmakedepends="pkg-config"
+makedepends="libebur128-devel taglib-devel ffmpeg-devel inih-devel fmt-devel"
+short_desc="Simple but powerful ReplayGain 2.0 tagging utility"
+maintainer="Kartik Singh <kartik.ynwa@gmail.com>"
+license="BSD-2-Clause"
+homepage="https://github.com/complexlogic/rsgain"
+distfiles="https://github.com/complexlogic/rsgain/archive/v${version}.tar.gz"
+checksum=e5ddedd2dc5cff97c2efde64480d7bd3c7c5061a496d3fe284dcbc0af5417513
+
+post_install() {
+	vlicense LICENSE
+}

From 690e863b8f49cd4c85be13fe46becb4719e8a8ab Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Sat, 8 Jul 2023 10:32:15 +0530
Subject: [PATCH 2/2] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f6..4338ae2029db9 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,10 +1,10 @@
 # Template file for 'i3status-rust'
 pkgname=i3status-rust
-version=0.22.0
-revision=2
+version=0.31.8
+revision=1
 build_style=cargo
 make_check_args="--bins"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config	$(vopt_if docs pandoc)"
 makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel"
 short_desc="Replacement for i3status, written in Rust"
 maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
@@ -12,12 +12,27 @@ 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="docs"
+desc_option_docs="Enable manpage generation"
+
+if [ -z "$CROSS_BUILD" ]; then
+	build_options_default="docs"
+fi
+
+post_build() {
+	if [ "$build_option_docs" ]; then
+		cargo xtask generate-manpage
+	fi
+}
 
 post_install() {
 	vmkdir usr/share/i3status-rust
 	vcopy ${wrksrc}/files/icons usr/share/i3status-rust/
 	vcopy ${wrksrc}/files/themes usr/share/i3status-rust/
 
-	vman man/i3status-rs.1
+	if [ "$build_option_docs" ]; then
+		vman man/i3status-rs.1
+	fi
 }

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] " kartikynwa
  2023-07-26  6:54 ` [PR PATCH] [Updated] " kartikynwa
@ 2023-07-26  7:24 ` kartikynwa
  2023-07-26  7:51 ` kartikynwa
  2023-07-26  7:57 ` kartikynwa
  3 siblings, 0 replies; 14+ messages in thread
From: kartikynwa @ 2023-07-26  7:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]

There is an updated pull request by kartikynwa against master on the void-packages repository

https://github.com/kartikynwa/void-packages update-i3status-rust
https://github.com/void-linux/void-packages/pull/44917

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, (x86_64-glibc)

#### Notes
- The updates include breaking changes. Users of v0.22.0 who inadvertently upgrade will see errors and will have to update their configs according to [the changelog](https://github.com/greshake/i3status-rust/blob/master/NEWS.md).
- I am not sure about the pandoc requirement to build the manpage. I looked at existing templates for reference. Some do pandoc-based manpage generation only on certain architectures and usually these packages are marked as `crossbuild=no`. Some pointers on this would be appreciated.

A patch file from https://github.com/void-linux/void-packages/pull/44917.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-update-i3status-rust-44917.patch --]
[-- Type: text/x-diff, Size: 2708 bytes --]

From f5807271061ddd2a1bfcb01ed34e16e937707a5b Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Fri, 31 Mar 2023 14:19:15 +0530
Subject: [PATCH 1/2] New package: rsgain-3.2.1

---
 srcpkgs/rsgain/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/rsgain/template

diff --git a/srcpkgs/rsgain/template b/srcpkgs/rsgain/template
new file mode 100644
index 0000000000000..d05d859f8558f
--- /dev/null
+++ b/srcpkgs/rsgain/template
@@ -0,0 +1,17 @@
+# Template file for 'rsgain'
+pkgname=rsgain
+version=3.2.1
+revision=1
+build_style=cmake
+hostmakedepends="pkg-config"
+makedepends="libebur128-devel taglib-devel ffmpeg-devel inih-devel fmt-devel"
+short_desc="Simple but powerful ReplayGain 2.0 tagging utility"
+maintainer="Kartik Singh <kartik.ynwa@gmail.com>"
+license="BSD-2-Clause"
+homepage="https://github.com/complexlogic/rsgain"
+distfiles="https://github.com/complexlogic/rsgain/archive/v${version}.tar.gz"
+checksum=e5ddedd2dc5cff97c2efde64480d7bd3c7c5061a496d3fe284dcbc0af5417513
+
+post_install() {
+	vlicense LICENSE
+}

From a1a8de49ffa340746e419af60a3e5b1595a23a8f Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Sat, 8 Jul 2023 10:32:15 +0530
Subject: [PATCH 2/2] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f6..2154ba67dbd32 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,10 +1,11 @@
 # Template file for 'i3status-rust'
 pkgname=i3status-rust
-version=0.22.0
-revision=2
+version=0.31.8
+revision=1
 build_style=cargo
+build_helper="qemu"
 make_check_args="--bins"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config pandoc"
 makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel"
 short_desc="Replacement for i3status, written in Rust"
 maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
@@ -12,7 +13,12 @@ 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
+
+post_build() {
+	cargo auditable build --release --target ${RUST_TARGET} --package xtask
+	vtargetrun target/${RUST_TARGET}/release/xtask generate-manpage
+}
 
 post_install() {
 	vmkdir usr/share/i3status-rust

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] " kartikynwa
@ 2023-07-26  6:54 ` kartikynwa
  2023-07-26  7:24 ` kartikynwa
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: kartikynwa @ 2023-07-26  6:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]

There is an updated pull request by kartikynwa against master on the void-packages repository

https://github.com/kartikynwa/void-packages update-i3status-rust
https://github.com/void-linux/void-packages/pull/44917

i3status-rust: update to 0.31.8.
<!-- Uncomment relevant sections and delete options which are not applicable -->

#### Testing the changes
- I tested the changes in this PR: **YES**

<!--
#### New package
- This new package conforms to the [package requirements](https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#package-requirements): **YES**|**NO**
-->

<!-- Note: If the build is likely to take more than 2 hours, please add ci skip tag as described in
https://github.com/void-linux/void-packages/blob/master/CONTRIBUTING.md#continuous-integration
and test at least one native build and, if supported, at least one cross build.
Ignore this section if this PR is not skipping CI.
-->

#### Local build testing
- I built this PR locally for my native architecture, (x86_64-glibc)

#### Notes
- The updates include breaking changes. Users of v0.22.0 who inadvertently upgrade will see errors and will have to update their configs according to [the changelog](https://github.com/greshake/i3status-rust/blob/master/NEWS.md).
- I am not sure about the pandoc requirement to build the manpage. I looked at existing templates for reference. Some do pandoc-based manpage generation only on certain architectures and usually these packages are marked as `crossbuild=no`. Some pointers on this would be appreciated.

A patch file from https://github.com/void-linux/void-packages/pull/44917.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-update-i3status-rust-44917.patch --]
[-- Type: text/x-diff, Size: 2685 bytes --]

From f5807271061ddd2a1bfcb01ed34e16e937707a5b Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Fri, 31 Mar 2023 14:19:15 +0530
Subject: [PATCH 1/2] New package: rsgain-3.2.1

---
 srcpkgs/rsgain/template | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 srcpkgs/rsgain/template

diff --git a/srcpkgs/rsgain/template b/srcpkgs/rsgain/template
new file mode 100644
index 0000000000000..d05d859f8558f
--- /dev/null
+++ b/srcpkgs/rsgain/template
@@ -0,0 +1,17 @@
+# Template file for 'rsgain'
+pkgname=rsgain
+version=3.2.1
+revision=1
+build_style=cmake
+hostmakedepends="pkg-config"
+makedepends="libebur128-devel taglib-devel ffmpeg-devel inih-devel fmt-devel"
+short_desc="Simple but powerful ReplayGain 2.0 tagging utility"
+maintainer="Kartik Singh <kartik.ynwa@gmail.com>"
+license="BSD-2-Clause"
+homepage="https://github.com/complexlogic/rsgain"
+distfiles="https://github.com/complexlogic/rsgain/archive/v${version}.tar.gz"
+checksum=e5ddedd2dc5cff97c2efde64480d7bd3c7c5061a496d3fe284dcbc0af5417513
+
+post_install() {
+	vlicense LICENSE
+}

From 8befcea8abf8c0d6cd2770886318a57361dd7cc8 Mon Sep 17 00:00:00 2001
From: Kartik Singh <kartik.ynwa@gmail.com>
Date: Sat, 8 Jul 2023 10:32:15 +0530
Subject: [PATCH 2/2] i3status-rust: update to 0.31.8.

---
 srcpkgs/i3status-rust/template | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f6..12ba3b22c5bf5 100644
--- a/srcpkgs/i3status-rust/template
+++ b/srcpkgs/i3status-rust/template
@@ -1,10 +1,10 @@
 # Template file for 'i3status-rust'
 pkgname=i3status-rust
-version=0.22.0
-revision=2
+version=0.31.8
+revision=1
 build_style=cargo
 make_check_args="--bins"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config pandoc"
 makedepends="dbus-devel pulseaudio-devel openssl-devel libsensors-devel"
 short_desc="Replacement for i3status, written in Rust"
 maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
@@ -12,7 +12,12 @@ 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
+
+post_build() {
+	cargo auditable build --release --target ${RUST_TARGET} --package xtask
+	vtargetrun target/${RUST_TARGET}/release/xtask generate-manpage
+}
 
 post_install() {
 	vmkdir usr/share/i3status-rust

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-09-16  5:31 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-07  7:56 [PR PATCH] i3status-rust: update to 0.31.8 pablomancera
2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
2023-07-08 14:56 ` Bnyro
2023-07-09  0:12 ` [PR PATCH] [Updated] " pablomancera
2023-07-09  0:35 ` pablomancera
2023-07-26  7:55 ` [PR REVIEW] " classabbyamp
2023-07-26  8:04 ` classabbyamp
2023-07-26  8:16 ` kartikynwa
2023-09-16  5:31 ` [PR PATCH] [Closed]: " pablomancera
2023-09-16  5:31 ` pablomancera
2023-07-08  5:07 [PR PATCH] " kartikynwa
2023-07-26  6:54 ` [PR PATCH] [Updated] " kartikynwa
2023-07-26  7:24 ` kartikynwa
2023-07-26  7:51 ` kartikynwa
2023-07-26  7:57 ` kartikynwa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).