From: Volker Schlecht Subject: [Fix] wayland/waybar To: ports , Landry Breuil , Matthieu Herrb Date: Fri, 17 Apr 2026 00:01:35 +0200 Attached is a quality-of-life improvement for users of wayland/waybar that if possible I would still like to sneak in for 7.9: waybar has the documented feature that you can toggle its visibility by sending it SIGUSR1 and reload its configuration by sending SIGUSR2. However, someone sought to improve things for OpenBSD by helpfully defining SIGRTMIN and SIGRTMAX in terms of SIGUSR1: https://github.com/Alexays/Waybar/blob/d808c00324618c35de30335ca6fd215f6d81860f/include/util/SafeSignal.hpp#L14 That has the unfortunate consequence that waybar handles SIGUSR1 and SIGUSR2 the same way as it would handle SIGRTs on Linux, or in short: that functionality is broken on OpenBSD. I patched things up to make SIGUSR handling work again. While testing that, I also noticed that the sndio module doesn't take very well to being reloaded, and crashes or hangs in various exciting ways in those situations - therefore I also adjusted the example configuration to replace the sndio module by a few invocations of sndioctl(1). ok? Index: Makefile =================================================================== RCS file: /cvs/ports/wayland/waybar/Makefile,v retrieving revision 1.4 diff -u -p -r1.4 Makefile --- Makefile 29 Mar 2026 12:01:55 -0000 1.4 +++ Makefile 16 Apr 2026 21:40:00 -0000 @@ -4,7 +4,7 @@ V = 0.15.0 DIST_TUPLE= github Alexays Waybar ${V} . PKGNAME= waybar-${V} -REVISION= 0 +REVISION= 1 CATEGORIES = wayland Index: patches/patch-include_util_SafeSignal_hpp =================================================================== RCS file: patches/patch-include_util_SafeSignal_hpp diff -N patches/patch-include_util_SafeSignal_hpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-include_util_SafeSignal_hpp 16 Apr 2026 21:40:00 -0000 @@ -0,0 +1,15 @@ +Index: include/util/SafeSignal.hpp +--- include/util/SafeSignal.hpp.orig ++++ include/util/SafeSignal.hpp +@@ -11,11 +11,6 @@ + #include + #include + +-#ifdef __OpenBSD__ +-#define SIGRTMIN SIGUSR1 - 1 +-#define SIGRTMAX SIGUSR1 + 1 +-#endif +- + namespace waybar { + + /** Index: patches/patch-resources_config_jsonc =================================================================== RCS file: /cvs/ports/wayland/waybar/patches/patch-resources_config_jsonc,v retrieving revision 1.3 diff -u -p -r1.3 patch-resources_config_jsonc --- patches/patch-resources_config_jsonc 29 Mar 2026 12:01:56 -0000 1.3 +++ patches/patch-resources_config_jsonc 16 Apr 2026 21:40:00 -0000 @@ -24,7 +24,7 @@ Index: resources/config.jsonc - "network", - "power-profiles-daemon", + //"mpd", -+ "sndio", ++ "custom/sndio", "cpu", "memory", - "temperature", @@ -67,7 +67,7 @@ Index: resources/config.jsonc "format-alt": "{:%Y-%m-%d}" }, "cpu": { -@@ -122,98 +111,30 @@ +@@ -122,98 +111,32 @@ "memory": { "format": "{}% " }, @@ -98,11 +98,13 @@ Index: resources/config.jsonc - // "format-good": "", // An empty format will hide the module - // "format-full": "", - "format-icons": ["", "", "", "", ""] -+ "sndio": { -+ "scroll-step": "1", -+ "format": "  {volume}% ", -+ "on-scroll-down": "sndioctl output.level=-0.01", -+ "on-scroll-up": "sndioctl output.level=+0.01" ++ "custom/sndio": { ++ "format": "  {}% ", ++ "interval": 10, ++ "exec": "if [ $(sndioctl -n output.mute) -eq 1 ]; then echo \"--\"; else sndioctl -n output.level | awk '{printf \"%.0f\\n\", $1 * 100}'; fi", ++ "on-click": "sndioctl output.mute=! > /dev/null", ++ "on-scroll-down": "sndioctl output.level=-0.01 > /dev/null", ++ "on-scroll-up": "sndioctl output.level=+0.01 > /dev/null" }, - "battery#bat2": { - "bat": "BAT2" Index: patches/patch-resources_style_css =================================================================== RCS file: /cvs/ports/wayland/waybar/patches/patch-resources_style_css,v retrieving revision 1.2 diff -u -p -r1.2 patch-resources_style_css --- patches/patch-resources_style_css 29 Mar 2026 12:01:56 -0000 1.2 +++ patches/patch-resources_style_css 16 Apr 2026 21:40:00 -0000 @@ -49,11 +49,12 @@ Index: resources/style.css label:focus { background-color: #000000; } -@@ -203,6 +226,16 @@ label:focus { +@@ -203,6 +226,17 @@ label:focus { color: #2a5c45; } -+#sndio { ++#sndio, ++#custom-sndio { + background-color: #f1c40f; + color: #000; +} @@ -66,7 +67,7 @@ Index: resources/style.css #wireplumber { background-color: #fff0f5; color: #000000; -@@ -227,6 +260,10 @@ label:focus { +@@ -227,6 +261,10 @@ label:focus { } #temperature { Index: patches/patch-src_main_cpp =================================================================== RCS file: patches/patch-src_main_cpp diff -N patches/patch-src_main_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_main_cpp 16 Apr 2026 21:40:00 -0000 @@ -0,0 +1,30 @@ +Index: src/main.cpp +--- src/main.cpp.orig ++++ src/main.cpp +@@ -52,9 +52,11 @@ static void catchSignals(waybar::SafeSignal& sign + std::signal(SIGINT, writeSignalToPipe); + std::signal(SIGCHLD, writeSignalToPipe); + ++#ifndef __OpenBSD__ + for (int sig = SIGRTMIN + 1; sig <= SIGRTMAX; ++sig) { + std::signal(sig, writeSignalToPipe); + } ++#endif + + while (true) { + int signum; +@@ -116,12 +118,14 @@ void handleUserSignal(int signal, bool& reload) { + // If this signal should restart or close the bar, this function will write + // `true` or `false`, respectively, into `reload`. + static void handleSignalMainThread(int signum, bool& reload) { ++#ifndef __OpenBSD__ + if (signum >= SIGRTMIN + 1 && signum <= SIGRTMAX) { + for (auto& bar : waybar::Client::inst()->bars) { + bar->handleSignal(signum); + } + return; + } ++#endif + + switch (signum) { + case SIGUSR1: Index: patches/patch-src_modules_custom_cpp =================================================================== RCS file: patches/patch-src_modules_custom_cpp diff -N patches/patch-src_modules_custom_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_modules_custom_cpp 16 Apr 2026 21:40:00 -0000 @@ -0,0 +1,16 @@ +Index: src/modules/custom.cpp +--- src/modules/custom.cpp.orig ++++ src/modules/custom.cpp +@@ -136,9 +136,9 @@ void waybar::modules::Custom::waitingWorker() { + } + + void waybar::modules::Custom::refresh(int sig) { +- if (config_["signal"].isInt() && sig == SIGRTMIN + config_["signal"].asInt()) { +- thread_.wake_up(); +- } ++ // if (config_["signal"].isInt() && sig == SIGRTMIN + config_["signal"].asInt()) { ++ // thread_.wake_up(); ++ // } + } + + void waybar::modules::Custom::handleEvent() { Index: patches/patch-src_modules_image_cpp =================================================================== RCS file: patches/patch-src_modules_image_cpp diff -N patches/patch-src_modules_image_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_modules_image_cpp 16 Apr 2026 21:40:00 -0000 @@ -0,0 +1,16 @@ +Index: src/modules/image.cpp +--- src/modules/image.cpp.orig ++++ src/modules/image.cpp +@@ -41,9 +41,9 @@ void waybar::modules::Image::delayWorker() { + } + + void waybar::modules::Image::refresh(int sig) { +- if (config_["signal"].isInt() && sig == SIGRTMIN + config_["signal"].asInt()) { +- thread_.wake_up(); +- } ++ // if (config_["signal"].isInt() && sig == SIGRTMIN + config_["signal"].asInt()) { ++ // thread_.wake_up(); ++ // } + } + + auto waybar::modules::Image::update() -> void {