Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] i3status-rust: update to 0.31.8.
@ 2023-07-08  5:07 kartikynwa
  2023-07-26  6:54 ` [PR PATCH] [Updated] " kartikynwa
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: kartikynwa @ 2023-07-08  5:07 UTC (permalink / raw)
  To: ml

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

There is a new 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: 1469 bytes --]

From 0ec5afcc9ca67d11a96eafe5726d95b85fc1d610 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 | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/srcpkgs/i3status-rust/template b/srcpkgs/i3status-rust/template
index 788270ca956f..7e4fe8fd6fb1 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,11 @@ 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 xtask generate-manpage
+}
 
 post_install() {
 	vmkdir usr/share/i3status-rust

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

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 kartikynwa
@ 2023-07-26  6:54 ` kartikynwa
  2023-07-26  7:24 ` kartikynwa
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ 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] 9+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 kartikynwa
  2023-07-26  6:54 ` [PR PATCH] [Updated] " kartikynwa
@ 2023-07-26  7:24 ` kartikynwa
  2023-07-26  7:51 ` kartikynwa
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ 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] 9+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 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
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ 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] 9+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 kartikynwa
                   ` (2 preceding siblings ...)
  2023-07-26  7:51 ` kartikynwa
@ 2023-07-26  7:57 ` kartikynwa
  2023-07-26  8:25 ` [PR PATCH] [Closed]: " kartikynwa
  2023-07-26  8:26 ` kartikynwa
  5 siblings, 0 replies; 9+ 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] 9+ messages in thread

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

[-- Attachment #1: Type: text/plain, Size: 1484 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/44917

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-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.

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

* Re: i3status-rust: update to 0.31.8.
  2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 kartikynwa
                   ` (4 preceding siblings ...)
  2023-07-26  8:25 ` [PR PATCH] [Closed]: " kartikynwa
@ 2023-07-26  8:26 ` kartikynwa
  5 siblings, 0 replies; 9+ messages in thread
From: kartikynwa @ 2023-07-26  8:26 UTC (permalink / raw)
  To: ml

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

New comment by kartikynwa on void-packages repository

https://github.com/void-linux/void-packages/pull/44917#issuecomment-1651217241

Comment:
Duplicate of https://github.com/void-linux/void-packages/pull/44899

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

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] " pablomancera
  2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
@ 2023-07-09  0:12 ` pablomancera
  1 sibling, 0 replies; 9+ 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] 9+ messages in thread

* Re: [PR PATCH] [Updated] i3status-rust: update to 0.31.8.
  2023-07-07  7:56 [PR PATCH] " pablomancera
@ 2023-07-07  8:02 ` pablomancera
  2023-07-09  0:12 ` pablomancera
  1 sibling, 0 replies; 9+ 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] 9+ messages in thread

end of thread, other threads:[~2023-07-26  8:26 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-08  5:07 [PR PATCH] i3status-rust: update to 0.31.8 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
2023-07-26  8:25 ` [PR PATCH] [Closed]: " kartikynwa
2023-07-26  8:26 ` kartikynwa
  -- strict thread matches above, loose matches on Subject: below --
2023-07-07  7:56 [PR PATCH] " pablomancera
2023-07-07  8:02 ` [PR PATCH] [Updated] " pablomancera
2023-07-09  0:12 ` pablomancera

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).