mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Compare commits
571 Commits
Author | SHA1 | Date | |
---|---|---|---|
47193a3d2f | |||
097cbc0c53 | |||
13a9c4a08b | |||
ebba529682 | |||
b97b0ae605 | |||
7e9bfc504c | |||
7b0d2e8043 | |||
75eacb95ef | |||
2b24b16023 | |||
5cbbfd5c8a | |||
6163be687d | |||
df65cab17a | |||
7b704071ff | |||
5748e56aeb | |||
5b29119dab | |||
4bc30e040f | |||
919ad0a8bb | |||
5df43be11f | |||
56fa6b6afc | |||
c04485a5d0 | |||
b06953757e | |||
f5ef13c7f1 | |||
8c83af75a1 | |||
e253c34cd4 | |||
e4faf252b2 | |||
3da3732cc9 | |||
757f20fc04 | |||
f00602058c | |||
a9a2223469 | |||
33d1ee413f | |||
0b4c1cb877 | |||
5e5569bb10 | |||
272d672953 | |||
ede1d25440 | |||
8be889c5aa | |||
b1e3347fca | |||
da2163ae41 | |||
1d7d1a8fe8 | |||
7d20034067 | |||
8aafe817bf | |||
a5607b66ca | |||
61648c55d9 | |||
4dff1b91fe | |||
1368ba64b5 | |||
6de3b58d6a | |||
731eaeb0be | |||
022c9abad4 | |||
a46b8a0109 | |||
3b2dfeec01 | |||
e62d339b57 | |||
18a2b90fc0 | |||
60cdf10e64 | |||
51f0fc6b72 | |||
6f3a27905d | |||
659fea07ee | |||
bd908f6d97 | |||
cb82326b22 | |||
33c4964187 | |||
3d980f92a3 | |||
626a1f58be | |||
1445dc4151 | |||
a6084ea7e6 | |||
60467ad7f2 | |||
ef99b0226c | |||
60e0584d16 | |||
ba6faa7859 | |||
02b3c125a1 | |||
20a8039a25 | |||
ffeef7f40f | |||
0cfd1c7094 | |||
e5524d5059 | |||
774d8880cd | |||
a301b8c4cd | |||
5383f7bd56 | |||
a53c97f7f6 | |||
9fd2703cb9 | |||
918de59988 | |||
4b27385da2 | |||
f557697e92 | |||
63525ec956 | |||
5791a6abc6 | |||
bbcfb5e138 | |||
4ab4ff790e | |||
473eb0982b | |||
fa9f3a6dc5 | |||
c26849217e | |||
90206f55be | |||
9a0dbd555d | |||
a9015c7c98 | |||
5b6e9d4e34 | |||
8ccf00f0fe | |||
823c13a8c0 | |||
3c96881a59 | |||
b34d325a71 | |||
3bda22da72 | |||
61a6c00c02 | |||
39bc54e3ad | |||
4cb7e55a91 | |||
43862ceb34 | |||
f29a400c97 | |||
ce16e029ed | |||
79eb2f5bc1 | |||
b7e6a2dc25 | |||
23f39938fb | |||
8cc8820369 | |||
c9c8b09e3f | |||
fb1f550c1a | |||
e25a7c9719 | |||
09142fa322 | |||
1af25094b7 | |||
0d99d38089 | |||
a10464d9bb | |||
43958ef560 | |||
5e4a47c0a8 | |||
ea38eec2af | |||
286a3c70f4 | |||
9049de583e | |||
a6eaaad97f | |||
d25930793c | |||
67ab269706 | |||
48312f4c91 | |||
677cbb3384 | |||
973aa09f8b | |||
e8c4b85328 | |||
b5ad77ea8c | |||
74a8464c09 | |||
a78f0124d2 | |||
8da5425189 | |||
a9c9f1d705 | |||
301b106c48 | |||
757a450324 | |||
7b3a6fbaa7 | |||
c93811b158 | |||
7554d7f071 | |||
220b859948 | |||
012baadaca | |||
0ecfce9c61 | |||
d2116acb62 | |||
5d8f9a8273 | |||
9068b7548f | |||
1495b957f1 | |||
47cdd6f988 | |||
f3f0b008c6 | |||
c1ceb7ac42 | |||
e128c48573 | |||
dd9e3d0172 | |||
a9613892bb | |||
e7af29ac1e | |||
3b28af8b51 | |||
ed31b20c26 | |||
fea7ec9133 | |||
3c8ca009ff | |||
f4cfafd238 | |||
5182fadede | |||
18e0e0c7c1 | |||
69b95e6d71 | |||
5e2895ccb3 | |||
0ca1c3957a | |||
de77787b60 | |||
51b6c22cab | |||
01cee153a4 | |||
93e340a081 | |||
6225db0a48 | |||
ea17a66dfc | |||
67efe1af89 | |||
ba498869c5 | |||
43d52c59d9 | |||
ca9d237b00 | |||
bc07a82579 | |||
6e9f21fc6b | |||
eb9d2d9c5d | |||
be3df41ae0 | |||
4e8ccf36b5 | |||
5649c3f552 | |||
a4b1b0a211 | |||
6c8e186586 | |||
544c6deb88 | |||
e59b4e4c93 | |||
d71a4569fe | |||
120cba0f5e | |||
328573332f | |||
df0fdce92b | |||
f0bead34d4 | |||
d6bd440027 | |||
c692d7bf64 | |||
2045aac5b0 | |||
a92223c316 | |||
24d03d13ce | |||
b3b5d8f9ab | |||
86850f5c7a | |||
0bc5314e08 | |||
1d6cfe7ce6 | |||
2a3ebc12de | |||
1938bb5d28 | |||
a35861b3b9 | |||
8b512e7b22 | |||
fb083f93dc | |||
f795e7a308 | |||
21abd4f9f9 | |||
f724cc3f9d | |||
bfbb2f9a40 | |||
91357f210d | |||
3e48551f25 | |||
c05f41d732 | |||
4d59de42af | |||
6e296838e4 | |||
e00e36981e | |||
4136ffaecb | |||
bd199e414b | |||
531bdfb8bb | |||
c1ea7626b9 | |||
995802e8ae | |||
0079092699 | |||
b5c686c0dd | |||
4c4d09992e | |||
9218968d2f | |||
a08967e008 | |||
272c638f7e | |||
57ad7f9536 | |||
2a76d8e5b9 | |||
d5a86526bc | |||
c5babb4c44 | |||
328575a721 | |||
ea9078d887 | |||
b1833b1f36 | |||
53e89dace7 | |||
3cbcef61cf | |||
22084691ff | |||
f4afa59861 | |||
ce8c13788a | |||
b74f3c7aaa | |||
55d7868f86 | |||
0540977e45 | |||
385726e701 | |||
2111865efe | |||
94d6ae9741 | |||
e6760bf9dd | |||
7671ccfbc6 | |||
459541ed89 | |||
da3d9533d1 | |||
8db1996ccc | |||
cfef78a5bc | |||
60fa5e9f67 | |||
cea59ddc6c | |||
3730793197 | |||
d2b4076ac8 | |||
e63e3a0ca9 | |||
99d370d9ed | |||
80b2b29a77 | |||
27ad9ec267 | |||
9eb6c4e296 | |||
748c6125d0 | |||
235861fd3d | |||
5e9bbe5c76 | |||
74fa131ebe | |||
2c7cb0e9d4 | |||
ce8ae5bf17 | |||
062e7bb9b4 | |||
3acd31c3e9 | |||
456e06c4b5 | |||
a2751cfcd6 | |||
d9cc995405 | |||
00a2ebf00d | |||
c2f98d07ef | |||
833dcc1bb8 | |||
8c24e26f0e | |||
56b4a11a9c | |||
1111763251 | |||
769858fbb4 | |||
2695815bcc | |||
49afb87e34 | |||
5250123dcb | |||
c0b3e9ee35 | |||
454ba610f4 | |||
3718902b9d | |||
9f0a14c22b | |||
781da93f3d | |||
8f4f67f69f | |||
8be5bab8ad | |||
d02e23c759 | |||
d2b22c6ec5 | |||
ed898cd211 | |||
1a1c617520 | |||
253222d31c | |||
51e6fc6250 | |||
af1668dfd0 | |||
cf5877073a | |||
bd567800c9 | |||
6477e539d0 | |||
242e19a07d | |||
0e53c37d6b | |||
3030850b22 | |||
92cc01f401 | |||
d48eebd4d3 | |||
eb705533b5 | |||
3cf027fc56 | |||
09120caf17 | |||
73495df377 | |||
fd417c0805 | |||
afa590f781 | |||
df36ac3408 | |||
ebdf575d45 | |||
a4d27ea806 | |||
a10266ceee | |||
31137c30fb | |||
c374c412d3 | |||
2fec1d4907 | |||
be28ee3d7e | |||
2d7e21ed7d | |||
930a3e168b | |||
7948d03d25 | |||
ff61e7bf4e | |||
64849f52c9 | |||
1374b0fce4 | |||
1ceaff27c2 | |||
527017baca | |||
f330e51472 | |||
411c6f4b4b | |||
e8e8ccb6cf | |||
a24f2d72a7 | |||
ffa458223d | |||
aa8bd51952 | |||
05dbfe261a | |||
1f591e36f1 | |||
d0677c1801 | |||
c18c6b080a | |||
7240611d87 | |||
e1045381fe | |||
e660a3634d | |||
54e04b5a30 | |||
662a250705 | |||
f72c1a54d3 | |||
6b221133c2 | |||
d01fda6fae | |||
692b90c995 | |||
dea2d721eb | |||
72a2ada82c | |||
6156a62294 | |||
d4d35e2f89 | |||
a58988ea9d | |||
0ada5ac8b0 | |||
1421163df3 | |||
9d5f0e45c0 | |||
45e44e03bd | |||
830c5cd5d0 | |||
90f206f92a | |||
59e7f1974c | |||
97ae2ff343 | |||
3d63080346 | |||
cb842d9d50 | |||
a7e6330078 | |||
93807b0b3e | |||
6e73c58e60 | |||
209225e381 | |||
7746328daa | |||
c7d475ee86 | |||
4ed13df092 | |||
33c3ab35a8 | |||
4dfea72db0 | |||
504132dc55 | |||
debbfccf07 | |||
56ec72c31c | |||
27c6c96b37 | |||
8551c4bbe3 | |||
58362abfaf | |||
2abeba2b52 | |||
bfa3adcfd6 | |||
2db6fc8b1b | |||
c2dd296d31 | |||
5b0c5ea9ce | |||
c7bb0ae0af | |||
b2f90dffe1 | |||
f86dff60e6 | |||
1db3c55b48 | |||
35254ee834 | |||
9a0013cb10 | |||
cca5227210 | |||
cf9d98a0be | |||
015409acaf | |||
2b735f44bc | |||
8fa5d9b838 | |||
0012bcbd74 | |||
b8322c4b4b | |||
07050cf354 | |||
ddf3e11240 | |||
1ca660460a | |||
0898236586 | |||
c3e91cd228 | |||
c500c7d9a1 | |||
5da45ece9d | |||
024777a5bc | |||
9758833027 | |||
9a958f6848 | |||
9e03bb61c7 | |||
710f89599e | |||
d1700bf202 | |||
e1b31db42b | |||
52e9f624be | |||
e75eafcb34 | |||
6558a156b3 | |||
faf8954712 | |||
e58f1fd3e0 | |||
6b83360e76 | |||
03ca8de6d7 | |||
ac193ae669 | |||
38d2815425 | |||
79f21c0d7b | |||
0306c97173 | |||
8a82cdff16 | |||
29bdff5314 | |||
eb017347b8 | |||
f5a24d12e5 | |||
912d7f8588 | |||
5647146ac0 | |||
af2a3f8bda | |||
55e83f90d1 | |||
0d94853613 | |||
120c68e014 | |||
4deb6d812d | |||
bc201fd0eb | |||
d2ff116c92 | |||
e3342467fc | |||
ce10ce0d5e | |||
4a929240df | |||
33d13af6d1 | |||
90878a5c98 | |||
0d27949f0a | |||
f6322d2dd1 | |||
330d166c82 | |||
5f2dd99e6d | |||
8b03e38594 | |||
5944989a8a | |||
58a399b9af | |||
dcd75b3b40 | |||
17f91391b6 | |||
061f4550f4 | |||
fd24d7bcf6 | |||
51670f0506 | |||
4e930ba50a | |||
8839a86afe | |||
f4bfe777d9 | |||
59e57ab9a0 | |||
f00f30a5ae | |||
40bc2e96db | |||
9ac9dc368e | |||
39c170bf10 | |||
5fea01300c | |||
b181cd04b6 | |||
d786f9a0e6 | |||
c5910ae19a | |||
ed6467e785 | |||
43c3ca1d38 | |||
97f0d6fa42 | |||
b8a68b8085 | |||
8881b9a6ef | |||
e8942feefc | |||
a23d58e900 | |||
16d5619f3b | |||
bcee4e15d3 | |||
b7bd06ad8f | |||
e50c246601 | |||
ee504b826d | |||
848ae1f818 | |||
406eb0ee9a | |||
112d481ae7 | |||
872cd6083d | |||
8dc78e4e40 | |||
e662b8c624 | |||
e0451816e2 | |||
e2e59a52df | |||
123ed36739 | |||
c64058c947 | |||
56d46e62c1 | |||
89a57f6722 | |||
4336f10b29 | |||
a7979a3e56 | |||
bfed2114e4 | |||
f65a372855 | |||
6f3fe6d339 | |||
c287b0c82b | |||
5b1cd65e20 | |||
99ed2bb7fa | |||
ddd5b4e157 | |||
e9e5780aae | |||
061ad13082 | |||
77bea7c182 | |||
c2ab2e6d19 | |||
11239a4900 | |||
95b5348c24 | |||
9616df58da | |||
7b115913de | |||
4029c5423f | |||
3996764880 | |||
60821257ac | |||
e14005a6aa | |||
15dbe8965e | |||
decc5bcd68 | |||
92870cab2a | |||
4cb2cc9f21 | |||
02df861829 | |||
23eaffc04b | |||
714451e4f9 | |||
4cd6024f07 | |||
8b5f42d934 | |||
b65c976bc1 | |||
5e7c9378df | |||
a9569e7d5c | |||
318a6e0969 | |||
a1d046b2e7 | |||
c7b09eea11 | |||
bc8517fd08 | |||
9439e4183c | |||
8fc8bb40bf | |||
d906080f26 | |||
04d66de866 | |||
699f732146 | |||
f437bf96e3 | |||
fc9a390977 | |||
56a45e962b | |||
48d2759df5 | |||
1116ff0d67 | |||
0c04aea108 | |||
a44622aa9f | |||
3117aefdf3 | |||
24a8332b62 | |||
84e7689521 | |||
0708573fa4 | |||
08d472d1b1 | |||
c35f91ed7a | |||
9c3af1b6ad | |||
17b60bc737 | |||
c1f92d2a3c | |||
72f478c195 | |||
5128a5d9f3 | |||
36aa22189b | |||
d10d9b8202 | |||
e57899c0c5 | |||
249c0aad73 | |||
18a4f87a59 | |||
458c03bf95 | |||
1b4a7b02f4 | |||
fb2ac8a765 | |||
13100326b0 | |||
ca0d35286d | |||
f3a049c6df | |||
074b7c4b99 | |||
b24fd35add | |||
c27dab9379 | |||
6857691679 | |||
a475be7cf7 | |||
00c11c64ca | |||
4e2305639b | |||
e0f29dbf71 | |||
36d3d511d6 | |||
ae9fb57790 | |||
b8ee448e71 | |||
632058a4f6 | |||
d25278f710 | |||
2dfd64e1c9 | |||
3c182c9ca9 | |||
e094480684 | |||
ccce2b700b | |||
41dea6e46c | |||
65c3f0a132 | |||
e6262b870c | |||
823ed887ab | |||
3bf815f6de | |||
c1cda1553a | |||
f6ee90e5ba | |||
d5c400c0cc | |||
a650c7d90c |
1
.envrc.sample
Normal file
1
.envrc.sample
Normal file
@ -0,0 +1 @@
|
|||||||
|
use flake
|
11
.github/workflows/freebsd.yml
vendored
11
.github/workflows/freebsd.yml
vendored
@ -4,14 +4,14 @@ on: [ push, pull_request ]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
clang:
|
clang:
|
||||||
# Run actions in a FreeBSD vm on the macos-10.15 runner
|
# Run actions in a FreeBSD VM on the macos-12 runner
|
||||||
# https://github.com/actions/runner/issues/385 - for FreeBSD runner support
|
# https://github.com/actions/runner/issues/385 - for FreeBSD runner support
|
||||||
# https://github.com/actions/virtual-environments/issues/4060 - for lack of VirtualBox on MacOS 11 runners
|
# https://github.com/actions/virtual-environments/issues/4060 - for lack of VirtualBox on MacOS 11 runners
|
||||||
runs-on: macos-10.15
|
runs-on: macos-12
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Test in FreeBSD VM
|
- name: Test in FreeBSD VM
|
||||||
uses: vmactions/freebsd-vm@v0.1.6 # aka FreeBSD 13.0
|
uses: vmactions/freebsd-vm@v0
|
||||||
with:
|
with:
|
||||||
mem: 2048
|
mem: 2048
|
||||||
usesh: true
|
usesh: true
|
||||||
@ -21,7 +21,8 @@ jobs:
|
|||||||
pkg install -y git # subprojects/date
|
pkg install -y git # subprojects/date
|
||||||
pkg install -y catch evdev-proto gtk-layer-shell gtkmm30 jsoncpp \
|
pkg install -y catch evdev-proto gtk-layer-shell gtkmm30 jsoncpp \
|
||||||
libdbusmenu libevdev libfmt libmpdclient libudev-devd meson \
|
libdbusmenu libevdev libfmt libmpdclient libudev-devd meson \
|
||||||
pkgconf pulseaudio scdoc sndio spdlog wayland-protocols
|
pkgconf pulseaudio scdoc sndio spdlog wayland-protocols upower \
|
||||||
|
libinotify
|
||||||
run: |
|
run: |
|
||||||
meson build -Dman-pages=enabled
|
meson build -Dman-pages=enabled
|
||||||
ninja -C build
|
ninja -C build
|
||||||
|
2
.github/workflows/lint.yml
vendored
2
.github/workflows/lint.yml
vendored
@ -6,7 +6,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- uses: DoozyX/clang-format-lint-action@v0.13
|
- uses: DoozyX/clang-format-lint-action@v0.13
|
||||||
with:
|
with:
|
||||||
source: '.'
|
source: '.'
|
||||||
|
11
.github/workflows/linux.yml
vendored
11
.github/workflows/linux.yml
vendored
@ -12,16 +12,21 @@ jobs:
|
|||||||
- debian
|
- debian
|
||||||
- fedora
|
- fedora
|
||||||
- opensuse
|
- opensuse
|
||||||
|
- gentoo
|
||||||
|
cpp_std: [c++17]
|
||||||
|
include:
|
||||||
|
- distro: fedora
|
||||||
|
cpp_std: c++20
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: alexays/waybar:${{ matrix.distro }}
|
image: alexays/waybar:${{ matrix.distro }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: configure
|
- name: configure
|
||||||
run: meson -Dman-pages=enabled build
|
run: meson -Dman-pages=enabled -Dcpp_std=${{matrix.cpp_std}} build
|
||||||
- name: build
|
- name: build
|
||||||
run: ninja -C build
|
run: ninja -C build
|
||||||
- name: test
|
- name: test
|
||||||
run: meson test -C build --no-rebuild --print-errorlogs --suite waybar
|
run: make test
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,6 +2,8 @@
|
|||||||
*~
|
*~
|
||||||
vgcore.*
|
vgcore.*
|
||||||
/.vscode
|
/.vscode
|
||||||
|
/.idea
|
||||||
|
/.cache
|
||||||
*.swp
|
*.swp
|
||||||
packagecache
|
packagecache
|
||||||
/subprojects/**/
|
/subprojects/**/
|
||||||
@ -41,3 +43,4 @@ packagecache
|
|||||||
*.exe
|
*.exe
|
||||||
*.out
|
*.out
|
||||||
*.app
|
*.app
|
||||||
|
/.direnv/
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
FROM alpine:latest
|
FROM alpine:latest
|
||||||
|
|
||||||
RUN apk add --no-cache git meson alpine-sdk libinput-dev wayland-dev wayland-protocols mesa-dev libxkbcommon-dev eudev-dev pixman-dev gtkmm3-dev jsoncpp-dev pugixml-dev libnl3-dev pulseaudio-dev libmpdclient-dev sndio-dev scdoc libxkbcommon tzdata
|
RUN apk add --no-cache git meson alpine-sdk libinput-dev wayland-dev wayland-protocols mesa-dev libxkbcommon-dev eudev-dev pixman-dev gtkmm3-dev jsoncpp-dev pugixml-dev libnl3-dev pulseaudio-dev libmpdclient-dev sndio-dev scdoc libxkbcommon tzdata playerctl-dev
|
||||||
|
@ -3,4 +3,5 @@
|
|||||||
FROM archlinux:base-devel
|
FROM archlinux:base-devel
|
||||||
|
|
||||||
RUN pacman -Syu --noconfirm && \
|
RUN pacman -Syu --noconfirm && \
|
||||||
pacman -S git meson base-devel libinput wayland wayland-protocols pixman libxkbcommon mesa gtkmm3 jsoncpp pugixml scdoc libpulse libdbusmenu-gtk3 libmpdclient gobject-introspection --noconfirm libxkbcommon
|
pacman -S --noconfirm git meson base-devel libinput wayland wayland-protocols pixman libxkbcommon mesa gtkmm3 jsoncpp pugixml scdoc libpulse libdbusmenu-gtk3 libmpdclient gobject-introspection libxkbcommon playerctl && \
|
||||||
|
sed -Ei 's/#(en_(US|GB)\.UTF)/\1/' /etc/locale.gen && locale-gen
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
FROM debian:sid
|
FROM debian:sid
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y build-essential meson ninja-build git pkg-config libinput10 libpugixml-dev libinput-dev wayland-protocols libwayland-client0 libwayland-cursor0 libwayland-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libxkbcommon-dev libudev-dev libpixman-1-dev libgtkmm-3.0-dev libjsoncpp-dev scdoc libdbusmenu-gtk3-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libmpdclient-dev gobject-introspection libgirepository1.0-dev libxkbcommon-dev libxkbregistry-dev libxkbregistry0 && \
|
apt-get install -y build-essential meson ninja-build git pkg-config libinput10 libpugixml-dev libinput-dev wayland-protocols libwayland-client0 libwayland-cursor0 libwayland-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libxkbcommon-dev libudev-dev libpixman-1-dev libgtkmm-3.0-dev libjsoncpp-dev scdoc libdbusmenu-gtk3-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libmpdclient-dev gobject-introspection libgirepository1.0-dev libxkbcommon-dev libxkbregistry-dev libxkbregistry0 libplayerctl-dev && \
|
||||||
apt-get clean
|
apt-get clean
|
||||||
|
@ -2,11 +2,33 @@
|
|||||||
|
|
||||||
FROM fedora:latest
|
FROM fedora:latest
|
||||||
|
|
||||||
RUN dnf install -y @c-development git-core meson scdoc 'pkgconfig(date)' \
|
RUN dnf install -y @c-development \
|
||||||
'pkgconfig(dbusmenu-gtk3-0.4)' 'pkgconfig(fmt)' 'pkgconfig(gdk-pixbuf-2.0)' \
|
git-core glibc-langpack-en meson scdoc \
|
||||||
'pkgconfig(gio-unix-2.0)' 'pkgconfig(gtk-layer-shell-0)' 'pkgconfig(gtkmm-3.0)' \
|
'pkgconfig(catch2)' \
|
||||||
'pkgconfig(jsoncpp)' 'pkgconfig(libinput)' 'pkgconfig(libmpdclient)' \
|
'pkgconfig(date)' \
|
||||||
'pkgconfig(libnl-3.0)' 'pkgconfig(libnl-genl-3.0)' 'pkgconfig(libpulse)' \
|
'pkgconfig(dbusmenu-gtk3-0.4)' \
|
||||||
'pkgconfig(libudev)' 'pkgconfig(pugixml)' 'pkgconfig(sigc++-2.0)' 'pkgconfig(spdlog)' \
|
'pkgconfig(fmt)' \
|
||||||
'pkgconfig(wayland-client)' 'pkgconfig(wayland-cursor)' 'pkgconfig(wayland-protocols)' 'pkgconfig(xkbregistry)' && \
|
'pkgconfig(gdk-pixbuf-2.0)' \
|
||||||
|
'pkgconfig(gio-unix-2.0)' \
|
||||||
|
'pkgconfig(gtk-layer-shell-0)' \
|
||||||
|
'pkgconfig(gtkmm-3.0)' \
|
||||||
|
'pkgconfig(jack)' \
|
||||||
|
'pkgconfig(jsoncpp)' \
|
||||||
|
'pkgconfig(libevdev)' \
|
||||||
|
'pkgconfig(libinput)' \
|
||||||
|
'pkgconfig(libmpdclient)' \
|
||||||
|
'pkgconfig(libnl-3.0)' \
|
||||||
|
'pkgconfig(libnl-genl-3.0)' \
|
||||||
|
'pkgconfig(libpulse)' \
|
||||||
|
'pkgconfig(libudev)' \
|
||||||
|
'pkgconfig(playerctl)' \
|
||||||
|
'pkgconfig(pugixml)' \
|
||||||
|
'pkgconfig(sigc++-2.0)' \
|
||||||
|
'pkgconfig(spdlog)' \
|
||||||
|
'pkgconfig(upower-glib)' \
|
||||||
|
'pkgconfig(wayland-client)' \
|
||||||
|
'pkgconfig(wayland-cursor)' \
|
||||||
|
'pkgconfig(wayland-protocols)' \
|
||||||
|
'pkgconfig(wireplumber-0.4)' \
|
||||||
|
'pkgconfig(xkbregistry)' && \
|
||||||
dnf clean all -y
|
dnf clean all -y
|
||||||
|
11
Dockerfiles/gentoo
Normal file
11
Dockerfiles/gentoo
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# vim: ft=Dockerfile
|
||||||
|
|
||||||
|
FROM gentoo/stage3:latest
|
||||||
|
|
||||||
|
RUN export FEATURES="-ipc-sandbox -network-sandbox -pid-sandbox -sandbox -usersandbox" && \
|
||||||
|
emerge --sync && \
|
||||||
|
eselect news read --quiet new 1>/dev/null 2>&1 && \
|
||||||
|
emerge --verbose --update --deep --with-bdeps=y --backtrack=30 --newuse @world && \
|
||||||
|
USE="wayland gtk3 gtk -doc X" emerge dev-vcs/git dev-libs/wayland dev-libs/wayland-protocols =dev-cpp/gtkmm-3.24.6 x11-libs/libxkbcommon \
|
||||||
|
x11-libs/gtk+:3 dev-libs/libdbusmenu dev-libs/libnl sys-power/upower media-libs/libpulse dev-libs/libevdev media-libs/libmpdclient \
|
||||||
|
media-sound/sndio gui-libs/gtk-layer-shell app-text/scdoc media-sound/playerctl dev-libs/iniparser
|
@ -6,4 +6,4 @@ RUN zypper -n up && \
|
|||||||
zypper addrepo https://download.opensuse.org/repositories/X11:Wayland/openSUSE_Tumbleweed/X11:Wayland.repo | echo 'a' && \
|
zypper addrepo https://download.opensuse.org/repositories/X11:Wayland/openSUSE_Tumbleweed/X11:Wayland.repo | echo 'a' && \
|
||||||
zypper -n refresh && \
|
zypper -n refresh && \
|
||||||
zypper -n install -t pattern devel_C_C++ && \
|
zypper -n install -t pattern devel_C_C++ && \
|
||||||
zypper -n install git meson clang libinput10 libinput-devel pugixml-devel libwayland-client0 libwayland-cursor0 wayland-protocols-devel wayland-devel Mesa-libEGL-devel Mesa-libGLESv2-devel libgbm-devel libxkbcommon-devel libudev-devel libpixman-1-0-devel gtkmm3-devel jsoncpp-devel libxkbregistry-devel scdoc
|
zypper -n install git meson clang libinput10 libinput-devel pugixml-devel libwayland-client0 libwayland-cursor0 wayland-protocols-devel wayland-devel Mesa-libEGL-devel Mesa-libGLESv2-devel libgbm-devel libxkbcommon-devel libudev-devel libpixman-1-0-devel gtkmm3-devel jsoncpp-devel libxkbregistry-devel scdoc playerctl-devel
|
||||||
|
4
Makefile
4
Makefile
@ -19,5 +19,9 @@ run: build
|
|||||||
debug-run: build-debug
|
debug-run: build-debug
|
||||||
./build/waybar --log-level debug
|
./build/waybar --log-level debug
|
||||||
|
|
||||||
|
test:
|
||||||
|
meson test -C build --no-rebuild --verbose --suite waybar
|
||||||
|
.PHONY: test
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
@ -7,18 +7,24 @@
|
|||||||
|
|
||||||
#### Current features
|
#### Current features
|
||||||
- Sway (Workspaces, Binding mode, Focused window name)
|
- Sway (Workspaces, Binding mode, Focused window name)
|
||||||
|
- River (Mapping mode, Tags, Focused window name)
|
||||||
|
- Hyprland (Focused window name)
|
||||||
|
- DWL (Tags) [requires dwl ipc patch](https://github.com/djpohly/dwl/wiki/ipc)
|
||||||
- Tray [#21](https://github.com/Alexays/Waybar/issues/21)
|
- Tray [#21](https://github.com/Alexays/Waybar/issues/21)
|
||||||
- Local time
|
- Local time
|
||||||
- Battery
|
- Battery
|
||||||
|
- UPower
|
||||||
- Network
|
- Network
|
||||||
- Bluetooth
|
- Bluetooth
|
||||||
- Pulseaudio
|
- Pulseaudio
|
||||||
|
- Wireplumber
|
||||||
- Disk
|
- Disk
|
||||||
- Memory
|
- Memory
|
||||||
- Cpu load average
|
- Cpu load average
|
||||||
- Temperature
|
- Temperature
|
||||||
- MPD
|
- MPD
|
||||||
- Custom scripts
|
- Custom scripts
|
||||||
|
- Custom image
|
||||||
- Multiple output configuration
|
- Multiple output configuration
|
||||||
- And many more customizations
|
- And many more customizations
|
||||||
|
|
||||||
@ -70,6 +76,7 @@ libmpdclient [MPD module]
|
|||||||
libsndio [sndio module]
|
libsndio [sndio module]
|
||||||
libevdev [KeyboardState module]
|
libevdev [KeyboardState module]
|
||||||
xkbregistry
|
xkbregistry
|
||||||
|
upower [UPower battery module]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Build dependencies**
|
**Build dependencies**
|
||||||
@ -103,6 +110,7 @@ sudo apt install \
|
|||||||
libspdlog-dev \
|
libspdlog-dev \
|
||||||
libwayland-dev \
|
libwayland-dev \
|
||||||
scdoc \
|
scdoc \
|
||||||
|
upower \
|
||||||
libxkbregistry-dev
|
libxkbregistry-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
94
flake.lock
generated
Normal file
94
flake.lock
generated
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"devshell": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667210711,
|
||||||
|
"narHash": "sha256-IoErjXZAkzYWHEpQqwu/DeRNJGFdR7X2OGbkhMqMrpw=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"rev": "96a9dd12b8a447840cc246e17a47b81a4268bba7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "devshell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642700792,
|
||||||
|
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643381941,
|
||||||
|
"narHash": "sha256-pHTwvnN4tTsEKkWlXQ8JMY423epos8wUOhthpwJjtpc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "5efc8ca954272c4376ac929f4c5ffefcc20551d5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1670152712,
|
||||||
|
"narHash": "sha256-LJttwIvJqsZIj8u1LxVRv82vwUtkzVqQVi7Wb8gxPS4=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "14ddeaebcbe9a25748221d1d7ecdf98e20e2325e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"devshell": "devshell",
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
65
flake.nix
Normal file
65
flake.nix
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
description = "Highly customizable Wayland bar for Sway and Wlroots based compositors.";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
devshell.url = "github:numtide/devshell";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, flake-utils, devshell, nixpkgs }:
|
||||||
|
let
|
||||||
|
inherit (nixpkgs) lib;
|
||||||
|
genSystems = lib.genAttrs [
|
||||||
|
"x86_64-linux"
|
||||||
|
];
|
||||||
|
|
||||||
|
pkgsFor = genSystems (system:
|
||||||
|
import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
});
|
||||||
|
|
||||||
|
mkDate = longDate: (lib.concatStringsSep "-" [
|
||||||
|
(builtins.substring 0 4 longDate)
|
||||||
|
(builtins.substring 4 2 longDate)
|
||||||
|
(builtins.substring 6 2 longDate)
|
||||||
|
]);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
overlays.default = _: prev: rec {
|
||||||
|
waybar = prev.callPackage ./nix/default.nix {
|
||||||
|
version = "0.9.16" + "+date=" + (mkDate (self.lastModifiedDate or "19700101")) + "_" + (self.shortRev or "dirty");
|
||||||
|
};
|
||||||
|
};
|
||||||
|
packages = genSystems
|
||||||
|
(system:
|
||||||
|
(self.overlays.default null pkgsFor.${system})
|
||||||
|
// {
|
||||||
|
default = self.packages.${system}.waybar;
|
||||||
|
});
|
||||||
|
} //
|
||||||
|
flake-utils.lib.eachDefaultSystem (system: {
|
||||||
|
devShell =
|
||||||
|
let pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
|
||||||
|
overlays = [ devshell.overlay ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.devshell.mkShell {
|
||||||
|
imports = [ "${pkgs.devshell.extraModulesDir}/language/c.nix" ];
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
package = pkgs.devshell.cli;
|
||||||
|
help = "Per project developer environments";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
devshell.packages = with pkgs; [
|
||||||
|
clang-tools
|
||||||
|
gdb
|
||||||
|
];
|
||||||
|
language.c.libraries = with pkgs; [
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
@ -13,7 +13,7 @@ class AIconLabel : public ALabel {
|
|||||||
const std::string &format, uint16_t interval = 0, bool ellipsize = false,
|
const std::string &format, uint16_t interval = 0, bool ellipsize = false,
|
||||||
bool enable_click = false, bool enable_scroll = false);
|
bool enable_click = false, bool enable_scroll = false);
|
||||||
virtual ~AIconLabel() = default;
|
virtual ~AIconLabel() = default;
|
||||||
virtual auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Gtk::Image image_;
|
Gtk::Image image_;
|
||||||
|
@ -14,7 +14,7 @@ class ALabel : public AModule {
|
|||||||
uint16_t interval = 0, bool ellipsize = false, bool enable_click = false,
|
uint16_t interval = 0, bool ellipsize = false, bool enable_click = false,
|
||||||
bool enable_scroll = false);
|
bool enable_scroll = false);
|
||||||
virtual ~ALabel() = default;
|
virtual ~ALabel() = default;
|
||||||
virtual auto update() -> void;
|
auto update() -> void override;
|
||||||
virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0);
|
virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0);
|
||||||
virtual std::string getIcon(uint16_t, const std::vector<std::string> &alts, uint16_t max = 0);
|
virtual std::string getIcon(uint16_t, const std::vector<std::string> &alts, uint16_t max = 0);
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ class ALabel : public AModule {
|
|||||||
bool alt_ = false;
|
bool alt_ = false;
|
||||||
std::string default_format_;
|
std::string default_format_;
|
||||||
|
|
||||||
virtual bool handleToggle(GdkEventButton *const &e);
|
bool handleToggle(GdkEventButton *const &e) override;
|
||||||
virtual std::string getState(uint8_t value, bool lesser = false);
|
virtual std::string getState(uint8_t value, bool lesser = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,15 +11,20 @@ namespace waybar {
|
|||||||
|
|
||||||
class AModule : public IModule {
|
class AModule : public IModule {
|
||||||
public:
|
public:
|
||||||
AModule(const Json::Value &, const std::string &, const std::string &, bool enable_click = false,
|
|
||||||
bool enable_scroll = false);
|
|
||||||
virtual ~AModule();
|
virtual ~AModule();
|
||||||
virtual auto update() -> void;
|
auto update() -> void override;
|
||||||
virtual operator Gtk::Widget &();
|
virtual auto refresh(int) -> void{};
|
||||||
|
operator Gtk::Widget &() override;
|
||||||
|
auto doAction(const std::string &name) -> void override;
|
||||||
|
|
||||||
Glib::Dispatcher dp;
|
Glib::Dispatcher dp;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// Don't need to make an object directly
|
||||||
|
// Derived classes are able to use it
|
||||||
|
AModule(const Json::Value &, const std::string &, const std::string &, bool enable_click = false,
|
||||||
|
bool enable_scroll = false);
|
||||||
|
|
||||||
enum SCROLL_DIR { NONE, UP, DOWN, LEFT, RIGHT };
|
enum SCROLL_DIR { NONE, UP, DOWN, LEFT, RIGHT };
|
||||||
|
|
||||||
SCROLL_DIR getScrollDir(GdkEventScroll *e);
|
SCROLL_DIR getScrollDir(GdkEventScroll *e);
|
||||||
@ -36,6 +41,7 @@ class AModule : public IModule {
|
|||||||
std::vector<int> pid_;
|
std::vector<int> pid_;
|
||||||
gdouble distance_scrolled_y_;
|
gdouble distance_scrolled_y_;
|
||||||
gdouble distance_scrolled_x_;
|
gdouble distance_scrolled_x_;
|
||||||
|
std::map<std::string, std::string> eventActionMap_;
|
||||||
static const inline std::map<std::pair<uint, GdkEventType>, std::string> eventMap_{
|
static const inline std::map<std::pair<uint, GdkEventType>, std::string> eventMap_{
|
||||||
{std::make_pair(1, GdkEventType::GDK_BUTTON_PRESS), "on-click"},
|
{std::make_pair(1, GdkEventType::GDK_BUTTON_PRESS), "on-click"},
|
||||||
{std::make_pair(1, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click"},
|
{std::make_pair(1, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click"},
|
||||||
@ -48,10 +54,10 @@ class AModule : public IModule {
|
|||||||
{std::make_pair(3, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-right"},
|
{std::make_pair(3, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-right"},
|
||||||
{std::make_pair(8, GdkEventType::GDK_BUTTON_PRESS), "on-click-backward"},
|
{std::make_pair(8, GdkEventType::GDK_BUTTON_PRESS), "on-click-backward"},
|
||||||
{std::make_pair(8, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-backward"},
|
{std::make_pair(8, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-backward"},
|
||||||
{std::make_pair(8, GdkEventType::GDK_2BUTTON_PRESS), "on-triple-click-backward"},
|
{std::make_pair(8, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-backward"},
|
||||||
{std::make_pair(9, GdkEventType::GDK_BUTTON_PRESS), "on-click-forward"},
|
{std::make_pair(9, GdkEventType::GDK_BUTTON_PRESS), "on-click-forward"},
|
||||||
{std::make_pair(9, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-forward"},
|
{std::make_pair(9, GdkEventType::GDK_2BUTTON_PRESS), "on-double-click-forward"},
|
||||||
{std::make_pair(9, GdkEventType::GDK_2BUTTON_PRESS), "on-triple-click-forward"}};
|
{std::make_pair(9, GdkEventType::GDK_3BUTTON_PRESS), "on-triple-click-forward"}};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace waybar
|
} // namespace waybar
|
||||||
|
@ -9,6 +9,7 @@ class IModule {
|
|||||||
virtual ~IModule() = default;
|
virtual ~IModule() = default;
|
||||||
virtual auto update() -> void = 0;
|
virtual auto update() -> void = 0;
|
||||||
virtual operator Gtk::Widget&() = 0;
|
virtual operator Gtk::Widget&() = 0;
|
||||||
|
virtual auto doAction(const std::string& name) -> void = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace waybar
|
} // namespace waybar
|
||||||
|
@ -14,6 +14,7 @@ namespace waybar {
|
|||||||
class Config {
|
class Config {
|
||||||
public:
|
public:
|
||||||
static const std::vector<std::string> CONFIG_DIRS;
|
static const std::vector<std::string> CONFIG_DIRS;
|
||||||
|
static const char *CONFIG_PATH_ENV;
|
||||||
|
|
||||||
/* Try to find any of provided names in the supported set of config directories */
|
/* Try to find any of provided names in the supported set of config directories */
|
||||||
static std::optional<std::string> findConfigPath(
|
static std::optional<std::string> findConfigPath(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
#ifdef HAVE_LIBDATE
|
#if defined(HAVE_CHRONO_TIMEZONES) || defined(HAVE_LIBDATE)
|
||||||
#include "modules/clock.hpp"
|
#include "modules/clock.hpp"
|
||||||
#else
|
#else
|
||||||
#include "modules/simpleclock.hpp"
|
#include "modules/simpleclock.hpp"
|
||||||
@ -9,6 +9,7 @@
|
|||||||
#ifdef HAVE_SWAY
|
#ifdef HAVE_SWAY
|
||||||
#include "modules/sway/language.hpp"
|
#include "modules/sway/language.hpp"
|
||||||
#include "modules/sway/mode.hpp"
|
#include "modules/sway/mode.hpp"
|
||||||
|
#include "modules/sway/scratchpad.hpp"
|
||||||
#include "modules/sway/window.hpp"
|
#include "modules/sway/window.hpp"
|
||||||
#include "modules/sway/workspaces.hpp"
|
#include "modules/sway/workspaces.hpp"
|
||||||
#endif
|
#endif
|
||||||
@ -17,10 +18,21 @@
|
|||||||
#include "modules/wlr/workspace_manager.hpp"
|
#include "modules/wlr/workspace_manager.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_RIVER
|
#ifdef HAVE_RIVER
|
||||||
|
#include "modules/river/layout.hpp"
|
||||||
|
#include "modules/river/mode.hpp"
|
||||||
#include "modules/river/tags.hpp"
|
#include "modules/river/tags.hpp"
|
||||||
#include "modules/river/window.hpp"
|
#include "modules/river/window.hpp"
|
||||||
#endif
|
#endif
|
||||||
#if defined(__linux__) && !defined(NO_FILESYSTEM)
|
#ifdef HAVE_DWL
|
||||||
|
#include "modules/dwl/tags.hpp"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_HYPRLAND
|
||||||
|
#include "modules/hyprland/backend.hpp"
|
||||||
|
#include "modules/hyprland/language.hpp"
|
||||||
|
#include "modules/hyprland/submap.hpp"
|
||||||
|
#include "modules/hyprland/window.hpp"
|
||||||
|
#endif
|
||||||
|
#if defined(__FreeBSD__) || (defined(__linux__) && !defined(NO_FILESYSTEM))
|
||||||
#include "modules/battery.hpp"
|
#include "modules/battery.hpp"
|
||||||
#endif
|
#endif
|
||||||
#if defined(HAVE_CPU_LINUX) || defined(HAVE_CPU_BSD)
|
#if defined(HAVE_CPU_LINUX) || defined(HAVE_CPU_BSD)
|
||||||
@ -34,6 +46,9 @@
|
|||||||
#ifdef HAVE_DBUSMENU
|
#ifdef HAVE_DBUSMENU
|
||||||
#include "modules/sni/tray.hpp"
|
#include "modules/sni/tray.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_MPRIS
|
||||||
|
#include "modules/mpris/mpris.hpp"
|
||||||
|
#endif
|
||||||
#ifdef HAVE_LIBNL
|
#ifdef HAVE_LIBNL
|
||||||
#include "modules/network.hpp"
|
#include "modules/network.hpp"
|
||||||
#endif
|
#endif
|
||||||
@ -62,9 +77,20 @@
|
|||||||
#include "modules/bluetooth.hpp"
|
#include "modules/bluetooth.hpp"
|
||||||
#include "modules/inhibitor.hpp"
|
#include "modules/inhibitor.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_LIBJACK
|
||||||
|
#include "modules/jack.hpp"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_LIBWIREPLUMBER
|
||||||
|
#include "modules/wireplumber.hpp"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_LIBCAVA
|
||||||
|
#include "modules/cava.hpp"
|
||||||
|
#endif
|
||||||
#include "bar.hpp"
|
#include "bar.hpp"
|
||||||
#include "modules/custom.hpp"
|
#include "modules/custom.hpp"
|
||||||
|
#include "modules/image.hpp"
|
||||||
#include "modules/temperature.hpp"
|
#include "modules/temperature.hpp"
|
||||||
|
#include "modules/user.hpp"
|
||||||
|
|
||||||
namespace waybar {
|
namespace waybar {
|
||||||
|
|
||||||
|
@ -12,10 +12,10 @@ namespace waybar {
|
|||||||
|
|
||||||
class Group : public AModule {
|
class Group : public AModule {
|
||||||
public:
|
public:
|
||||||
Group(const std::string&, const Bar&, const Json::Value&);
|
Group(const std::string&, const std::string&, const Json::Value&, bool);
|
||||||
~Group() = default;
|
~Group() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
operator Gtk::Widget&();
|
operator Gtk::Widget&() override;
|
||||||
Gtk::Box box;
|
Gtk::Box box;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "ALabel.hpp"
|
#include "ALabel.hpp"
|
||||||
|
#include "giomm/dbusproxy.h"
|
||||||
#include "util/json.hpp"
|
#include "util/json.hpp"
|
||||||
#include "util/sleeper_thread.hpp"
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
@ -18,12 +19,14 @@ class Backlight : public ALabel {
|
|||||||
class BacklightDev {
|
class BacklightDev {
|
||||||
public:
|
public:
|
||||||
BacklightDev() = default;
|
BacklightDev() = default;
|
||||||
BacklightDev(std::string name, int actual, int max);
|
BacklightDev(std::string name, int actual, int max, bool powered);
|
||||||
std::string_view name() const;
|
std::string_view name() const;
|
||||||
int get_actual() const;
|
int get_actual() const;
|
||||||
void set_actual(int actual);
|
void set_actual(int actual);
|
||||||
int get_max() const;
|
int get_max() const;
|
||||||
void set_max(int max);
|
void set_max(int max);
|
||||||
|
bool get_powered() const;
|
||||||
|
void set_powered(bool powered);
|
||||||
friend inline bool operator==(const BacklightDev &lhs, const BacklightDev &rhs) {
|
friend inline bool operator==(const BacklightDev &lhs, const BacklightDev &rhs) {
|
||||||
return lhs.name_ == rhs.name_ && lhs.actual_ == rhs.actual_ && lhs.max_ == rhs.max_;
|
return lhs.name_ == rhs.name_ && lhs.actual_ == rhs.actual_ && lhs.max_ == rhs.max_;
|
||||||
}
|
}
|
||||||
@ -32,12 +35,13 @@ class Backlight : public ALabel {
|
|||||||
std::string name_;
|
std::string name_;
|
||||||
int actual_ = 1;
|
int actual_ = 1;
|
||||||
int max_ = 1;
|
int max_ = 1;
|
||||||
|
bool powered_ = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Backlight(const std::string &, const Json::Value &);
|
Backlight(const std::string &, const Json::Value &);
|
||||||
~Backlight();
|
virtual ~Backlight();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <class ForwardIt>
|
template <class ForwardIt>
|
||||||
@ -47,6 +51,8 @@ class Backlight : public ALabel {
|
|||||||
template <class ForwardIt, class Inserter>
|
template <class ForwardIt, class Inserter>
|
||||||
static void enumerate_devices(ForwardIt first, ForwardIt last, Inserter inserter, udev *udev);
|
static void enumerate_devices(ForwardIt first, ForwardIt last, Inserter inserter, udev *udev);
|
||||||
|
|
||||||
|
bool handleScroll(GdkEventScroll *e) override;
|
||||||
|
|
||||||
const std::string preferred_device_;
|
const std::string preferred_device_;
|
||||||
static constexpr int EPOLL_MAX_EVENTS = 16;
|
static constexpr int EPOLL_MAX_EVENTS = 16;
|
||||||
|
|
||||||
@ -57,5 +63,7 @@ class Backlight : public ALabel {
|
|||||||
std::vector<BacklightDev> devices_;
|
std::vector<BacklightDev> devices_;
|
||||||
// thread must destruct before shared data
|
// thread must destruct before shared data
|
||||||
util::SleeperThread udev_thread_;
|
util::SleeperThread udev_thread_;
|
||||||
|
|
||||||
|
Glib::RefPtr<Gio::DBus::Proxy> login_proxy_;
|
||||||
};
|
};
|
||||||
} // namespace waybar::modules
|
} // namespace waybar::modules
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#endif
|
#endif
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
#if defined(__linux__)
|
||||||
#include <sys/inotify.h>
|
#include <sys/inotify.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@ -27,8 +29,8 @@ namespace fs = std::filesystem;
|
|||||||
class Battery : public ALabel {
|
class Battery : public ALabel {
|
||||||
public:
|
public:
|
||||||
Battery(const std::string&, const Json::Value&);
|
Battery(const std::string&, const Json::Value&);
|
||||||
~Battery();
|
virtual ~Battery();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static inline const fs::path data_dir_ = "/sys/class/power_supply/";
|
static inline const fs::path data_dir_ = "/sys/class/power_supply/";
|
||||||
|
@ -45,8 +45,8 @@ class Bluetooth : public ALabel {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Bluetooth(const std::string&, const Json::Value&);
|
Bluetooth(const std::string&, const Json::Value&);
|
||||||
~Bluetooth() = default;
|
virtual ~Bluetooth() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static auto onInterfaceAddedOrRemoved(GDBusObjectManager*, GDBusObject*, GDBusInterface*,
|
static auto onInterfaceAddedOrRemoved(GDBusObjectManager*, GDBusObject*, GDBusInterface*,
|
||||||
|
46
include/modules/cava.hpp
Normal file
46
include/modules/cava.hpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <cava/common.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace waybar::modules {
|
||||||
|
using namespace std::literals::chrono_literals;
|
||||||
|
|
||||||
|
class Cava final : public ALabel {
|
||||||
|
public:
|
||||||
|
Cava(const std::string&, const Json::Value&);
|
||||||
|
virtual ~Cava();
|
||||||
|
auto update() -> void override;
|
||||||
|
auto doAction(const std::string& name) -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
util::SleeperThread thread_;
|
||||||
|
util::SleeperThread thread_fetch_input_;
|
||||||
|
|
||||||
|
struct error_s error_ {}; // cava errors
|
||||||
|
struct config_params prm_ {}; // cava parameters
|
||||||
|
struct audio_raw audio_raw_ {}; // cava handled raw audio data(is based on audio_data)
|
||||||
|
struct audio_data audio_data_ {}; // cava audio data
|
||||||
|
struct cava_plan* plan_; //{new cava_plan{}};
|
||||||
|
// Cava API to read audio source
|
||||||
|
ptr input_source_;
|
||||||
|
// Delay to handle audio source
|
||||||
|
std::chrono::milliseconds frame_time_milsec_{1s};
|
||||||
|
// Text to display
|
||||||
|
std::string text_{""};
|
||||||
|
int rePaint_{1};
|
||||||
|
std::chrono::seconds fetch_input_delay_{4};
|
||||||
|
std::chrono::seconds suspend_silence_delay_{0};
|
||||||
|
bool silence_{false};
|
||||||
|
int sleep_counter_{0};
|
||||||
|
// Cava method
|
||||||
|
void pause_resume();
|
||||||
|
// ModuleActionMap
|
||||||
|
static inline std::map<const std::string, void (waybar::modules::Cava::*const)()> actionMap_{
|
||||||
|
{"mode", &waybar::modules::Cava::pause_resume}};
|
||||||
|
};
|
||||||
|
} // namespace waybar::modules
|
@ -1,45 +1,72 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <date/tz.h>
|
|
||||||
|
|
||||||
#include "ALabel.hpp"
|
#include "ALabel.hpp"
|
||||||
|
#include "util/date.hpp"
|
||||||
#include "util/sleeper_thread.hpp"
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
namespace waybar {
|
namespace waybar::modules {
|
||||||
|
|
||||||
struct waybar_time;
|
|
||||||
|
|
||||||
namespace modules {
|
|
||||||
|
|
||||||
const std::string kCalendarPlaceholder = "calendar";
|
const std::string kCalendarPlaceholder = "calendar";
|
||||||
const std::string KTimezonedTimeListPlaceholder = "timezoned_time_list";
|
const std::string KTimezonedTimeListPlaceholder = "timezoned_time_list";
|
||||||
|
|
||||||
class Clock : public ALabel {
|
enum class WeeksSide {
|
||||||
|
LEFT,
|
||||||
|
RIGHT,
|
||||||
|
HIDDEN,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class CldMode { MONTH, YEAR };
|
||||||
|
|
||||||
|
class Clock final : public ALabel {
|
||||||
public:
|
public:
|
||||||
Clock(const std::string&, const Json::Value&);
|
Clock(const std::string&, const Json::Value&);
|
||||||
~Clock() = default;
|
virtual ~Clock() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
auto doAction(const std::string& name) -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
util::SleeperThread thread_;
|
util::SleeperThread thread_;
|
||||||
std::locale locale_;
|
std::locale locale_;
|
||||||
std::vector<const date::time_zone*> time_zones_;
|
std::vector<const date::time_zone*> time_zones_;
|
||||||
int current_time_zone_idx_;
|
int current_time_zone_idx_;
|
||||||
date::year_month_day cached_calendar_ymd_ = date::January / 1 / 0;
|
|
||||||
std::string cached_calendar_text_;
|
|
||||||
bool is_calendar_in_tooltip_;
|
bool is_calendar_in_tooltip_;
|
||||||
bool is_timezoned_list_in_tooltip_;
|
bool is_timezoned_list_in_tooltip_;
|
||||||
|
|
||||||
bool handleScroll(GdkEventScroll* e);
|
|
||||||
|
|
||||||
auto calendar_text(const waybar_time& wtime) -> std::string;
|
|
||||||
auto weekdays_header(const date::weekday& first_dow, std::ostream& os) -> void;
|
|
||||||
auto first_day_of_week() -> date::weekday;
|
auto first_day_of_week() -> date::weekday;
|
||||||
const date::time_zone* current_timezone();
|
const date::time_zone* current_timezone();
|
||||||
auto print_iso_weeknum(std::ostream& os, int weeknum) -> void;
|
|
||||||
bool is_timezone_fixed();
|
bool is_timezone_fixed();
|
||||||
auto timezones_text(std::chrono::system_clock::time_point* now) -> std::string;
|
auto timezones_text(std::chrono::system_clock::time_point* now) -> std::string;
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace modules
|
/*Calendar properties*/
|
||||||
} // namespace waybar
|
WeeksSide cldWPos_{WeeksSide::HIDDEN};
|
||||||
|
std::map<int, std::string const> fmtMap_;
|
||||||
|
CldMode cldMode_{CldMode::MONTH};
|
||||||
|
uint cldMonCols_{3}; // Count of the month in the row
|
||||||
|
int cldMonColLen_{20}; // Length of the month column
|
||||||
|
int cldWnLen_{3}; // Length of the week number
|
||||||
|
date::year_month_day cldYearShift_;
|
||||||
|
date::year_month cldMonShift_;
|
||||||
|
date::months cldCurrShift_{0};
|
||||||
|
date::months cldShift_{0};
|
||||||
|
std::string cldYearCached_{};
|
||||||
|
std::string cldMonCached_{};
|
||||||
|
date::day cldBaseDay_{0};
|
||||||
|
/*Calendar functions*/
|
||||||
|
auto get_calendar(const date::zoned_seconds& now, const date::zoned_seconds& wtime)
|
||||||
|
-> std::string;
|
||||||
|
/*Clock actions*/
|
||||||
|
void cldModeSwitch();
|
||||||
|
void cldShift_up();
|
||||||
|
void cldShift_down();
|
||||||
|
void tz_up();
|
||||||
|
void tz_down();
|
||||||
|
|
||||||
|
// ModuleActionMap
|
||||||
|
static inline std::map<const std::string, void (waybar::modules::Clock::*const)()> actionMap_{
|
||||||
|
{"mode", &waybar::modules::Clock::cldModeSwitch},
|
||||||
|
{"shift_up", &waybar::modules::Clock::cldShift_up},
|
||||||
|
{"shift_down", &waybar::modules::Clock::cldShift_down},
|
||||||
|
{"tz_up", &waybar::modules::Clock::tz_up},
|
||||||
|
{"tz_down", &waybar::modules::Clock::tz_down}};
|
||||||
|
};
|
||||||
|
} // namespace waybar::modules
|
||||||
|
@ -17,8 +17,8 @@ namespace waybar::modules {
|
|||||||
class Cpu : public ALabel {
|
class Cpu : public ALabel {
|
||||||
public:
|
public:
|
||||||
Cpu(const std::string&, const Json::Value&);
|
Cpu(const std::string&, const Json::Value&);
|
||||||
~Cpu() = default;
|
virtual ~Cpu() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double getCpuLoad();
|
double getCpuLoad();
|
||||||
|
@ -15,9 +15,9 @@ namespace waybar::modules {
|
|||||||
class Custom : public ALabel {
|
class Custom : public ALabel {
|
||||||
public:
|
public:
|
||||||
Custom(const std::string&, const std::string&, const Json::Value&);
|
Custom(const std::string&, const std::string&, const Json::Value&);
|
||||||
~Custom();
|
virtual ~Custom();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
void refresh(int /*signal*/);
|
void refresh(int /*signal*/) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void delayWorker();
|
void delayWorker();
|
||||||
@ -25,11 +25,12 @@ class Custom : public ALabel {
|
|||||||
void parseOutputRaw();
|
void parseOutputRaw();
|
||||||
void parseOutputJson();
|
void parseOutputJson();
|
||||||
void handleEvent();
|
void handleEvent();
|
||||||
bool handleScroll(GdkEventScroll* e);
|
bool handleScroll(GdkEventScroll* e) override;
|
||||||
bool handleToggle(GdkEventButton* const& e);
|
bool handleToggle(GdkEventButton* const& e) override;
|
||||||
|
|
||||||
const std::string name_;
|
const std::string name_;
|
||||||
std::string text_;
|
std::string text_;
|
||||||
|
std::string id_;
|
||||||
std::string alt_;
|
std::string alt_;
|
||||||
std::string tooltip_;
|
std::string tooltip_;
|
||||||
std::vector<std::string> class_;
|
std::vector<std::string> class_;
|
||||||
|
@ -14,8 +14,8 @@ namespace waybar::modules {
|
|||||||
class Disk : public ALabel {
|
class Disk : public ALabel {
|
||||||
public:
|
public:
|
||||||
Disk(const std::string&, const Json::Value&);
|
Disk(const std::string&, const Json::Value&);
|
||||||
~Disk() = default;
|
virtual ~Disk() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
util::SleeperThread thread_;
|
util::SleeperThread thread_;
|
||||||
|
34
include/modules/dwl/tags.hpp
Normal file
34
include/modules/dwl/tags.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtkmm/button.h>
|
||||||
|
#include <wayland-client.h>
|
||||||
|
|
||||||
|
#include "AModule.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "dwl-ipc-unstable-v2-client-protocol.h"
|
||||||
|
#include "xdg-output-unstable-v1-client-protocol.h"
|
||||||
|
|
||||||
|
namespace waybar::modules::dwl {
|
||||||
|
|
||||||
|
class Tags : public waybar::AModule {
|
||||||
|
public:
|
||||||
|
Tags(const std::string &, const waybar::Bar &, const Json::Value &);
|
||||||
|
virtual ~Tags();
|
||||||
|
|
||||||
|
// Handlers for wayland events
|
||||||
|
void handle_view_tags(uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused);
|
||||||
|
|
||||||
|
void handle_primary_clicked(uint32_t tag);
|
||||||
|
bool handle_button_press(GdkEventButton *event_button, uint32_t tag);
|
||||||
|
|
||||||
|
struct zdwl_ipc_manager_v2 *status_manager_;
|
||||||
|
struct wl_seat *seat_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const waybar::Bar &bar_;
|
||||||
|
Gtk::Box box_;
|
||||||
|
std::vector<Gtk::Button> buttons_;
|
||||||
|
struct zdwl_ipc_output_v2 *output_status_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace waybar::modules::dwl */
|
@ -18,8 +18,8 @@ namespace waybar::modules {
|
|||||||
class Gamemode : public AModule {
|
class Gamemode : public AModule {
|
||||||
public:
|
public:
|
||||||
Gamemode(const std::string &, const Json::Value &);
|
Gamemode(const std::string &, const Json::Value &);
|
||||||
~Gamemode();
|
virtual ~Gamemode();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string DEFAULT_ICON_NAME = "input-gaming-symbolic";
|
const std::string DEFAULT_ICON_NAME = "input-gaming-symbolic";
|
||||||
@ -39,7 +39,7 @@ class Gamemode : public AModule {
|
|||||||
const Glib::VariantContainerBase &arguments);
|
const Glib::VariantContainerBase &arguments);
|
||||||
|
|
||||||
void getData();
|
void getData();
|
||||||
bool handleToggle(GdkEventButton *const &);
|
bool handleToggle(GdkEventButton *const &) override;
|
||||||
|
|
||||||
// Config
|
// Config
|
||||||
std::string format = DEFAULT_FORMAT;
|
std::string format = DEFAULT_FORMAT;
|
||||||
|
36
include/modules/hyprland/backend.hpp
Normal file
36
include/modules/hyprland/backend.hpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <functional>
|
||||||
|
#include <list>
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
|
#include <string>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
namespace waybar::modules::hyprland {
|
||||||
|
|
||||||
|
class EventHandler {
|
||||||
|
public:
|
||||||
|
virtual void onEvent(const std::string& ev) = 0;
|
||||||
|
virtual ~EventHandler() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IPC {
|
||||||
|
public:
|
||||||
|
IPC() { startIPC(); }
|
||||||
|
|
||||||
|
void registerForIPC(const std::string&, EventHandler*);
|
||||||
|
void unregisterForIPC(EventHandler*);
|
||||||
|
|
||||||
|
std::string getSocket1Reply(const std::string& rq);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void startIPC();
|
||||||
|
void parseIPC(const std::string&);
|
||||||
|
|
||||||
|
std::mutex callbackMutex;
|
||||||
|
std::list<std::pair<std::string, EventHandler*>> callbacks;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline std::unique_ptr<IPC> gIPC;
|
||||||
|
inline bool modulesReady = false;
|
||||||
|
}; // namespace waybar::modules::hyprland
|
38
include/modules/hyprland/language.hpp
Normal file
38
include/modules/hyprland/language.hpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "modules/hyprland/backend.hpp"
|
||||||
|
#include "util/json.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules::hyprland {
|
||||||
|
|
||||||
|
class Language : public waybar::ALabel, public EventHandler {
|
||||||
|
public:
|
||||||
|
Language(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
|
virtual ~Language();
|
||||||
|
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void onEvent(const std::string&) override;
|
||||||
|
|
||||||
|
void initLanguage();
|
||||||
|
|
||||||
|
struct Layout {
|
||||||
|
std::string full_name;
|
||||||
|
std::string short_name;
|
||||||
|
std::string variant;
|
||||||
|
std::string short_description;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto getLayout(const std::string&) -> Layout;
|
||||||
|
|
||||||
|
std::mutex mutex_;
|
||||||
|
const Bar& bar_;
|
||||||
|
util::JsonParser parser_;
|
||||||
|
|
||||||
|
Layout layout_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules::hyprland
|
26
include/modules/hyprland/submap.hpp
Normal file
26
include/modules/hyprland/submap.hpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "modules/hyprland/backend.hpp"
|
||||||
|
#include "util/json.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules::hyprland {
|
||||||
|
|
||||||
|
class Submap : public waybar::ALabel, public EventHandler {
|
||||||
|
public:
|
||||||
|
Submap(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
|
virtual ~Submap();
|
||||||
|
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void onEvent(const std::string&) override;
|
||||||
|
|
||||||
|
std::mutex mutex_;
|
||||||
|
const Bar& bar_;
|
||||||
|
util::JsonParser parser_;
|
||||||
|
std::string submap_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules::hyprland
|
31
include/modules/hyprland/window.hpp
Normal file
31
include/modules/hyprland/window.hpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "modules/hyprland/backend.hpp"
|
||||||
|
#include "util/json.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules::hyprland {
|
||||||
|
|
||||||
|
class Window : public waybar::ALabel, public EventHandler {
|
||||||
|
public:
|
||||||
|
Window(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
|
virtual ~Window();
|
||||||
|
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int getActiveWorkspaceID(std::string);
|
||||||
|
std::string getLastWindowTitle(int);
|
||||||
|
void onEvent(const std::string&) override;
|
||||||
|
|
||||||
|
bool separate_outputs;
|
||||||
|
std::mutex mutex_;
|
||||||
|
const Bar& bar_;
|
||||||
|
util::JsonParser parser_;
|
||||||
|
std::string lastView;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules::hyprland
|
@ -13,13 +13,14 @@ class IdleInhibitor : public ALabel {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
IdleInhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
|
IdleInhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
~IdleInhibitor();
|
virtual ~IdleInhibitor();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
static std::list<waybar::AModule*> modules;
|
static std::list<waybar::AModule*> modules;
|
||||||
static bool status;
|
static bool status;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool handleToggle(GdkEventButton* const& e);
|
bool handleToggle(GdkEventButton* const& e) override;
|
||||||
|
void toggleStatus();
|
||||||
|
|
||||||
const Bar& bar_;
|
const Bar& bar_;
|
||||||
struct zwp_idle_inhibitor_v1* idle_inhibitor_;
|
struct zwp_idle_inhibitor_v1* idle_inhibitor_;
|
||||||
|
37
include/modules/image.hpp
Normal file
37
include/modules/image.hpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <gtkmm/image.h>
|
||||||
|
|
||||||
|
#include <csignal>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "gtkmm/box.h"
|
||||||
|
#include "util/command.hpp"
|
||||||
|
#include "util/json.hpp"
|
||||||
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules {
|
||||||
|
|
||||||
|
class Image : public AModule {
|
||||||
|
public:
|
||||||
|
Image(const std::string&, const Json::Value&);
|
||||||
|
virtual ~Image() = default;
|
||||||
|
auto update() -> void override;
|
||||||
|
void refresh(int /*signal*/) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void delayWorker();
|
||||||
|
void handleEvent();
|
||||||
|
|
||||||
|
Gtk::Box box_;
|
||||||
|
Gtk::Image image_;
|
||||||
|
std::string path_;
|
||||||
|
int size_;
|
||||||
|
int interval_;
|
||||||
|
|
||||||
|
util::SleeperThread thread_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules
|
@ -12,12 +12,12 @@ namespace waybar::modules {
|
|||||||
class Inhibitor : public ALabel {
|
class Inhibitor : public ALabel {
|
||||||
public:
|
public:
|
||||||
Inhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
|
Inhibitor(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
~Inhibitor() override;
|
virtual ~Inhibitor();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
auto activated() -> bool;
|
auto activated() -> bool;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
auto handleToggle(::GdkEventButton* const& e) -> bool;
|
auto handleToggle(::GdkEventButton* const& e) -> bool override;
|
||||||
|
|
||||||
const std::unique_ptr<::GDBusConnection, void (*)(::GDBusConnection*)> dbus_;
|
const std::unique_ptr<::GDBusConnection, void (*)(::GDBusConnection*)> dbus_;
|
||||||
const std::string inhibitors_;
|
const std::string inhibitors_;
|
||||||
|
44
include/modules/jack.hpp
Normal file
44
include/modules/jack.hpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <jack/jack.h>
|
||||||
|
#include <jack/thread.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules {
|
||||||
|
|
||||||
|
class JACK : public ALabel {
|
||||||
|
public:
|
||||||
|
JACK(const std::string &, const Json::Value &);
|
||||||
|
virtual ~JACK() = default;
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
int bufSize(jack_nframes_t size);
|
||||||
|
int sampleRate(jack_nframes_t rate);
|
||||||
|
int xrun();
|
||||||
|
void shutdown();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string JACKState();
|
||||||
|
|
||||||
|
jack_client_t *client_;
|
||||||
|
jack_nframes_t bufsize_;
|
||||||
|
jack_nframes_t samplerate_;
|
||||||
|
unsigned int xruns_;
|
||||||
|
float load_;
|
||||||
|
bool running_;
|
||||||
|
std::mutex mutex_;
|
||||||
|
std::string state_;
|
||||||
|
util::SleeperThread thread_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules
|
||||||
|
|
||||||
|
int bufSizeCallback(jack_nframes_t size, void *obj);
|
||||||
|
int sampleRateCallback(jack_nframes_t rate, void *obj);
|
||||||
|
int xrunCallback(void *obj);
|
||||||
|
void shutdownCallback(void *obj);
|
@ -1,19 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <fmt/format.h>
|
|
||||||
#if FMT_VERSION < 60000
|
|
||||||
#include <fmt/time.h>
|
|
||||||
#else
|
|
||||||
#include <fmt/chrono.h>
|
#include <fmt/chrono.h>
|
||||||
#endif
|
|
||||||
#include <gtkmm/label.h>
|
#include <gtkmm/label.h>
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "AModule.hpp"
|
#include "AModule.hpp"
|
||||||
#include "bar.hpp"
|
#include "bar.hpp"
|
||||||
#include "util/sleeper_thread.hpp"
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <libevdev/libevdev.h>
|
#include <libevdev/libevdev.h>
|
||||||
|
#include <libinput.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace waybar::modules {
|
namespace waybar::modules {
|
||||||
@ -21,10 +19,12 @@ namespace waybar::modules {
|
|||||||
class KeyboardState : public AModule {
|
class KeyboardState : public AModule {
|
||||||
public:
|
public:
|
||||||
KeyboardState(const std::string&, const waybar::Bar&, const Json::Value&);
|
KeyboardState(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
~KeyboardState();
|
virtual ~KeyboardState();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
auto tryAddDevice(const std::string&) -> void;
|
||||||
|
|
||||||
Gtk::Box box_;
|
Gtk::Box box_;
|
||||||
Gtk::Label numlock_label_;
|
Gtk::Label numlock_label_;
|
||||||
Gtk::Label capslock_label_;
|
Gtk::Label capslock_label_;
|
||||||
@ -36,11 +36,12 @@ class KeyboardState : public AModule {
|
|||||||
const std::chrono::seconds interval_;
|
const std::chrono::seconds interval_;
|
||||||
std::string icon_locked_;
|
std::string icon_locked_;
|
||||||
std::string icon_unlocked_;
|
std::string icon_unlocked_;
|
||||||
|
std::string devices_path_;
|
||||||
|
|
||||||
int fd_;
|
struct libinput* libinput_;
|
||||||
libevdev* dev_;
|
std::unordered_map<std::string, struct libinput_device*> libinput_devices_;
|
||||||
|
|
||||||
util::SleeperThread thread_;
|
util::SleeperThread libinput_thread_, hotplug_thread_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace waybar::modules
|
} // namespace waybar::modules
|
||||||
|
@ -13,8 +13,8 @@ namespace waybar::modules {
|
|||||||
class Memory : public ALabel {
|
class Memory : public ALabel {
|
||||||
public:
|
public:
|
||||||
Memory(const std::string&, const Json::Value&);
|
Memory(const std::string&, const Json::Value&);
|
||||||
~Memory() = default;
|
virtual ~Memory() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void parseMeminfo();
|
void parseMeminfo();
|
||||||
|
@ -37,10 +37,11 @@ class MPD : public ALabel {
|
|||||||
public:
|
public:
|
||||||
MPD(const std::string&, const Json::Value&);
|
MPD(const std::string&, const Json::Value&);
|
||||||
virtual ~MPD() noexcept = default;
|
virtual ~MPD() noexcept = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string getTag(mpd_tag_type type, unsigned idx = 0) const;
|
std::string getTag(mpd_tag_type type, unsigned idx = 0) const;
|
||||||
|
std::string getFilename() const;
|
||||||
void setLabel();
|
void setLabel();
|
||||||
std::string getStateIcon() const;
|
std::string getStateIcon() const;
|
||||||
std::string getOptionIcon(std::string optionName, bool activated) const;
|
std::string getOptionIcon(std::string optionName, bool activated) const;
|
||||||
|
85
include/modules/mpris/mpris.hpp
Normal file
85
include/modules/mpris/mpris.hpp
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <optional>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "gtkmm/box.h"
|
||||||
|
#include "gtkmm/label.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <playerctl/playerctl.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules::mpris {
|
||||||
|
|
||||||
|
class Mpris : public ALabel {
|
||||||
|
public:
|
||||||
|
Mpris(const std::string&, const Json::Value&);
|
||||||
|
virtual ~Mpris();
|
||||||
|
auto update() -> void override;
|
||||||
|
bool handleToggle(GdkEventButton* const&) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static auto onPlayerNameAppeared(PlayerctlPlayerManager*, PlayerctlPlayerName*, gpointer) -> void;
|
||||||
|
static auto onPlayerNameVanished(PlayerctlPlayerManager*, PlayerctlPlayerName*, gpointer) -> void;
|
||||||
|
static auto onPlayerPlay(PlayerctlPlayer*, gpointer) -> void;
|
||||||
|
static auto onPlayerPause(PlayerctlPlayer*, gpointer) -> void;
|
||||||
|
static auto onPlayerStop(PlayerctlPlayer*, gpointer) -> void;
|
||||||
|
static auto onPlayerMetadata(PlayerctlPlayer*, GVariant*, gpointer) -> void;
|
||||||
|
|
||||||
|
struct PlayerInfo {
|
||||||
|
std::string name;
|
||||||
|
PlayerctlPlaybackStatus status;
|
||||||
|
std::string status_string;
|
||||||
|
|
||||||
|
std::optional<std::string> artist;
|
||||||
|
std::optional<std::string> album;
|
||||||
|
std::optional<std::string> title;
|
||||||
|
std::optional<std::string> length; // as HH:MM:SS
|
||||||
|
std::optional<std::string> position; // same format
|
||||||
|
};
|
||||||
|
|
||||||
|
auto getPlayerInfo() -> std::optional<PlayerInfo>;
|
||||||
|
auto getIconFromJson(const Json::Value&, const std::string&) -> std::string;
|
||||||
|
auto getArtistStr(const PlayerInfo&, bool) -> std::string;
|
||||||
|
auto getAlbumStr(const PlayerInfo&, bool) -> std::string;
|
||||||
|
auto getTitleStr(const PlayerInfo&, bool) -> std::string;
|
||||||
|
auto getLengthStr(const PlayerInfo&, bool) -> std::string;
|
||||||
|
auto getPositionStr(const PlayerInfo&, bool) -> std::string;
|
||||||
|
auto getDynamicStr(const PlayerInfo&, bool, bool) -> std::string;
|
||||||
|
|
||||||
|
// config
|
||||||
|
std::string format_playing_;
|
||||||
|
std::string format_paused_;
|
||||||
|
std::string format_stopped_;
|
||||||
|
|
||||||
|
std::string tooltip_;
|
||||||
|
std::string tooltip_playing_;
|
||||||
|
std::string tooltip_paused_;
|
||||||
|
std::string tooltip_stopped_;
|
||||||
|
|
||||||
|
int artist_len_;
|
||||||
|
int album_len_;
|
||||||
|
int title_len_;
|
||||||
|
int dynamic_len_;
|
||||||
|
std::vector<std::string> dynamic_prio_;
|
||||||
|
bool truncate_hours_;
|
||||||
|
bool tooltip_len_limits_;
|
||||||
|
std::string ellipsis_;
|
||||||
|
|
||||||
|
std::string player_;
|
||||||
|
std::vector<std::string> ignored_players_;
|
||||||
|
|
||||||
|
PlayerctlPlayerManager* manager;
|
||||||
|
PlayerctlPlayer* player;
|
||||||
|
std::string lastStatus;
|
||||||
|
std::string lastPlayer;
|
||||||
|
|
||||||
|
util::SleeperThread thread_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules::mpris
|
@ -21,8 +21,8 @@ namespace waybar::modules {
|
|||||||
class Network : public ALabel {
|
class Network : public ALabel {
|
||||||
public:
|
public:
|
||||||
Network(const std::string&, const Json::Value&);
|
Network(const std::string&, const Json::Value&);
|
||||||
~Network();
|
virtual ~Network();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const uint8_t MAX_RETRY = 5;
|
static const uint8_t MAX_RETRY = 5;
|
||||||
@ -62,6 +62,7 @@ class Network : public ALabel {
|
|||||||
bool want_link_dump_;
|
bool want_link_dump_;
|
||||||
bool want_addr_dump_;
|
bool want_addr_dump_;
|
||||||
bool dump_in_progress_;
|
bool dump_in_progress_;
|
||||||
|
bool is_p2p_;
|
||||||
|
|
||||||
unsigned long long bandwidth_down_total_;
|
unsigned long long bandwidth_down_total_;
|
||||||
unsigned long long bandwidth_up_total_;
|
unsigned long long bandwidth_up_total_;
|
||||||
|
@ -14,8 +14,8 @@ namespace waybar::modules {
|
|||||||
class Pulseaudio : public ALabel {
|
class Pulseaudio : public ALabel {
|
||||||
public:
|
public:
|
||||||
Pulseaudio(const std::string&, const Json::Value&);
|
Pulseaudio(const std::string&, const Json::Value&);
|
||||||
~Pulseaudio();
|
virtual ~Pulseaudio();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void subscribeCb(pa_context*, pa_subscription_event_type_t, uint32_t, void*);
|
static void subscribeCb(pa_context*, pa_subscription_event_type_t, uint32_t, void*);
|
||||||
@ -25,7 +25,7 @@ class Pulseaudio : public ALabel {
|
|||||||
static void serverInfoCb(pa_context*, const pa_server_info*, void*);
|
static void serverInfoCb(pa_context*, const pa_server_info*, void*);
|
||||||
static void volumeModifyCb(pa_context*, int, void*);
|
static void volumeModifyCb(pa_context*, int, void*);
|
||||||
|
|
||||||
bool handleScroll(GdkEventScroll* e);
|
bool handleScroll(GdkEventScroll* e) override;
|
||||||
const std::vector<std::string> getPulseIcon() const;
|
const std::vector<std::string> getPulseIcon() const;
|
||||||
|
|
||||||
pa_threaded_mainloop* mainloop_;
|
pa_threaded_mainloop* mainloop_;
|
||||||
|
33
include/modules/river/layout.hpp
Normal file
33
include/modules/river/layout.hpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wayland-client.h>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "river-status-unstable-v1-client-protocol.h"
|
||||||
|
|
||||||
|
namespace waybar::modules::river {
|
||||||
|
|
||||||
|
class Layout : public waybar::ALabel {
|
||||||
|
public:
|
||||||
|
Layout(const std::string &, const waybar::Bar &, const Json::Value &);
|
||||||
|
virtual ~Layout();
|
||||||
|
|
||||||
|
// Handlers for wayland events
|
||||||
|
void handle_name(const char *name);
|
||||||
|
void handle_clear();
|
||||||
|
void handle_focused_output(struct wl_output *output);
|
||||||
|
void handle_unfocused_output(struct wl_output *output);
|
||||||
|
|
||||||
|
struct zriver_status_manager_v1 *status_manager_;
|
||||||
|
struct wl_seat *seat_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const waybar::Bar &bar_;
|
||||||
|
struct wl_output *output_; // stores the output this module belongs to
|
||||||
|
struct wl_output *focused_output_; // stores the currently focused output
|
||||||
|
struct zriver_output_status_v1 *output_status_;
|
||||||
|
struct zriver_seat_status_v1 *seat_status_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace waybar::modules::river */
|
28
include/modules/river/mode.hpp
Normal file
28
include/modules/river/mode.hpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wayland-client.h>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "river-status-unstable-v1-client-protocol.h"
|
||||||
|
|
||||||
|
namespace waybar::modules::river {
|
||||||
|
|
||||||
|
class Mode : public waybar::ALabel {
|
||||||
|
public:
|
||||||
|
Mode(const std::string &, const waybar::Bar &, const Json::Value &);
|
||||||
|
virtual ~Mode();
|
||||||
|
|
||||||
|
// Handlers for wayland events
|
||||||
|
void handle_mode(const char *mode);
|
||||||
|
|
||||||
|
struct zriver_status_manager_v1 *status_manager_;
|
||||||
|
struct wl_seat *seat_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const waybar::Bar &bar_;
|
||||||
|
std::string mode_;
|
||||||
|
struct zriver_seat_status_v1 *seat_status_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace waybar::modules::river */
|
@ -14,7 +14,7 @@ namespace waybar::modules::river {
|
|||||||
class Tags : public waybar::AModule {
|
class Tags : public waybar::AModule {
|
||||||
public:
|
public:
|
||||||
Tags(const std::string &, const waybar::Bar &, const Json::Value &);
|
Tags(const std::string &, const waybar::Bar &, const Json::Value &);
|
||||||
~Tags();
|
virtual ~Tags();
|
||||||
|
|
||||||
// Handlers for wayland events
|
// Handlers for wayland events
|
||||||
void handle_focused_tags(uint32_t tags);
|
void handle_focused_tags(uint32_t tags);
|
||||||
|
@ -13,7 +13,7 @@ namespace waybar::modules::river {
|
|||||||
class Window : public waybar::ALabel {
|
class Window : public waybar::ALabel {
|
||||||
public:
|
public:
|
||||||
Window(const std::string &, const waybar::Bar &, const Json::Value &);
|
Window(const std::string &, const waybar::Bar &, const Json::Value &);
|
||||||
~Window();
|
virtual ~Window();
|
||||||
|
|
||||||
// Handlers for wayland events
|
// Handlers for wayland events
|
||||||
void handle_focused_view(const char *title);
|
void handle_focused_view(const char *title);
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <fmt/format.h>
|
|
||||||
#if FMT_VERSION < 60000
|
|
||||||
#include <fmt/time.h>
|
|
||||||
#else
|
|
||||||
#include <fmt/chrono.h>
|
#include <fmt/chrono.h>
|
||||||
#endif
|
|
||||||
#include "ALabel.hpp"
|
#include "ALabel.hpp"
|
||||||
#include "util/sleeper_thread.hpp"
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
@ -14,8 +10,8 @@ namespace waybar::modules {
|
|||||||
class Clock : public ALabel {
|
class Clock : public ALabel {
|
||||||
public:
|
public:
|
||||||
Clock(const std::string&, const Json::Value&);
|
Clock(const std::string&, const Json::Value&);
|
||||||
~Clock() = default;
|
virtual ~Clock() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
util::SleeperThread thread_;
|
util::SleeperThread thread_;
|
||||||
|
@ -12,12 +12,12 @@ namespace waybar::modules {
|
|||||||
class Sndio : public ALabel {
|
class Sndio : public ALabel {
|
||||||
public:
|
public:
|
||||||
Sndio(const std::string &, const Json::Value &);
|
Sndio(const std::string &, const Json::Value &);
|
||||||
~Sndio();
|
virtual ~Sndio();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
auto set_desc(struct sioctl_desc *, unsigned int) -> void;
|
auto set_desc(struct sioctl_desc *, unsigned int) -> void;
|
||||||
auto put_val(unsigned int, unsigned int) -> void;
|
auto put_val(unsigned int, unsigned int) -> void;
|
||||||
bool handleScroll(GdkEventScroll *);
|
bool handleScroll(GdkEventScroll *) override;
|
||||||
bool handleToggle(GdkEventButton *const &);
|
bool handleToggle(GdkEventButton *const &) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
auto connect_to_sndio() -> void;
|
auto connect_to_sndio() -> void;
|
||||||
|
@ -13,8 +13,8 @@ namespace waybar::modules::SNI {
|
|||||||
class Tray : public AModule {
|
class Tray : public AModule {
|
||||||
public:
|
public:
|
||||||
Tray(const std::string&, const Bar&, const Json::Value&);
|
Tray(const std::string&, const Bar&, const Json::Value&);
|
||||||
~Tray() = default;
|
virtual ~Tray() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onAdd(std::unique_ptr<Item>& item);
|
void onAdd(std::unique_ptr<Item>& item);
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "ipc.hpp"
|
#include "ipc.hpp"
|
||||||
#include "util/sleeper_thread.hpp"
|
#include "util/sleeper_thread.hpp"
|
||||||
|
@ -17,8 +17,8 @@ namespace waybar::modules::sway {
|
|||||||
class Language : public ALabel, public sigc::trackable {
|
class Language : public ALabel, public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
Language(const std::string& id, const Json::Value& config);
|
Language(const std::string& id, const Json::Value& config);
|
||||||
~Language() = default;
|
virtual ~Language() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class DispayedShortFlag { None = 0, ShortName = 1, ShortDescription = 1 << 1 };
|
enum class DispayedShortFlag { None = 0, ShortName = 1, ShortDescription = 1 << 1 };
|
||||||
|
@ -13,8 +13,8 @@ namespace waybar::modules::sway {
|
|||||||
class Mode : public ALabel, public sigc::trackable {
|
class Mode : public ALabel, public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
Mode(const std::string&, const Json::Value&);
|
Mode(const std::string&, const Json::Value&);
|
||||||
~Mode() = default;
|
virtual ~Mode() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onEvent(const struct Ipc::ipc_response&);
|
void onEvent(const struct Ipc::ipc_response&);
|
||||||
|
35
include/modules/sway/scratchpad.hpp
Normal file
35
include/modules/sway/scratchpad.hpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtkmm/label.h>
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "client.hpp"
|
||||||
|
#include "modules/sway/ipc/client.hpp"
|
||||||
|
#include "util/json.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules::sway {
|
||||||
|
class Scratchpad : public ALabel {
|
||||||
|
public:
|
||||||
|
Scratchpad(const std::string&, const Json::Value&);
|
||||||
|
virtual ~Scratchpad() = default;
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
auto getTree() -> void;
|
||||||
|
auto onCmd(const struct Ipc::ipc_response&) -> void;
|
||||||
|
auto onEvent(const struct Ipc::ipc_response&) -> void;
|
||||||
|
|
||||||
|
std::string tooltip_format_;
|
||||||
|
bool show_empty_;
|
||||||
|
bool tooltip_enabled_;
|
||||||
|
std::string tooltip_text_;
|
||||||
|
int count_;
|
||||||
|
std::mutex mutex_;
|
||||||
|
Ipc ipc_;
|
||||||
|
util::JsonParser parser_;
|
||||||
|
};
|
||||||
|
} // namespace waybar::modules::sway
|
@ -15,16 +15,16 @@ namespace waybar::modules::sway {
|
|||||||
class Window : public AIconLabel, public sigc::trackable {
|
class Window : public AIconLabel, public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
Window(const std::string&, const waybar::Bar&, const Json::Value&);
|
Window(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
~Window() = default;
|
virtual ~Window() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void setClass(std::string classname, bool enable);
|
||||||
void onEvent(const struct Ipc::ipc_response&);
|
void onEvent(const struct Ipc::ipc_response&);
|
||||||
void onCmd(const struct Ipc::ipc_response&);
|
void onCmd(const struct Ipc::ipc_response&);
|
||||||
std::tuple<std::size_t, int, std::string, std::string, std::string> getFocusedNode(
|
std::tuple<std::size_t, int, int, std::string, std::string, std::string, std::string, std::string>
|
||||||
const Json::Value& nodes, std::string& output);
|
getFocusedNode(const Json::Value& nodes, std::string& output);
|
||||||
void getTree();
|
void getTree();
|
||||||
std::string rewriteTitle(const std::string& title);
|
|
||||||
void updateAppIconName();
|
void updateAppIconName();
|
||||||
void updateAppIcon();
|
void updateAppIcon();
|
||||||
|
|
||||||
@ -33,11 +33,14 @@ class Window : public AIconLabel, public sigc::trackable {
|
|||||||
int windowId_;
|
int windowId_;
|
||||||
std::string app_id_;
|
std::string app_id_;
|
||||||
std::string app_class_;
|
std::string app_class_;
|
||||||
|
std::string layout_;
|
||||||
std::string old_app_id_;
|
std::string old_app_id_;
|
||||||
std::size_t app_nb_;
|
std::size_t app_nb_;
|
||||||
|
std::string shell_;
|
||||||
unsigned app_icon_size_{24};
|
unsigned app_icon_size_{24};
|
||||||
bool update_app_icon_{true};
|
bool update_app_icon_{true};
|
||||||
std::string app_icon_name_;
|
std::string app_icon_name_;
|
||||||
|
int floating_count_;
|
||||||
util::JsonParser parser_;
|
util::JsonParser parser_;
|
||||||
std::mutex mutex_;
|
std::mutex mutex_;
|
||||||
Ipc ipc_;
|
Ipc ipc_;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <gtkmm/button.h>
|
#include <gtkmm/button.h>
|
||||||
#include <gtkmm/label.h>
|
#include <gtkmm/label.h>
|
||||||
|
|
||||||
|
#include <string_view>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "AModule.hpp"
|
#include "AModule.hpp"
|
||||||
@ -17,11 +18,13 @@ namespace waybar::modules::sway {
|
|||||||
class Workspaces : public AModule, public sigc::trackable {
|
class Workspaces : public AModule, public sigc::trackable {
|
||||||
public:
|
public:
|
||||||
Workspaces(const std::string&, const waybar::Bar&, const Json::Value&);
|
Workspaces(const std::string&, const waybar::Bar&, const Json::Value&);
|
||||||
~Workspaces() = default;
|
virtual ~Workspaces() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static inline const std::string workspace_switch_cmd_ = "workspace {} \"{}\"";
|
static constexpr std::string_view workspace_switch_cmd_ = "workspace {} \"{}\"";
|
||||||
|
static constexpr std::string_view persistent_workspace_switch_cmd_ =
|
||||||
|
R"(workspace {} "{}"; move workspace to output "{}"; workspace {} "{}")";
|
||||||
|
|
||||||
static int convertWorkspaceNameToNum(std::string name);
|
static int convertWorkspaceNameToNum(std::string name);
|
||||||
|
|
||||||
@ -34,7 +37,7 @@ class Workspaces : public AModule, public sigc::trackable {
|
|||||||
const std::string getCycleWorkspace(std::vector<Json::Value>::iterator, bool prev) const;
|
const std::string getCycleWorkspace(std::vector<Json::Value>::iterator, bool prev) const;
|
||||||
uint16_t getWorkspaceIndex(const std::string& name) const;
|
uint16_t getWorkspaceIndex(const std::string& name) const;
|
||||||
std::string trimWorkspaceName(std::string);
|
std::string trimWorkspaceName(std::string);
|
||||||
bool handleScroll(GdkEventScroll*);
|
bool handleScroll(GdkEventScroll*) override;
|
||||||
|
|
||||||
const Bar& bar_;
|
const Bar& bar_;
|
||||||
std::vector<Json::Value> workspaces_;
|
std::vector<Json::Value> workspaces_;
|
||||||
|
@ -12,8 +12,8 @@ namespace waybar::modules {
|
|||||||
class Temperature : public ALabel {
|
class Temperature : public ALabel {
|
||||||
public:
|
public:
|
||||||
Temperature(const std::string&, const Json::Value&);
|
Temperature(const std::string&, const Json::Value&);
|
||||||
~Temperature() = default;
|
virtual ~Temperature() = default;
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float getTemperature();
|
float getTemperature();
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "ALabel.hpp"
|
#include "ALabel.hpp"
|
||||||
#include "glibconfig.h"
|
#include "glibconfig.h"
|
||||||
@ -18,8 +19,8 @@ namespace waybar::modules::upower {
|
|||||||
class UPower : public AModule {
|
class UPower : public AModule {
|
||||||
public:
|
public:
|
||||||
UPower(const std::string &, const Json::Value &);
|
UPower(const std::string &, const Json::Value &);
|
||||||
~UPower();
|
virtual ~UPower();
|
||||||
auto update() -> void;
|
auto update() -> void override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::unordered_map<std::string, UpDevice *> Devices;
|
typedef std::unordered_map<std::string, UpDevice *> Devices;
|
||||||
@ -44,7 +45,7 @@ class UPower : public AModule {
|
|||||||
void resetDevices();
|
void resetDevices();
|
||||||
void removeDevices();
|
void removeDevices();
|
||||||
bool show_tooltip_callback(int, int, bool, const Glib::RefPtr<Gtk::Tooltip> &tooltip);
|
bool show_tooltip_callback(int, int, bool, const Glib::RefPtr<Gtk::Tooltip> &tooltip);
|
||||||
bool handleToggle(GdkEventButton *const &);
|
bool handleToggle(GdkEventButton *const &) override;
|
||||||
std::string timeToString(gint64 time);
|
std::string timeToString(gint64 time);
|
||||||
|
|
||||||
const std::string getDeviceStatus(UpDeviceState &state);
|
const std::string getDeviceStatus(UpDeviceState &state);
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <libupower-glib/upower.h>
|
#include <libupower-glib/upower.h>
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "gtkmm/box.h"
|
#include "gtkmm/box.h"
|
||||||
#include "gtkmm/label.h"
|
#include "gtkmm/label.h"
|
||||||
#include "gtkmm/window.h"
|
#include "gtkmm/window.h"
|
||||||
@ -22,7 +24,7 @@ class UPowerTooltip : public Gtk::Window {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
UPowerTooltip(uint iconSize, uint tooltipSpacing, uint tooltipPadding);
|
UPowerTooltip(uint iconSize, uint tooltipSpacing, uint tooltipPadding);
|
||||||
~UPowerTooltip();
|
virtual ~UPowerTooltip();
|
||||||
|
|
||||||
uint updateTooltip(Devices& devices);
|
uint updateTooltip(Devices& devices);
|
||||||
};
|
};
|
||||||
|
34
include/modules/user.hpp
Normal file
34
include/modules/user.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/chrono.h>
|
||||||
|
#include <gdkmm/pixbuf.h>
|
||||||
|
#include <glibmm/refptr.h>
|
||||||
|
|
||||||
|
#include "AIconLabel.hpp"
|
||||||
|
#include "util/sleeper_thread.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules {
|
||||||
|
class User : public AIconLabel {
|
||||||
|
public:
|
||||||
|
User(const std::string&, const Json::Value&);
|
||||||
|
virtual ~User() = default;
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
bool handleToggle(GdkEventButton* const& e) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
util::SleeperThread thread_;
|
||||||
|
|
||||||
|
static constexpr inline int defaultUserImageWidth_ = 20;
|
||||||
|
static constexpr inline int defaultUserImageHeight_ = 20;
|
||||||
|
|
||||||
|
long uptime_as_seconds();
|
||||||
|
std::string get_user_login() const;
|
||||||
|
std::string get_user_home_dir() const;
|
||||||
|
std::string get_default_user_avatar_path() const;
|
||||||
|
void init_default_user_avatar(int width, int height);
|
||||||
|
void init_user_avatar(const std::string& path, int width, int height);
|
||||||
|
void init_avatar(const Json::Value& config);
|
||||||
|
void init_update_worker();
|
||||||
|
};
|
||||||
|
} // namespace waybar::modules
|
43
include/modules/wireplumber.hpp
Normal file
43
include/modules/wireplumber.hpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <wp/wp.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
#include "ALabel.hpp"
|
||||||
|
|
||||||
|
namespace waybar::modules {
|
||||||
|
|
||||||
|
class Wireplumber : public ALabel {
|
||||||
|
public:
|
||||||
|
Wireplumber(const std::string&, const Json::Value&);
|
||||||
|
virtual ~Wireplumber();
|
||||||
|
auto update() -> void override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void loadRequiredApiModules();
|
||||||
|
void prepare();
|
||||||
|
void activatePlugins();
|
||||||
|
static void updateVolume(waybar::modules::Wireplumber* self, uint32_t id);
|
||||||
|
static void updateNodeName(waybar::modules::Wireplumber* self, uint32_t id);
|
||||||
|
static void onPluginActivated(WpObject* p, GAsyncResult* res, waybar::modules::Wireplumber* self);
|
||||||
|
static void onObjectManagerInstalled(waybar::modules::Wireplumber* self);
|
||||||
|
static void onMixerChanged(waybar::modules::Wireplumber* self, uint32_t id);
|
||||||
|
static void onDefaultNodesApiChanged(waybar::modules::Wireplumber* self);
|
||||||
|
|
||||||
|
WpCore* wp_core_;
|
||||||
|
GPtrArray* apis_;
|
||||||
|
WpObjectManager* om_;
|
||||||
|
WpPlugin* mixer_api_;
|
||||||
|
WpPlugin* def_nodes_api_;
|
||||||
|
gchar* default_node_name_;
|
||||||
|
uint32_t pending_plugins_;
|
||||||
|
bool muted_;
|
||||||
|
double volume_;
|
||||||
|
uint32_t node_id_{0};
|
||||||
|
std::string node_name_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace waybar::modules
|
@ -40,6 +40,8 @@ class Task {
|
|||||||
FULLSCREEN = (1 << 3),
|
FULLSCREEN = (1 << 3),
|
||||||
INVALID = (1 << 4)
|
INVALID = (1 << 4)
|
||||||
};
|
};
|
||||||
|
// made public so TaskBar can reorder based on configuration.
|
||||||
|
Gtk::Button button;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static uint32_t global_id;
|
static uint32_t global_id;
|
||||||
@ -53,7 +55,6 @@ class Task {
|
|||||||
|
|
||||||
uint32_t id_;
|
uint32_t id_;
|
||||||
|
|
||||||
Gtk::Button button_;
|
|
||||||
Gtk::Box content_;
|
Gtk::Box content_;
|
||||||
Gtk::Image icon_;
|
Gtk::Image icon_;
|
||||||
Gtk::Label text_before_;
|
Gtk::Label text_before_;
|
||||||
@ -74,6 +75,10 @@ class Task {
|
|||||||
std::string app_id_;
|
std::string app_id_;
|
||||||
uint32_t state_ = 0;
|
uint32_t state_ = 0;
|
||||||
|
|
||||||
|
int32_t drag_start_x;
|
||||||
|
int32_t drag_start_y;
|
||||||
|
int32_t drag_start_button = -1;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string repr() const;
|
std::string repr() const;
|
||||||
std::string state_string(bool = false) const;
|
std::string state_string(bool = false) const;
|
||||||
@ -105,6 +110,12 @@ class Task {
|
|||||||
|
|
||||||
/* Callbacks for Gtk events */
|
/* Callbacks for Gtk events */
|
||||||
bool handle_clicked(GdkEventButton *);
|
bool handle_clicked(GdkEventButton *);
|
||||||
|
bool handle_button_release(GdkEventButton *);
|
||||||
|
bool handle_motion_notify(GdkEventMotion *);
|
||||||
|
void handle_drag_data_get(const Glib::RefPtr<Gdk::DragContext> &context,
|
||||||
|
Gtk::SelectionData &selection_data, guint info, guint time);
|
||||||
|
void handle_drag_data_received(const Glib::RefPtr<Gdk::DragContext> &context, int x, int y,
|
||||||
|
Gtk::SelectionData selection_data, guint info, guint time);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool operator==(const Task &) const;
|
bool operator==(const Task &) const;
|
||||||
|
@ -22,7 +22,7 @@ class WorkspaceGroup;
|
|||||||
class Workspace {
|
class Workspace {
|
||||||
public:
|
public:
|
||||||
Workspace(const waybar::Bar &bar, const Json::Value &config, WorkspaceGroup &workspace_group,
|
Workspace(const waybar::Bar &bar, const Json::Value &config, WorkspaceGroup &workspace_group,
|
||||||
zext_workspace_handle_v1 *workspace, uint32_t id);
|
zext_workspace_handle_v1 *workspace, uint32_t id, std::string name);
|
||||||
~Workspace();
|
~Workspace();
|
||||||
auto update() -> void;
|
auto update() -> void;
|
||||||
|
|
||||||
@ -30,11 +30,15 @@ class Workspace {
|
|||||||
auto is_active() const -> bool { return state_ & static_cast<uint32_t>(State::ACTIVE); }
|
auto is_active() const -> bool { return state_ & static_cast<uint32_t>(State::ACTIVE); }
|
||||||
auto is_urgent() const -> bool { return state_ & static_cast<uint32_t>(State::URGENT); }
|
auto is_urgent() const -> bool { return state_ & static_cast<uint32_t>(State::URGENT); }
|
||||||
auto is_hidden() const -> bool { return state_ & static_cast<uint32_t>(State::HIDDEN); }
|
auto is_hidden() const -> bool { return state_ & static_cast<uint32_t>(State::HIDDEN); }
|
||||||
|
auto is_empty() const -> bool { return state_ & static_cast<uint32_t>(State::EMPTY); }
|
||||||
|
auto is_persistent() const -> bool { return persistent_; }
|
||||||
// wlr stuff
|
// wlr stuff
|
||||||
auto handle_name(const std::string &name) -> void;
|
auto handle_name(const std::string &name) -> void;
|
||||||
auto handle_coordinates(const std::vector<uint32_t> &coordinates) -> void;
|
auto handle_coordinates(const std::vector<uint32_t> &coordinates) -> void;
|
||||||
auto handle_state(const std::vector<uint32_t> &state) -> void;
|
auto handle_state(const std::vector<uint32_t> &state) -> void;
|
||||||
auto handle_remove() -> void;
|
auto handle_remove() -> void;
|
||||||
|
auto make_persistent() -> void;
|
||||||
|
auto handle_duplicate() -> void;
|
||||||
|
|
||||||
auto handle_done() -> void;
|
auto handle_done() -> void;
|
||||||
auto handle_clicked(GdkEventButton *bt) -> bool;
|
auto handle_clicked(GdkEventButton *bt) -> bool;
|
||||||
@ -48,6 +52,7 @@ class Workspace {
|
|||||||
ACTIVE = (1 << 0),
|
ACTIVE = (1 << 0),
|
||||||
URGENT = (1 << 1),
|
URGENT = (1 << 1),
|
||||||
HIDDEN = (1 << 2),
|
HIDDEN = (1 << 2),
|
||||||
|
EMPTY = (1 << 3),
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -67,6 +72,7 @@ class Workspace {
|
|||||||
static std::map<std::string, std::string> icons_map_;
|
static std::map<std::string, std::string> icons_map_;
|
||||||
std::string format_;
|
std::string format_;
|
||||||
bool with_icon_ = false;
|
bool with_icon_ = false;
|
||||||
|
bool persistent_ = false;
|
||||||
|
|
||||||
Gtk::Button button_;
|
Gtk::Button button_;
|
||||||
Gtk::Box content_;
|
Gtk::Box content_;
|
||||||
@ -87,11 +93,14 @@ class WorkspaceGroup {
|
|||||||
auto active_only() const -> bool;
|
auto active_only() const -> bool;
|
||||||
auto creation_delayed() const -> bool;
|
auto creation_delayed() const -> bool;
|
||||||
auto workspaces() -> std::vector<std::unique_ptr<Workspace>> & { return workspaces_; }
|
auto workspaces() -> std::vector<std::unique_ptr<Workspace>> & { return workspaces_; }
|
||||||
|
auto persistent_workspaces() -> std::vector<std::string> & { return persistent_workspaces_; }
|
||||||
|
|
||||||
auto sort_workspaces() -> void;
|
auto sort_workspaces() -> void;
|
||||||
auto set_need_to_sort() -> void { need_to_sort = true; }
|
auto set_need_to_sort() -> void { need_to_sort = true; }
|
||||||
auto add_button(Gtk::Button &button) -> void;
|
auto add_button(Gtk::Button &button) -> void;
|
||||||
auto remove_button(Gtk::Button &button) -> void;
|
auto remove_button(Gtk::Button &button) -> void;
|
||||||
|
auto fill_persistent_workspaces() -> void;
|
||||||
|
auto create_persistent_workspaces() -> void;
|
||||||
|
|
||||||
// wlr stuff
|
// wlr stuff
|
||||||
auto handle_workspace_create(zext_workspace_handle_v1 *workspace_handle) -> void;
|
auto handle_workspace_create(zext_workspace_handle_v1 *workspace_handle) -> void;
|
||||||
@ -115,6 +124,8 @@ class WorkspaceGroup {
|
|||||||
uint32_t id_;
|
uint32_t id_;
|
||||||
std::vector<std::unique_ptr<Workspace>> workspaces_;
|
std::vector<std::unique_ptr<Workspace>> workspaces_;
|
||||||
bool need_to_sort = false;
|
bool need_to_sort = false;
|
||||||
|
std::vector<std::string> persistent_workspaces_;
|
||||||
|
bool persistent_created_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class WorkspaceManager : public AModule {
|
class WorkspaceManager : public AModule {
|
||||||
@ -152,6 +163,7 @@ class WorkspaceManager : public AModule {
|
|||||||
|
|
||||||
bool sort_by_name_ = true;
|
bool sort_by_name_ = true;
|
||||||
bool sort_by_coordinates_ = true;
|
bool sort_by_coordinates_ = true;
|
||||||
|
bool sort_by_number_ = false;
|
||||||
bool all_outputs_ = false;
|
bool all_outputs_ = false;
|
||||||
bool active_only_ = false;
|
bool active_only_ = false;
|
||||||
bool creation_delayed_ = false;
|
bool creation_delayed_ = false;
|
||||||
|
@ -989,7 +989,7 @@ struct Help : Opt {
|
|||||||
showHelpFlag = flag;
|
showHelpFlag = flag;
|
||||||
return ParserResult::ok(ParseResultType::ShortCircuitAll);
|
return ParserResult::ok(ParseResultType::ShortCircuitAll);
|
||||||
}) {
|
}) {
|
||||||
static_cast<Opt &> (*this)("display usage information")["-?"]["-h"]["--help"].optional();
|
static_cast<Opt &>(*this)("display usage information")["-?"]["-h"]["--help"].optional();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <giomm.h>
|
#include <giomm.h>
|
||||||
#include <spdlog/spdlog.h>
|
#include <spdlog/spdlog.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
@ -68,7 +69,11 @@ inline int close(FILE* fp, pid_t pid) {
|
|||||||
inline FILE* open(const std::string& cmd, int& pid) {
|
inline FILE* open(const std::string& cmd, int& pid) {
|
||||||
if (cmd == "") return nullptr;
|
if (cmd == "") return nullptr;
|
||||||
int fd[2];
|
int fd[2];
|
||||||
if (pipe(fd) != 0) {
|
// Open the pipe with the close-on-exec flag set, so it will not be inherited
|
||||||
|
// by any other subprocesses launched by other threads (which could result in
|
||||||
|
// the pipe staying open after this child dies, causing us to hang when trying
|
||||||
|
// to read from it)
|
||||||
|
if (pipe2(fd, O_CLOEXEC) != 0) {
|
||||||
spdlog::error("Unable to pipe fd");
|
spdlog::error("Unable to pipe fd");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -77,6 +82,8 @@ inline FILE* open(const std::string& cmd, int& pid) {
|
|||||||
|
|
||||||
if (child_pid < 0) {
|
if (child_pid < 0) {
|
||||||
spdlog::error("Unable to exec cmd {}, error {}", cmd.c_str(), strerror(errno));
|
spdlog::error("Unable to exec cmd {}, error {}", cmd.c_str(), strerror(errno));
|
||||||
|
::close(fd[0]);
|
||||||
|
::close(fd[1]);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
60
include/util/date.hpp
Normal file
60
include/util/date.hpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#if HAVE_CHRONO_TIMEZONES
|
||||||
|
#include <chrono>
|
||||||
|
#include <format>
|
||||||
|
|
||||||
|
/* Compatibility layer for <date/tz.h> on top of C++20 <chrono> */
|
||||||
|
namespace date {
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
namespace literals {
|
||||||
|
using std::chrono::last;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline auto format(const std::string& spec, const auto& ztime) {
|
||||||
|
return spec.empty() ? "" : std::vformat("{:L" + spec + "}", std::make_format_args(ztime));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline auto format(const std::locale& loc, const std::string& spec, const auto& ztime) {
|
||||||
|
return spec.empty() ? "" : std::vformat(loc, "{:L" + spec + "}", std::make_format_args(ztime));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace date
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include <date/tz.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <typename Duration, typename TimeZonePtr>
|
||||||
|
struct fmt::formatter<date::zoned_time<Duration, TimeZonePtr>> {
|
||||||
|
std::string_view specs;
|
||||||
|
|
||||||
|
template <typename ParseContext>
|
||||||
|
constexpr auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {
|
||||||
|
auto it = ctx.begin();
|
||||||
|
if (it != ctx.end() && *it == ':') {
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
auto end = it;
|
||||||
|
while (end != ctx.end() && *end != '}') {
|
||||||
|
++end;
|
||||||
|
}
|
||||||
|
if (end != it) {
|
||||||
|
specs = {it, std::string_view::size_type(end - it)};
|
||||||
|
}
|
||||||
|
return end;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename FormatContext>
|
||||||
|
auto format(const date::zoned_time<Duration, TimeZonePtr>& ztime, FormatContext& ctx) {
|
||||||
|
if (ctx.locale()) {
|
||||||
|
const auto loc = ctx.locale().template get<std::locale>();
|
||||||
|
return fmt::format_to(ctx.out(), "{}", date::format(loc, fmt::to_string(specs), ztime));
|
||||||
|
}
|
||||||
|
return fmt::format_to(ctx.out(), "{}", date::format(fmt::to_string(specs), ztime));
|
||||||
|
}
|
||||||
|
};
|
@ -56,28 +56,30 @@ struct formatter<pow_format> {
|
|||||||
fraction /= base;
|
fraction /= base;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto max_width = 4 // coeff in {:.3g} format
|
auto number_width = 5 // coeff in {:.1f} format
|
||||||
+ 1 // prefix from units array
|
+ s.binary_; // potential 4th digit before the decimal point
|
||||||
+ s.binary_ // for the 'i' in GiB.
|
auto max_width = number_width + 1 // prefix from units array
|
||||||
|
+ s.binary_ // for the 'i' in GiB.
|
||||||
+ s.unit_.length();
|
+ s.unit_.length();
|
||||||
|
|
||||||
const char* format;
|
const char* format;
|
||||||
std::string string;
|
std::string string;
|
||||||
switch (spec) {
|
switch (spec) {
|
||||||
case '>':
|
case '>':
|
||||||
return format_to(ctx.out(), "{:>{}}", fmt::format("{}", s), max_width);
|
return fmt::format_to(ctx.out(), "{:>{}}", fmt::format("{}", s), max_width);
|
||||||
case '<':
|
case '<':
|
||||||
return format_to(ctx.out(), "{:<{}}", fmt::format("{}", s), max_width);
|
return fmt::format_to(ctx.out(), "{:<{}}", fmt::format("{}", s), max_width);
|
||||||
case '=':
|
case '=':
|
||||||
format = "{coefficient:<4.3g}{padding}{prefix}{unit}";
|
format = "{coefficient:<{number_width}.1f}{padding}{prefix}{unit}";
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
default:
|
default:
|
||||||
format = "{coefficient:.3g}{prefix}{unit}";
|
format = "{coefficient:.1f}{prefix}{unit}";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return format_to(
|
return fmt::format_to(
|
||||||
ctx.out(), format, fmt::arg("coefficient", fraction),
|
ctx.out(), fmt::runtime(format), fmt::arg("coefficient", fraction),
|
||||||
|
fmt::arg("number_width", number_width),
|
||||||
fmt::arg("prefix", std::string() + units[pow] + ((s.binary_ && pow) ? "i" : "")),
|
fmt::arg("prefix", std::string() + units[pow] + ((s.binary_ && pow) ? "i" : "")),
|
||||||
fmt::arg("unit", s.unit_),
|
fmt::arg("unit", s.unit_),
|
||||||
fmt::arg("padding", pow ? ""
|
fmt::arg("padding", pow ? ""
|
||||||
|
@ -1,7 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <fmt/ostream.h>
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
|
|
||||||
|
#if (FMT_VERSION >= 90000)
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct fmt::formatter<Json::Value> : ostream_formatter {};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace waybar::util {
|
namespace waybar::util {
|
||||||
|
|
||||||
struct JsonParser {
|
struct JsonParser {
|
||||||
|
8
include/util/rewrite_string.hpp
Normal file
8
include/util/rewrite_string.hpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <json/json.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace waybar::util {
|
||||||
|
std::string rewriteString(const std::string&, const Json::Value&);
|
||||||
|
}
|
6
include/util/sanitize_str.hpp
Normal file
6
include/util/sanitize_str.hpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace waybar::util {
|
||||||
|
std::string sanitize_string(std::string str);
|
||||||
|
} // namespace waybar::util
|
@ -1,39 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <date/tz.h>
|
|
||||||
#include <fmt/format.h>
|
|
||||||
|
|
||||||
namespace waybar {
|
|
||||||
|
|
||||||
struct waybar_time {
|
|
||||||
std::locale locale;
|
|
||||||
date::zoned_seconds ztime;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace waybar
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct fmt::formatter<waybar::waybar_time> {
|
|
||||||
std::string_view specs;
|
|
||||||
|
|
||||||
template <typename ParseContext>
|
|
||||||
constexpr auto parse(ParseContext& ctx) -> decltype(ctx.begin()) {
|
|
||||||
auto it = ctx.begin();
|
|
||||||
if (it != ctx.end() && *it == ':') {
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
auto end = it;
|
|
||||||
while (end != ctx.end() && *end != '}') {
|
|
||||||
++end;
|
|
||||||
}
|
|
||||||
if (end != it) {
|
|
||||||
specs = {it, std::string_view::size_type(end - it)};
|
|
||||||
}
|
|
||||||
return end;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename FormatContext>
|
|
||||||
auto format(const waybar::waybar_time& t, FormatContext& ctx) {
|
|
||||||
return format_to(ctx.out(), "{}", date::format(t.locale, fmt::to_string(specs), t.ztime));
|
|
||||||
}
|
|
||||||
};
|
|
@ -37,8 +37,8 @@ The *backlight* module displays the current backlight level.
|
|||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of backlight states which get activated on certain brightness levels.
|
A number of backlight states which get activated on certain brightness levels. See *waybar-states(5)*.
|
||||||
|
|
||||||
*on-click*: ++
|
*on-click*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
@ -58,16 +58,25 @@ The *backlight* module displays the current backlight level.
|
|||||||
|
|
||||||
*on-scroll-up*: ++
|
*on-scroll-up*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
Command to execute when performing a scroll up on the module.
|
Command to execute when performing a scroll up on the module. This replaces the default behaviour of brightness control.
|
||||||
|
|
||||||
*on-scroll-down*: ++
|
*on-scroll-down*: ++
|
||||||
typeof: string
|
typeof: string
|
||||||
Command to execute when performing a scroll down on the module.
|
Command to execute when performing a scroll down on the module. This replaces the default behaviour of brightness control.
|
||||||
|
|
||||||
*smooth-scrolling-threshold*: ++
|
*smooth-scrolling-threshold*: ++
|
||||||
typeof: double
|
typeof: double
|
||||||
Threshold to be used when scrolling.
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
*reverse-scrolling*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
Option to reverse the scroll direction.
|
||||||
|
|
||||||
|
*scroll-step*: ++
|
||||||
|
typeof: float ++
|
||||||
|
default: 1.0 ++
|
||||||
|
The speed in which to change the brightness when scrolling.
|
||||||
|
|
||||||
# EXAMPLE:
|
# EXAMPLE:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -33,13 +33,13 @@ The *battery* module displays the current capacity and state (eg. charging) of y
|
|||||||
The interval in which the information gets polled.
|
The interval in which the information gets polled.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of battery states which get activated on certain capacity levels. See *waybar-states(5)*.
|
A number of battery states which get activated on certain capacity levels. See *waybar-states(5)*.
|
||||||
|
|
||||||
*format*: ++
|
*format*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
default: {capacity}% ++
|
default: {capacity}% ++
|
||||||
The format, how the time should be displayed.
|
The format, how information should be displayed.
|
||||||
|
|
||||||
*format-time*: ++
|
*format-time*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
@ -114,9 +114,10 @@ The *battery* module displays the current capacity and state (eg. charging) of y
|
|||||||
|
|
||||||
The *battery* module allows you to define how time should be formatted via *format-time*.
|
The *battery* module allows you to define how time should be formatted via *format-time*.
|
||||||
|
|
||||||
The two arguments are:
|
The three arguments are:
|
||||||
*{H}*: Hours
|
*{H}*: Hours
|
||||||
*{M}*: Minutes
|
*{M}*: Minutes
|
||||||
|
*{m}*: Zero-padded minutes
|
||||||
|
|
||||||
# CUSTOM FORMATS
|
# CUSTOM FORMATS
|
||||||
|
|
||||||
|
@ -42,6 +42,12 @@ Addressed by *bluetooth*
|
|||||||
typeof: string ++
|
typeof: string ++
|
||||||
This format is used when the displayed controller is connected to at least 1 device.
|
This format is used when the displayed controller is connected to at least 1 device.
|
||||||
|
|
||||||
|
*format-icons*: ++
|
||||||
|
typeof: array/object ++
|
||||||
|
Based on the current battery percentage (see section *EXPERIMENTAL BATTERY PERCENTAGE FEATURE*), the corresponding icon gets selected. ++
|
||||||
|
The order is *low* to *high*. Will only show the current battery percentage icon in the *\*-connected-battery* config options. ++
|
||||||
|
Or by the state if it is an object. It will fall back to the enabled state if its derivatives are not defined (on, off, connected).
|
||||||
|
|
||||||
*rotate*: ++
|
*rotate*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
@ -115,6 +121,8 @@ Addressed by *bluetooth*
|
|||||||
|
|
||||||
*{status}*: Status of the bluetooth device.
|
*{status}*: Status of the bluetooth device.
|
||||||
|
|
||||||
|
*{icon}*: Icon, as defined in *format-icons*.
|
||||||
|
|
||||||
*{num_connections}*: Number of connections the displayed controller has.
|
*{num_connections}*: Number of connections the displayed controller has.
|
||||||
|
|
||||||
*{controller_address}*: Address of the displayed controller.
|
*{controller_address}*: Address of the displayed controller.
|
||||||
@ -129,7 +137,7 @@ Addressed by *bluetooth*
|
|||||||
|
|
||||||
*{device_alias}*: Alias of the displayed device.
|
*{device_alias}*: Alias of the displayed device.
|
||||||
|
|
||||||
*{device_enumerate}*: Show a list of all connected devices, each on a seperate line. Define the format of each device with the *tooltip-format-enumerate-connected* ++
|
*{device_enumerate}*: Show a list of all connected devices, each on a separate line. Define the format of each device with the *tooltip-format-enumerate-connected* ++
|
||||||
and/or *tooltip-format-enumerate-connected-battery* config options. Can only be used in the tooltip related format options.
|
and/or *tooltip-format-enumerate-connected-battery* config options. Can only be used in the tooltip related format options.
|
||||||
|
|
||||||
# EXPERIMENTAL BATTERY PERCENTAGE FEATURE
|
# EXPERIMENTAL BATTERY PERCENTAGE FEATURE
|
||||||
|
@ -42,7 +42,7 @@ The *cpu* module displays the current cpu utilization.
|
|||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of cpu usage states which get activated on certain usage levels. See *waybar-states(5)*.
|
A number of cpu usage states which get activated on certain usage levels. See *waybar-states(5)*.
|
||||||
|
|
||||||
*on-click*: ++
|
*on-click*: ++
|
||||||
|
@ -32,7 +32,7 @@ Addressed by *disk*
|
|||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of disk utilization states which get activated on certain percentage thresholds (percentage_used). See *waybar-states(5)*.
|
A number of disk utilization states which get activated on certain percentage thresholds (percentage_used). See *waybar-states(5)*.
|
||||||
|
|
||||||
*max-length*: ++
|
*max-length*: ++
|
||||||
|
49
man/waybar-dwl-tags.5.scd
Normal file
49
man/waybar-dwl-tags.5.scd
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
waybar-dwl-tags(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - dwl tags module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *tags* module displays the current state of tags in dwl.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *dwl/tags*
|
||||||
|
|
||||||
|
*num-tags*: ++
|
||||||
|
typeof: uint ++
|
||||||
|
default: 9 ++
|
||||||
|
The number of tags that should be displayed. Max 32.
|
||||||
|
|
||||||
|
*tag-labels*: ++
|
||||||
|
typeof: array ++
|
||||||
|
The label to display for each tag.
|
||||||
|
|
||||||
|
*disable-click*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
If set to false, you can left click to set focused tag. Right click to toggle tag focus. If set to true this behaviour is disabled.
|
||||||
|
|
||||||
|
# EXAMPLE
|
||||||
|
|
||||||
|
```
|
||||||
|
"dwl/tags": {
|
||||||
|
"num-tags": 5
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#tags button*
|
||||||
|
- *#tags button.occupied*
|
||||||
|
- *#tags button.focused*
|
||||||
|
- *#tags button.urgent*
|
||||||
|
|
||||||
|
Note that occupied/focused/urgent status may overlap. That is, a tag may be
|
||||||
|
both occupied and focused at the same time.
|
||||||
|
|
||||||
|
# SEE ALSO
|
||||||
|
|
||||||
|
waybar(5), dwl(1)
|
@ -23,7 +23,7 @@ Feral Gamemode optimizations.
|
|||||||
|
|
||||||
*tooltip*: ++
|
*tooltip*: ++
|
||||||
typeof: bool ++
|
typeof: bool ++
|
||||||
defualt: true ++
|
default: true ++
|
||||||
Option to disable tooltip on hover.
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
*tooltip-format*: ++
|
*tooltip-format*: ++
|
||||||
|
53
man/waybar-hyprland-language.5.scd
Normal file
53
man/waybar-hyprland-language.5.scd
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
waybar-hyprland-language(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - hyprland language module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *language* module displays the currently selected language.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *hyprland/language*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {} ++
|
||||||
|
The format, how information should be displayed.
|
||||||
|
|
||||||
|
*format-<lang>* ++
|
||||||
|
typeof: string++
|
||||||
|
Provide an alternative name to display per language where <lang> is the language of your choosing. Can be passed multiple times with multiple languages as shown by the example below.
|
||||||
|
|
||||||
|
*keyboard-name*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Specifies which keyboard to use from hyprctl devices output. Using the option that begins with "at-translated-set..." is recommended.
|
||||||
|
|
||||||
|
|
||||||
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
|
*{short}*: Short name of layout (e.g. "us"). Equals to {}.
|
||||||
|
|
||||||
|
*{shortDescription}*: Short description of layout (e.g. "en").
|
||||||
|
|
||||||
|
*{long}*: Long name of layout (e.g. "English (Dvorak)").
|
||||||
|
|
||||||
|
*{variant}*: Variant of layout (e.g. "dvorak").
|
||||||
|
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"hyprland/language": {
|
||||||
|
"format": "Lang: {long}"
|
||||||
|
"format-en": "AMERICA, HELL YEAH!"
|
||||||
|
"format-tr": "As bayrakları"
|
||||||
|
"keyboard-name": "at-translated-set-2-keyboard"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#language*
|
82
man/waybar-hyprland-submap.5.scd
Normal file
82
man/waybar-hyprland-submap.5.scd
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
waybar-hyprland-submap(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - hyprland submap module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *submap* module displays the currently active submap similar to *sway/mode*.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *hyprland/submap*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {} ++
|
||||||
|
The format, how information should be displayed. On {} the currently active submap is displayed.
|
||||||
|
|
||||||
|
*rotate*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
|
*max-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
|
*min-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
|
*align*: ++
|
||||||
|
typeof: float ++
|
||||||
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when clicked on the module.
|
||||||
|
|
||||||
|
*on-click-middle*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when middle-clicked on the module using mousewheel.
|
||||||
|
|
||||||
|
*on-click-right*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when you right clicked on the module.
|
||||||
|
|
||||||
|
*on-update*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when the module is updated.
|
||||||
|
|
||||||
|
*on-scroll-up*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling up on the module.
|
||||||
|
|
||||||
|
*on-scroll-down*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling down on the module.
|
||||||
|
|
||||||
|
*smooth-scrolling-threshold*: ++
|
||||||
|
typeof: double ++
|
||||||
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
*tooltip*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: true ++
|
||||||
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"hyprland/submap": {
|
||||||
|
"format": "✌️ {}",
|
||||||
|
"max-length": 8,
|
||||||
|
"tooltip": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#submap*
|
50
man/waybar-hyprland-window.5.scd
Normal file
50
man/waybar-hyprland-window.5.scd
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
waybar-hyprland-window(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - hyprland window module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *window* module displays the title of the currently focused window in Hyprland.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *hyprland/window*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {} ++
|
||||||
|
The format, how information should be displayed. On {} the current window title is displayed.
|
||||||
|
|
||||||
|
*rewrite*: ++
|
||||||
|
typeof: object ++
|
||||||
|
Rules to rewrite window title. See *rewrite rules*.
|
||||||
|
|
||||||
|
# REWRITE RULES
|
||||||
|
|
||||||
|
*rewrite* is an object where keys are regular expressions and values are
|
||||||
|
rewrite rules if the expression matches. Rules may contain references to
|
||||||
|
captures of the expression.
|
||||||
|
|
||||||
|
Regular expression and replacement follow ECMA-script rules.
|
||||||
|
|
||||||
|
If no expression matches, the title is left unchanged.
|
||||||
|
|
||||||
|
Invalid expressions (e.g., mismatched parentheses) are skipped.
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"hyprland/window": {
|
||||||
|
"format": "{}",
|
||||||
|
"rewrite": {
|
||||||
|
"(.*) - Mozilla Firefox": "🌎 $1",
|
||||||
|
"(.*) - zsh": "> [$1]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#window*
|
@ -63,6 +63,11 @@ screensaving, also known as "presentation mode".
|
|||||||
typeof: double ++
|
typeof: double ++
|
||||||
Threshold to be used when scrolling.
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
*start-activated*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: *false* ++
|
||||||
|
Whether the inhibit should be activated when starting waybar.
|
||||||
|
|
||||||
*timeout*: ++
|
*timeout*: ++
|
||||||
typeof: double ++
|
typeof: double ++
|
||||||
The number of minutes the inhibit should last.
|
The number of minutes the inhibit should last.
|
||||||
@ -72,6 +77,14 @@ screensaving, also known as "presentation mode".
|
|||||||
default: true ++
|
default: true ++
|
||||||
Option to disable tooltip on hover.
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*tooltip-format-activated*: ++
|
||||||
|
typeof: string ++
|
||||||
|
This format is used when the inhibit is activated.
|
||||||
|
|
||||||
|
*tooltip-format-deactivated*: ++
|
||||||
|
typeof: string ++
|
||||||
|
This format is used when the inhibit is deactivated.
|
||||||
|
|
||||||
# FORMAT REPLACEMENTS
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
*{status}*: status (*activated* or *deactivated*)
|
*{status}*: status (*activated* or *deactivated*)
|
||||||
|
73
man/waybar-image.5.scd
Normal file
73
man/waybar-image.5.scd
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
waybar-image(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - image module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *image* module displays an image from a path.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
*path*: ++
|
||||||
|
typeof: string ++
|
||||||
|
The path to the image.
|
||||||
|
*exec*: ++
|
||||||
|
typeof: string ++
|
||||||
|
The path to the script, which should return image path file
|
||||||
|
it will only execute if the path is not set
|
||||||
|
*size*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The width/height to render the image.
|
||||||
|
|
||||||
|
*interval*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The interval (in seconds) to re-render the image.
|
||||||
|
This is useful if the contents of *path* changes.
|
||||||
|
If no *interval* is defined, the image will only be rendered once.
|
||||||
|
|
||||||
|
*signal*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The signal number used to update the module.
|
||||||
|
This can be used instead of *interval* if the file changes irregularly.
|
||||||
|
The number is valid between 1 and N, where *SIGRTMIN+N* = *SIGRTMAX*.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when clicked on the module.
|
||||||
|
|
||||||
|
*on-click-middle*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when middle-clicked on the module using mousewheel.
|
||||||
|
|
||||||
|
*on-update*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when the module is updated.
|
||||||
|
|
||||||
|
*on-scroll-up*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling up on the module.
|
||||||
|
|
||||||
|
*on-scroll-down*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling down on the module.
|
||||||
|
|
||||||
|
*smooth-scrolling-threshold*: ++
|
||||||
|
typeof: double ++
|
||||||
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"image#album-art": {
|
||||||
|
"path": "/tmp/mpd_art",
|
||||||
|
"size": 32,
|
||||||
|
"interval": 5,
|
||||||
|
"on-click": "mpc toggle"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#image*
|
@ -6,7 +6,7 @@ waybar - inhibitor module
|
|||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
The *inhibitor* module allows to take an inhibitor lock that logind provides.
|
The *inhibitor* module allows one to take an inhibitor lock that logind provides.
|
||||||
See *systemd-inhibit*(1) for more information.
|
See *systemd-inhibit*(1) for more information.
|
||||||
|
|
||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
|
112
man/waybar-jack.5.scd
Normal file
112
man/waybar-jack.5.scd
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
waybar-jack(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - JACK module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *jack* module displays the current state of the JACK server.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *jack*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: *{load}%* ++
|
||||||
|
The format, how information should be displayed. This format is used when other formats aren't specified.
|
||||||
|
|
||||||
|
*format-connected*: ++
|
||||||
|
typeof: string ++
|
||||||
|
This format is used when the module is connected to the JACK server.
|
||||||
|
|
||||||
|
*format-disconnected*: ++
|
||||||
|
typeof: string ++
|
||||||
|
This format is used when the module is not connected to the JACK server.
|
||||||
|
|
||||||
|
*format-xrun*: ++
|
||||||
|
typeof: string ++
|
||||||
|
This format is used for one polling interval, when the JACK server reports an xrun.
|
||||||
|
|
||||||
|
*realtime*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: *true* ++
|
||||||
|
Option to drop real-time privileges for the JACK client opened by Waybar.
|
||||||
|
|
||||||
|
*tooltip*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: *true* ++
|
||||||
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*tooltip-format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: *{bufsize}/{samplerate} {latency}ms* ++
|
||||||
|
The format of information displayed in the tooltip.
|
||||||
|
|
||||||
|
*interval*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
default: 1 ++
|
||||||
|
The interval in which the information gets polled.
|
||||||
|
|
||||||
|
*rotate*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
|
*max-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
|
*min-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
|
*align*: ++
|
||||||
|
typeof: float ++
|
||||||
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when clicked on the module.
|
||||||
|
|
||||||
|
*on-click-middle*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when middle-clicked on the module using mousewheel.
|
||||||
|
|
||||||
|
*on-click-right*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when you right clicked on the module.
|
||||||
|
|
||||||
|
*on-update*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when the module is updated.
|
||||||
|
|
||||||
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
|
*{load}*: The current CPU load estimated by JACK.
|
||||||
|
|
||||||
|
*{bufsize}*: The size of the JACK buffer.
|
||||||
|
|
||||||
|
*{samplerate}*: The samplerate at which the JACK server is running.
|
||||||
|
|
||||||
|
*{latency}*: The duration, in ms, of the current buffer size.
|
||||||
|
|
||||||
|
*{xruns}*: The number of xruns reported by the JACK server since starting Waybar.
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"jack": {
|
||||||
|
"format": "DSP {}%",
|
||||||
|
"format-xrun": "{xruns} xruns",
|
||||||
|
"format-disconnected": "DSP off",
|
||||||
|
"realtime": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#jack*
|
||||||
|
- *#jack.connected*
|
||||||
|
- *#jack.disconnected*
|
||||||
|
- *#jack.xrun*
|
@ -13,6 +13,7 @@ You must be a member of the input group to use this module.
|
|||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
|
|
||||||
*interval*: ++
|
*interval*: ++
|
||||||
|
Deprecated, this module use event loop now, the interval has no effect.
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
default: 1 ++
|
default: 1 ++
|
||||||
The interval, in seconds, to poll the keyboard state.
|
The interval, in seconds, to poll the keyboard state.
|
||||||
|
@ -32,7 +32,7 @@ Addressed by *memory*
|
|||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of memory utilization states which get activated on certain percentage thresholds. See *waybar-states(5)*.
|
A number of memory utilization states which get activated on certain percentage thresholds. See *waybar-states(5)*.
|
||||||
|
|
||||||
*max-length*: ++
|
*max-length*: ++
|
||||||
|
@ -74,20 +74,20 @@ Addressed by *mpd*
|
|||||||
Tooltip information displayed when the MPD server can't be reached.
|
Tooltip information displayed when the MPD server can't be reached.
|
||||||
|
|
||||||
*artist-len*: ++
|
*artist-len*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Maximum length of the Artist tag.
|
Maximum length of the Artist tag.
|
||||||
|
|
||||||
*album-len*: ++
|
*album-len*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Maximum length of the Album tag.
|
Maximum length of the Album tag.
|
||||||
|
|
||||||
*album-artist-len*: ++
|
*album-artist-len*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Maximum length of the Album Artist tag.
|
Maximum length of the Album Artist tag.
|
||||||
|
|
||||||
*title-len*: ++
|
*title-len*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Maximum length of the Title tag.
|
Maximum length of the Title tag.
|
||||||
|
|
||||||
*rotate*: ++
|
*rotate*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
@ -98,12 +98,12 @@ Addressed by *mpd*
|
|||||||
The maximum length in character the module should display.
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
*min-length*: ++
|
*min-length*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
The minimum length in characters the module should take up.
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
*align*: ++
|
*align*: ++
|
||||||
typeof: float ++
|
typeof: float ++
|
||||||
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
*on-click*: ++
|
*on-click*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
|
181
man/waybar-mpris.5.scd
Normal file
181
man/waybar-mpris.5.scd
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
waybar-mpris(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - MPRIS module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *mpris* module displays currently playing media via libplayerctl.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
*player*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: playerctld ++
|
||||||
|
Name of the MPRIS player to attach to. Using the default value always
|
||||||
|
follows the currenly active player.
|
||||||
|
|
||||||
|
*ignored-players*: ++
|
||||||
|
typeof: []string ++
|
||||||
|
Ignore updates of the listed players, when using playerctld.
|
||||||
|
|
||||||
|
*interval*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Refresh MPRIS information on a timer.
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {player} ({status}) {dynamic} ++
|
||||||
|
The text format.
|
||||||
|
|
||||||
|
*format-[status]*: ++
|
||||||
|
typeof: string ++
|
||||||
|
The status-specific text format.
|
||||||
|
|
||||||
|
*tooltip*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: true ++
|
||||||
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*tooltip-format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {player} ({status}) {dynamic} ++
|
||||||
|
The tooltip text format.
|
||||||
|
|
||||||
|
*tooltip-format-[status]*: ++
|
||||||
|
typeof: string ++
|
||||||
|
The status-specific tooltip format.
|
||||||
|
|
||||||
|
*artist-len*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Maximum length of the Artist tag (Wide/Fullwidth Unicode characters
|
||||||
|
count as two). Set to zero to hide the artist in `{dynamic}` tag.
|
||||||
|
|
||||||
|
*album-len*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Maximum length of the Album tag (Wide/Fullwidth Unicode characters count
|
||||||
|
as two). Set to zero to hide the album in `{dynamic}` tag.
|
||||||
|
|
||||||
|
*title-len*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Maximum length of the Title tag (Wide/Fullwidth Unicode characters count
|
||||||
|
as two). Set to zero to hide the title in `{dynamic}` tag.
|
||||||
|
|
||||||
|
*dynamic-len*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Maximum length of the Dynamic tag (Wide/Fullwidth Unicode characters ++
|
||||||
|
count as two). The dynamic tag will not truncate any tags beyond their ++
|
||||||
|
set length limits, instead, it will attempt to fit as much of the ++
|
||||||
|
available tags as possible. It is recommended you set title-len to ++
|
||||||
|
something less than or equal to this value, so the title will always be ++
|
||||||
|
displayed.
|
||||||
|
|
||||||
|
*dynamic-priority*: ++
|
||||||
|
typeof: []string ++
|
||||||
|
default: ["title", "length", "position", "artist", "album"] ++
|
||||||
|
Priority of the tags when truncating the Dynamic tag (absence in this
|
||||||
|
list means force inclusion).
|
||||||
|
|
||||||
|
*truncate-hours*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: true ++
|
||||||
|
Whether to hide hours when media duration is less than an hour long.
|
||||||
|
|
||||||
|
*enable-tooltip-len-limits*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
Option to enable the length limits for the tooltip as well. By default
|
||||||
|
the tooltip ignores all length limits.
|
||||||
|
|
||||||
|
*ellipsis*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: "…" ++
|
||||||
|
This character will be used when any of the tags exceed their maximum
|
||||||
|
length. If you don't want to use an ellipsis, set this to empty string.
|
||||||
|
|
||||||
|
*rotate*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
|
*max-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
|
*min-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
|
*align*: ++
|
||||||
|
typeof: float ++
|
||||||
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned.
|
||||||
|
If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: play-pause ++
|
||||||
|
Overwrite default action toggles.
|
||||||
|
|
||||||
|
*on-middle-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: previous track ++
|
||||||
|
Overwrite default action toggles.
|
||||||
|
|
||||||
|
*on-right-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: next track ++
|
||||||
|
Overwrite default action toggles.
|
||||||
|
|
||||||
|
*player-icons*: ++
|
||||||
|
typeof: map[string]string ++
|
||||||
|
Allows setting _{player-icon}_ based on player-name property.
|
||||||
|
|
||||||
|
*status-icons*: ++
|
||||||
|
typeof: map[string]string ++
|
||||||
|
Allows setting _{status-icon}_ based on player status (playing, paused,
|
||||||
|
stopped).
|
||||||
|
|
||||||
|
|
||||||
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
|
*{player}*: The name of the current media player
|
||||||
|
|
||||||
|
*{status}*: The current status (playing, paused, stopped)
|
||||||
|
|
||||||
|
*{artist}*: The artist of the current track
|
||||||
|
|
||||||
|
*{album}*: The album title of the current track
|
||||||
|
|
||||||
|
*{title}*: The title of the current track
|
||||||
|
|
||||||
|
*{length}*: Length of the track, formatted as HH:MM:SS
|
||||||
|
|
||||||
|
*{dynamic}*: Use _{artist}_, _{album}_, _{title}_ and _{length}_, automatically omit++
|
||||||
|
empty values
|
||||||
|
|
||||||
|
*{player_icon}*: Chooses an icon from _player-icons_ based on _{player}_
|
||||||
|
|
||||||
|
*{status_icon}*: Chooses an icon from _status-icons_ based on _{status}_
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"mpris": {
|
||||||
|
"format": "{player_icon} {dynamic}",
|
||||||
|
"format-paused": "{status_icon} <i>{dynamic}</i>",
|
||||||
|
"player-icons": {
|
||||||
|
"default": "▶",
|
||||||
|
"mpv": "🎵"
|
||||||
|
},
|
||||||
|
"status-icons": {
|
||||||
|
"paused": "⏸"
|
||||||
|
},
|
||||||
|
// "ignored-players": ["firefox"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#mpris*
|
||||||
|
- *#mpris.${status}*
|
||||||
|
- *#mpris.${player}*
|
@ -149,10 +149,20 @@ Addressed by *network*
|
|||||||
|
|
||||||
*{bandwidthDownBits}*: Instant down speed in bits/seconds.
|
*{bandwidthDownBits}*: Instant down speed in bits/seconds.
|
||||||
|
|
||||||
|
*{bandwidthTotalBits}*: Instant total speed in bits/seconds.
|
||||||
|
|
||||||
*{bandwidthUpOctets}*: Instant up speed in octets/seconds.
|
*{bandwidthUpOctets}*: Instant up speed in octets/seconds.
|
||||||
|
|
||||||
*{bandwidthDownOctets}*: Instant down speed in octets/seconds.
|
*{bandwidthDownOctets}*: Instant down speed in octets/seconds.
|
||||||
|
|
||||||
|
*{bandwidthTotalOctets}*: Instant total speed in octets/seconds.
|
||||||
|
|
||||||
|
*{bandwidthUpBytes}*: Instant up speed in bytes/seconds.
|
||||||
|
|
||||||
|
*{bandwidthDownBytes}*: Instant down speed in bytes/seconds.
|
||||||
|
|
||||||
|
*{bandwidthTotalBytes}*: Instant total speed in bytes/seconds.
|
||||||
|
|
||||||
*{icon}*: Icon, as defined in *format-icons*.
|
*{icon}*: Icon, as defined in *format-icons*.
|
||||||
|
|
||||||
# EXAMPLES
|
# EXAMPLES
|
||||||
|
@ -43,8 +43,8 @@ Additionally you can control the volume by scrolling *up* or *down* while the cu
|
|||||||
Positive value to rotate the text label.
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
*states*: ++
|
*states*: ++
|
||||||
typeof: array ++
|
typeof: object ++
|
||||||
A number of volume states which get activated on certain volume levels. See *waybar-states(5)*
|
A number of volume states which get activated on certain volume levels. See *waybar-states(5)*.
|
||||||
|
|
||||||
*max-length*: ++
|
*max-length*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
@ -96,6 +96,15 @@ Additionally you can control the volume by scrolling *up* or *down* while the cu
|
|||||||
default: true ++
|
default: true ++
|
||||||
Option to disable tooltip on hover.
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*max-volume*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
default: 100 ++
|
||||||
|
The maximum volume that can be set, in percentage.
|
||||||
|
|
||||||
|
*ignored-sinks*: ++
|
||||||
|
typeof: array ++
|
||||||
|
Sinks in this list will not be shown as the active sink by Waybar. Entries should be the sink's description field.
|
||||||
|
|
||||||
# FORMAT REPLACEMENTS
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
*{desc}*: Pulseaudio port's description, for bluetooth it'll be the device name.
|
*{desc}*: Pulseaudio port's description, for bluetooth it'll be the device name.
|
||||||
|
67
man/waybar-river-layout.5.scd
Normal file
67
man/waybar-river-layout.5.scd
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
waybar-river-layout(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - river layout module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *layout* module displays the current layout in river.
|
||||||
|
|
||||||
|
It may not be set until a layout is first applied.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *river/layout*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {} ++
|
||||||
|
The format, how information should be displayed. On {} data gets inserted.
|
||||||
|
|
||||||
|
*rotate*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
|
*max-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
|
*min-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
|
*align*: ++
|
||||||
|
typeof: float ++
|
||||||
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when clicked on the module.
|
||||||
|
|
||||||
|
*on-click-middle*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when middle-clicked on the module using mousewheel.
|
||||||
|
|
||||||
|
*on-click-right*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when you right clicked on the module.
|
||||||
|
|
||||||
|
# EXAMPLE
|
||||||
|
|
||||||
|
```
|
||||||
|
"river/layout": {
|
||||||
|
"format": "{}",
|
||||||
|
"min-length": 4,
|
||||||
|
"align": "right"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#layout*
|
||||||
|
- *#layout.focused* Applied when the output this module's bar belongs to is focused.
|
||||||
|
|
||||||
|
# SEE ALSO
|
||||||
|
|
||||||
|
waybar(5), river(1)
|
75
man/waybar-river-mode.5.scd
Normal file
75
man/waybar-river-mode.5.scd
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
waybar-river-mode(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - river mode module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *mode* module displays the current mapping mode of river.
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *river/mode*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {} ++
|
||||||
|
The format, how information should be displayed. On {} data gets inserted.
|
||||||
|
|
||||||
|
*rotate*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
Positive value to rotate the text label.
|
||||||
|
|
||||||
|
*max-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The maximum length in character the module should display.
|
||||||
|
|
||||||
|
*min-length*: ++
|
||||||
|
typeof: integer ++
|
||||||
|
The minimum length in characters the module should take up.
|
||||||
|
|
||||||
|
*align*: ++
|
||||||
|
typeof: float ++
|
||||||
|
The alignment of the text, where 0 is left-aligned and 1 is right-aligned. If the module is rotated, it will follow the flow of the text.
|
||||||
|
|
||||||
|
*on-click*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when clicked on the module.
|
||||||
|
|
||||||
|
*on-click-middle*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when middle-clicked on the module using mousewheel.
|
||||||
|
|
||||||
|
*on-click-right*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when you right clicked on the module.
|
||||||
|
|
||||||
|
*on-update*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when the module is updated.
|
||||||
|
|
||||||
|
*on-scroll-up*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling up on the module.
|
||||||
|
|
||||||
|
*on-scroll-down*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Command to execute when scrolling down on the module.
|
||||||
|
|
||||||
|
*smooth-scrolling-threshold*: ++
|
||||||
|
typeof: double ++
|
||||||
|
Threshold to be used when scrolling.
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"river/mode": {
|
||||||
|
"format": " {}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#mode*
|
||||||
|
- *#mode.<mode>*
|
@ -7,14 +7,13 @@ apply a class when the value matches the declared state value.
|
|||||||
|
|
||||||
# STATES
|
# STATES
|
||||||
|
|
||||||
- Every entry (*state*) consists of a *<name>* (typeof: *string*) and a *<value>* (typeof: *integer*).
|
Every entry (*state*) consists of a *<name>* (typeof: *string*) and a *<value>* (typeof: *integer*).
|
||||||
|
|
||||||
- The state can be addressed as a CSS class in the *style.css*. The name of the CSS class is the *<name>* of the state.
|
- The state can be addressed as a CSS class in the *style.css*. The name of the CSS class is the *<name>* of the state.
|
||||||
Each class gets activated when the current capacity is equal or below the configured *<value>*.
|
Each class gets activated when the current value is equal to or less than the configured *<value>* for the *battery* module, or equal to or greater than the configured *<value>* for all other modules.
|
||||||
|
|
||||||
- Also each state can have its own *format*.
|
- Also, each state can have its own *format*.
|
||||||
Those can be configured via *format-<name>*.
|
Those can be configured via *format-<name>*, or if you want to differentiate a bit more, as *format-<status>-<state>*.
|
||||||
Or if you want to differentiate a bit more even as *format-<status>-<state>*.
|
|
||||||
|
|
||||||
# EXAMPLE
|
# EXAMPLE
|
||||||
|
|
||||||
|
64
man/waybar-sway-scratchpad.5.scd
Normal file
64
man/waybar-sway-scratchpad.5.scd
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
waybar-sway-scratchpad(5)
|
||||||
|
|
||||||
|
# NAME
|
||||||
|
|
||||||
|
waybar - sway scratchpad module
|
||||||
|
|
||||||
|
# DESCRIPTION
|
||||||
|
|
||||||
|
The *scratchpad* module displays the scratchpad status in Sway
|
||||||
|
|
||||||
|
# CONFIGURATION
|
||||||
|
|
||||||
|
Addressed by *sway/scratchpad*
|
||||||
|
|
||||||
|
*format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {icon} {count} ++
|
||||||
|
The format, how information should be displayed.
|
||||||
|
|
||||||
|
*show-empty*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
Option to show module when scratchpad is empty.
|
||||||
|
|
||||||
|
*format-icons*: ++
|
||||||
|
typeof: array/object ++
|
||||||
|
Based on the current scratchpad window counts, the corresponding icon gets selected.
|
||||||
|
|
||||||
|
*tooltip*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: true ++
|
||||||
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*tooltip-format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
default: {app}: {title} ++
|
||||||
|
The format, how information in the tooltip should be displayed.
|
||||||
|
|
||||||
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
|
*{icon}*: Icon, as defined in *format-icons*.
|
||||||
|
|
||||||
|
*{count}*: Number of windows in the scratchpad.
|
||||||
|
|
||||||
|
*{app}*: Name of the application in the scratchpad.
|
||||||
|
|
||||||
|
*{title}*: Title of the application in the scratchpad.
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
|
||||||
|
```
|
||||||
|
"sway/scratchpad": {
|
||||||
|
"format": "{icon} {count}",
|
||||||
|
"show-empty": false,
|
||||||
|
"format-icons": ["", ""],
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "{app}: {title}"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# STYLE
|
||||||
|
|
||||||
|
- *#scratchpad*
|
||||||
|
- *#scratchpad.empty*
|
@ -14,8 +14,8 @@ Addressed by *sway/window*
|
|||||||
|
|
||||||
*format*: ++
|
*format*: ++
|
||||||
typeof: string ++
|
typeof: string ++
|
||||||
default: {} ++
|
default: {title} ++
|
||||||
The format, how information should be displayed. On {} data gets inserted.
|
The format, how information should be displayed.
|
||||||
|
|
||||||
*rotate*: ++
|
*rotate*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
@ -66,9 +66,28 @@ Addressed by *sway/window*
|
|||||||
default: true ++
|
default: true ++
|
||||||
Option to disable tooltip on hover.
|
Option to disable tooltip on hover.
|
||||||
|
|
||||||
|
*all-outputs*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
Option to show the focused window along with its workspace styles on all outputs.
|
||||||
|
|
||||||
|
*offscreen-css*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
Only effective when all-outputs is true. Adds style according to present windows on unfocused outputs instead of showing the focused window and style.
|
||||||
|
|
||||||
|
*offscreen-css-text*: ++
|
||||||
|
typeof: string ++
|
||||||
|
Only effective when both all-outputs and offscreen-style are true. On screens currently not focused, show the given text along with that workspaces styles.
|
||||||
|
|
||||||
|
*show-focused-workspace-name*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
If the workspace itself is focused and the workspace contains nodes or floating_nodes, show the workspace name. If not set, text remains empty but styles according to nodes in the workspace are still applied.
|
||||||
|
|
||||||
*rewrite*: ++
|
*rewrite*: ++
|
||||||
typeof: object ++
|
typeof: object ++
|
||||||
Rules to rewrite window title. See *rewrite rules*.
|
Rules to rewrite the module format output. See *rewrite rules*.
|
||||||
|
|
||||||
*icon*: ++
|
*icon*: ++
|
||||||
typeof: bool ++
|
typeof: bool ++
|
||||||
@ -80,6 +99,15 @@ Addressed by *sway/window*
|
|||||||
default: 24 ++
|
default: 24 ++
|
||||||
Option to change the size of the application icon.
|
Option to change the size of the application icon.
|
||||||
|
|
||||||
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
|
*{title}*: The title of the focused window.
|
||||||
|
|
||||||
|
*{app_id}*: The app_id of the focused window.
|
||||||
|
|
||||||
|
*{shell}*: The shell of the focused window. It's 'xwayland' when the window is
|
||||||
|
running through xwayland, otherwise it's 'xdg-shell'.
|
||||||
|
|
||||||
# REWRITE RULES
|
# REWRITE RULES
|
||||||
|
|
||||||
*rewrite* is an object where keys are regular expressions and values are
|
*rewrite* is an object where keys are regular expressions and values are
|
||||||
@ -88,7 +116,7 @@ captures of the expression.
|
|||||||
|
|
||||||
Regular expression and replacement follow ECMA-script rules.
|
Regular expression and replacement follow ECMA-script rules.
|
||||||
|
|
||||||
If no expression matches, the title is left unchanged.
|
If no expression matches, the format output is left unchanged.
|
||||||
|
|
||||||
Invalid expressions (e.g., mismatched parentheses) are skipped.
|
Invalid expressions (e.g., mismatched parentheses) are skipped.
|
||||||
|
|
||||||
@ -108,6 +136,10 @@ Invalid expressions (e.g., mismatched parentheses) are skipped.
|
|||||||
# STYLE
|
# STYLE
|
||||||
|
|
||||||
- *#window*
|
- *#window*
|
||||||
- *window#waybar.empty* When no windows is in the workspace
|
- *window#waybar.empty* When no windows are in the workspace, or screen is not focused and offscreen-css option is not set
|
||||||
- *window#waybar.solo* When one window is in the workspace
|
- *window#waybar.solo* When one tiled window is in the workspace
|
||||||
|
- *window#waybar.floating* When there are only floating windows in the workspace
|
||||||
|
- *window#waybar.stacked* When there is more than one window in the workspace and the workspace layout is stacked
|
||||||
|
- *window#waybar.tabbed* When there is more than one window in the workspace and the workspace layout is tabbed
|
||||||
|
- *window#waybar.tiled* When there is more than one window in the workspace and the workspace layout is splith or splitv
|
||||||
- *window#waybar.<app_id>* Where *app_id* is the app_id or *instance* name like (*chromium*) of the only window in the workspace
|
- *window#waybar.<app_id>* Where *app_id* is the app_id or *instance* name like (*chromium*) of the only window in the workspace
|
||||||
|
@ -73,6 +73,10 @@ Addressed by *sway/workspaces*
|
|||||||
typeof: bool ++
|
typeof: bool ++
|
||||||
Whether to disable *workspace_auto_back_and_forth* when clicking on workspaces. If this is set to *true*, clicking on a workspace you are already on won't do anything, even if *workspace_auto_back_and_forth* is enabled in the Sway configuration.
|
Whether to disable *workspace_auto_back_and_forth* when clicking on workspaces. If this is set to *true*, clicking on a workspace you are already on won't do anything, even if *workspace_auto_back_and_forth* is enabled in the Sway configuration.
|
||||||
|
|
||||||
|
*alphabetical_sort*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
Whether to sort workspaces alphabetically. Please note this can make "swaymsg workspace prev/next" move to workspaces inconsistent with the ordering shown in Waybar.
|
||||||
|
|
||||||
# FORMAT REPLACEMENTS
|
# FORMAT REPLACEMENTS
|
||||||
|
|
||||||
*{value}*: Name of the workspace, as defined by sway.
|
*{value}*: Name of the workspace, as defined by sway.
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user