Go to file
Maja Kądziołka 6d28740896
Add locking for interacting with the pulseaudio thread
Before this commit, Waybar would sometimes get into a state
where it would consume 100% of a CPU core, and the pulseaudio widget
would stop responding to volume adjustments.

In this state, the pulseaudio mainloop thread would spin, with the
counter of enabled defer events at 1, but no actual enabled defer
event in the list to get the counter back to zero after an iteration
in the mainloop.

This could happen if the unsynchronized interactions with the mainloop
thread happened to modify the list of deferred events at the same
time as the mainloop.

This commit introduces locking in accordance with the PulseAudio
documentation on the threaded mainloop:

> The lock needs to be held whenever you call any PulseAudio function that
> uses an object associated with this main loop. Those objects include
> pa_mainloop, pa_context, pa_stream and pa_operation, and the various event
> objects (pa_io_event, pa_time_event, pa_defer_event).
2024-12-03 19:37:36 +01:00
.github .github/workflows: allow forks to manually run flake lock update 2024-09-28 13:21:55 -05:00
Dockerfiles Update archlinux 2024-06-24 08:58:29 +02:00
include Add stretching of modules and modules-center toggling 2024-11-20 00:00:27 +01:00
man Add stretching of modules and modules-center toggling 2024-11-20 00:00:27 +01:00
nix nix/default: cava bump 2024-09-28 12:41:10 -05:00
package Add archlinux PKGBUILD 2018-08-09 20:50:11 +02:00
protocol Merge pull request #2926 from alebastr/meson-cleanup 2024-02-19 23:44:52 +01:00
resources Update documentation 2024-09-17 02:56:38 +02:00
src Add locking for interacting with the pulseaudio thread 2024-12-03 19:37:36 +01:00
subprojects cava bump 2024-09-28 00:57:02 +03:00
test chore: lint 2024-09-13 08:55:14 +02:00
.clang-format refactor: lint 2022-04-06 08:37:19 +02:00
.clang-tidy clang-tidy: comment case styling options 2024-05-11 16:19:46 +02:00
.editorconfig chore: Add EditorConfig file 2019-04-18 15:55:45 +02:00
.envrc feat: enable direnv and fix flake devshell output 2024-01-08 12:47:32 -06:00
.gitignore .gitignore: add .ccls-cache 2024-05-24 14:21:31 -05:00
.gitmodules Add archlinux PKGBUILD 2018-08-09 20:50:11 +02:00
LICENSE Initial commit 2018-08-08 23:53:37 +02:00
Makefile Makefile: fix meson deprecations 2024-05-28 15:41:10 -05:00
README.md Add niri/workspaces, niri/window, niri/language 2024-09-13 10:34:55 +03:00
default.nix use the recommended way of using flake-compat 2023-02-16 20:31:02 +07:00
flake.lock flake.lock: Update 2024-11-01 00:11:22 +00:00
flake.nix flake: fix overlay not actually being applied (#3208) 2024-05-06 10:46:10 +02:00
meson.build cava bump 2024-09-28 00:57:02 +03:00
meson_options.txt niri: Gate behind a meson option 2024-09-13 10:34:55 +03:00
preview-2.png chore: optimize preview 2018-10-01 18:56:58 +02:00
preview.png chore: optimize preview 2018-10-01 18:56:58 +02:00

README.md

Waybar Licence Paypal Donate
Waybar

Highly customizable Wayland bar for Sway and Wlroots based compositors.
Available in all major distributions
Waybar examples

Current features

  • Sway (Workspaces, Binding mode, Focused window name)
  • River (Mapping mode, Tags, Focused window name)
  • Hyprland (Window Icons, Workspaces, Focused window name)
  • Niri (Workspaces, Focused window name, Language)
  • DWL (Tags, Focused window name) requires dwl ipc patch
  • Tray #21
  • Local time
  • Battery
  • UPower
  • Power profiles daemon
  • Network
  • Bluetooth
  • Pulseaudio
  • Privacy Info
  • Wireplumber
  • Disk
  • Memory
  • Cpu load average
  • Temperature
  • MPD
  • Custom scripts
  • Custom image
  • Multiple output configuration
  • And many more customizations

Configuration and Styling

See the wiki for more details.

Installation

Waybar is available from a number of Linux distributions:

Packaging status

An Ubuntu PPA with more recent versions is available here.

Building from source

$ git clone https://github.com/Alexays/Waybar
$ cd Waybar
$ meson setup build
$ ninja -C build
$ ./build/waybar
# If you want to install it
$ ninja -C build install
$ waybar

Dependencies

gtkmm3
jsoncpp
libsigc++
fmt
wayland
chrono-date
spdlog
libgtk-3-dev [gtk-layer-shell]
gobject-introspection [gtk-layer-shell]
libgirepository1.0-dev [gtk-layer-shell]
libpulse [Pulseaudio module]
libnl [Network module]
libappindicator-gtk3 [Tray module]
libdbusmenu-gtk3 [Tray module]
libmpdclient [MPD module]
libsndio [sndio module]
libevdev [KeyboardState module]
xkbregistry
upower [UPower battery module]

Build dependencies

cmake
meson
scdoc
wayland-protocols

On Ubuntu, you can install all the relevant dependencies using this command (tested with 19.10 and 20.04):

sudo apt install \
  clang-tidy \
  gobject-introspection \
  libdbusmenu-gtk3-dev \
  libevdev-dev \
  libfmt-dev \
  libgirepository1.0-dev \
  libgtk-3-dev \
  libgtkmm-3.0-dev \
  libinput-dev \
  libjsoncpp-dev \
  libmpdclient-dev \
  libnl-3-dev \
  libnl-genl-3-dev \
  libpulse-dev \
  libsigc++-2.0-dev \
  libspdlog-dev \
  libwayland-dev \
  scdoc \
  upower \
  libxkbregistry-dev

Contributions welcome!
Have fun :)
The style guidelines are Google's

License

Waybar is licensed under the MIT license. See LICENSE for more information.