summaryrefslogtreecommitdiff
path: root/gui-apps
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-09-18 21:53:21 -0500
committerroot <root@alpha.trunkmasters.com>2026-09-18 21:53:21 -0500
commit9720a11af1e64187117d3c485b8df96672a294fe (patch)
treeb59d49bd17ee8adbe820732ab0ddd8a05b9068f5 /gui-apps
parentba2db746adde666ba2fbd08e45472b5de2d61510 (diff)
downloadbaldeagleos-repo-9720a11af1e64187117d3c485b8df96672a294fe.tar.gz
baldeagleos-repo-9720a11af1e64187117d3c485b8df96672a294fe.tar.xz
baldeagleos-repo-9720a11af1e64187117d3c485b8df96672a294fe.zip
Checkpoint dirty output before beosrepo update
Diffstat (limited to 'gui-apps')
-rw-r--r--gui-apps/waybar/files/meson-fix-build.patch38
-rw-r--r--gui-apps/waybar/files/tray-icons-fix.patch99
-rw-r--r--gui-apps/waybar/files/waybar-0.15.0-add-hyprland-lua-ipc.patch163
-rw-r--r--gui-apps/waybar/waybar-0.10.4-r1.ebuild101
-rw-r--r--gui-apps/waybar/waybar-0.11.0-r1.ebuild105
-rw-r--r--gui-apps/waybar/waybar-0.11.0.ebuild101
-rw-r--r--gui-apps/waybar/waybar-0.12.0.ebuild105
-rw-r--r--gui-apps/waybar/waybar-0.14.0.ebuild121
8 files changed, 670 insertions, 163 deletions
diff --git a/gui-apps/waybar/files/meson-fix-build.patch b/gui-apps/waybar/files/meson-fix-build.patch
new file mode 100644
index 000000000000..cee64a56a395
--- /dev/null
+++ b/gui-apps/waybar/files/meson-fix-build.patch
@@ -0,0 +1,38 @@
+From 69c61c3d9ae8f7397d64570412655007ea086c56 Mon Sep 17 00:00:00 2001
+From: ShengYi Hung <aokblast@FreeBSD.org>
+Date: Sun, 23 Aug 2026 12:45:10 +0800
+Subject: [PATCH] meson: Fix unwinding error in libunwind over glibc
+
+glibc's pthread_cancel dlopens libgcc_s.so.1 and uses its unwinder,
+while libc++abi's personality routine resolves the Unwind* accessors
+from the global scope, where LLVM libunwind wins. This causes the two
+unwinders to interpret each other's unwind context incorrectly, and
+cancelling a thread segfaults. Pull libgcc_s into DT_NEEDED before
+libc++abi/libunwind so all Unwind* symbols resolve to the same unwinder.
+---
+ meson.build | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 5dc7338d5f..88be32e27b 100644
+--- a/meson.build
++++ b/meson.build
+@@ -17,7 +17,17 @@ cpp_link_args = []
+
+ if get_option('libcxx')
+ cpp_args += ['-stdlib=libc++']
+- cpp_link_args += ['-stdlib=libc++', '-lc++abi']
++ cpp_link_args += ['-stdlib=libc++']
++ # glibc's pthread_cancel dlopens libgcc_s.so.1 and forces the unwind through
++ # that unwinder, while libc++abi's personality routine resolves the _Unwind_*
++ # accessors through the global scope, where LLVM libunwind wins. The two read
++ # each other's unwind context as their own, so cancelling a thread
++ # (SleeperThread::stop) segfaults. Pull libgcc_s into DT_NEEDED ahead of
++ # libc++abi/libunwind so every _Unwind_* symbol resolves to one unwinder.
++ if compiler.has_link_argument('-lgcc_s')
++ cpp_link_args += ['-Wl,--push-state,--no-as-needed', '-lgcc_s', '-Wl,--pop-state']
++ endif
++ cpp_link_args += ['-lc++abi']
+ endif
+
+ if compiler.has_link_argument('-lc++fs')
diff --git a/gui-apps/waybar/files/tray-icons-fix.patch b/gui-apps/waybar/files/tray-icons-fix.patch
new file mode 100644
index 000000000000..95bf11ffca16
--- /dev/null
+++ b/gui-apps/waybar/files/tray-icons-fix.patch
@@ -0,0 +1,99 @@
+diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp
+index 8afb39fb3..6c4ec8c06 100644
+--- a/src/modules/sni/item.cpp
++++ b/src/modules/sni/item.cpp
+@@ -104,11 +104,9 @@ void Item::proxyReady(Glib::RefPtr<Gio::AsyncResult>& result) {
+ this->updateImage();
+
+ } catch (const Glib::Error& err) {
+- spdlog::error("Failed to create DBus Proxy for {} {}: {}", bus_name, object_path,
+- std::string(err.what()));
++ spdlog::error("Failed to create DBus Proxy for {} {}: {}", bus_name, object_path, err.what());
+ } catch (const std::exception& err) {
+- spdlog::error("Failed to create DBus Proxy for {} {}: {}", bus_name, object_path,
+- std::string(err.what()));
++ spdlog::error("Failed to create DBus Proxy for {} {}: {}", bus_name, object_path, err.what());
+ }
+ }
+
+@@ -126,15 +124,14 @@ ToolTip get_variant<ToolTip>(const Glib::VariantBase& value) {
+ result.text = get_variant<Glib::ustring>(container.get_child(2));
+ auto description = get_variant<Glib::ustring>(container.get_child(3));
+ if (!description.empty()) {
+- result.text = fmt::format("<b>{}</b>\n{}", std::string(result.text), std::string(description));
++ result.text = fmt::format("<b>{}</b>\n{}", result.text, description);
+ }
+ return result;
+ }
+
+ void Item::setProperty(const Glib::ustring& name, Glib::VariantBase& value) {
+ try {
+- spdlog::trace("Set tray item property: {}.{} = {}", id.empty() ? bus_name : id,
+- std::string(name), get_variant<std::string>(value));
++ spdlog::trace("Set tray item property: {}.{} = {}", id.empty() ? bus_name : id, name, value);
+
+ if (name == "Category") {
+ category = get_variant<std::string>(value);
+@@ -179,12 +176,10 @@ void Item::setProperty(const Glib::ustring& name, Glib::VariantBase& value) {
+ }
+ } catch (const Glib::Error& err) {
+ spdlog::warn("Failed to set tray item property: {}.{}, value = {}, err = {}",
+- id.empty() ? bus_name : id, std::string(name), get_variant<std::string>(value),
+- std::string(err.what()));
++ id.empty() ? bus_name : id, name, value, err.what());
+ } catch (const std::exception& err) {
+ spdlog::warn("Failed to set tray item property: {}.{}, value = {}, err = {}",
+- id.empty() ? bus_name : id, std::string(name), get_variant<std::string>(value),
+- std::string(err.what()));
++ id.empty() ? bus_name : id, name, value, err.what());
+ }
+ }
+
+@@ -226,9 +221,9 @@ void Item::processUpdatedProperties(Glib::RefPtr<Gio::AsyncResult>& _result) {
+
+ this->updateImage();
+ } catch (const Glib::Error& err) {
+- spdlog::warn("Failed to update properties: {}", std::string(err.what()));
++ spdlog::warn("Failed to update properties: {}", err.what());
+ } catch (const std::exception& err) {
+- spdlog::warn("Failed to update properties: {}", std::string(err.what()));
++ spdlog::warn("Failed to update properties: {}", err.what());
+ }
+ update_pending_.clear();
+ }
+@@ -250,7 +245,7 @@ static const std::map<std::string_view, std::set<std::string_view>> signal2props
+
+ void Item::onSignal(const Glib::ustring& sender_name, const Glib::ustring& signal_name,
+ const Glib::VariantContainerBase& arguments) {
+- spdlog::trace("Tray item '{}' got signal {}", id, std::string(signal_name));
++ spdlog::trace("Tray item '{}' got signal {}", id, signal_name);
+ auto changed = signal2props.find(signal_name.raw());
+ if (changed != signal2props.end()) {
+ if (update_pending_.empty()) {
+diff --git a/subprojects/fmt.wrap b/subprojects/fmt.wrap
+index 42b615963..fd508477f 100644
+--- a/subprojects/fmt.wrap
++++ b/subprojects/fmt.wrap
+@@ -1,13 +1,13 @@
+ [wrap-file]
+-directory = fmt-11.0.1
+-source_url = https://github.com/fmtlib/fmt/archive/11.0.1.tar.gz
+-source_filename = fmt-11.0.1.tar.gz
+-source_hash = 7d009f7f89ac84c0a83f79ed602463d092fbf66763766a907c97fd02b100f5e9
+-patch_filename = fmt_11.0.1-1_patch.zip
+-patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.1-1/get_patch
+-patch_hash = 0a8b93d1ee6d84a82d3872a9bfb4c3977d8a53f7f484d42d1f7ed63ed496d549
+-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.1-1/fmt-11.0.1.tar.gz
+-wrapdb_version = 11.0.1-1
++directory = fmt-11.0.2
++source_url = https://github.com/fmtlib/fmt/archive/11.0.2.tar.gz
++source_filename = fmt-11.0.2.tar.gz
++source_hash = 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f
++patch_filename = fmt_11.0.2-1_patch.zip
++patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.2-1/get_patch
++patch_hash = 90c9e3b8e8f29713d40ca949f6f93ad115d78d7fb921064112bc6179e6427c5e
++source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.2-1/fmt-11.0.2.tar.gz
++wrapdb_version = 11.0.2-1
+
+ [provide]
+ fmt = fmt_dep
diff --git a/gui-apps/waybar/files/waybar-0.15.0-add-hyprland-lua-ipc.patch b/gui-apps/waybar/files/waybar-0.15.0-add-hyprland-lua-ipc.patch
deleted file mode 100644
index c28cba9cc8bf..000000000000
--- a/gui-apps/waybar/files/waybar-0.15.0-add-hyprland-lua-ipc.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-commit 37d6ad727c0973e343bf4bf07031f61aba772d56
-Author: Higor Prado <higorevop@gmail.com>
-
- fix(hyprland/workspaces): adapt dispatch commands for Lua IPC protocol
-
-diff --git a/include/modules/hyprland/backend.hpp b/include/modules/hyprland/backend.hpp
-index 2e0ef657..84e056fa 100644
---- a/include/modules/hyprland/backend.hpp
-+++ b/include/modules/hyprland/backend.hpp
-@@ -3,6 +3,7 @@
- #include <filesystem>
- #include <list>
- #include <mutex>
-+#include <optional>
- #include <string>
- #include <thread>
- #include <utility>
-@@ -34,6 +35,10 @@ class IPC {
- Json::Value getSocket1JsonReply(const std::string& rq);
- static std::filesystem::path getSocketFolder(const char* instanceSig);
-
-+ /// Dispatch a Hyprland command. Automatically uses the correct protocol
-+ /// (legacy text or Lua-based) depending on the running Hyprland version.
-+ static std::string dispatch(const std::string& dispatcher, const std::string& arg);
-+
- protected:
- static std::filesystem::path socketFolder_;
-
-@@ -41,6 +46,15 @@ class IPC {
- void socketListener();
- void parseIPC(const std::string&);
-
-+ /// Detect whether the running Hyprland uses the Lua-based IPC protocol.
-+ /// Returns true for Hyprland >= 0.54 (Lua config), false for older versions.
-+ static bool isLuaProtocol();
-+
-+ /// Build a Lua-format dispatch command string.
-+ static std::string buildLuaDispatch(const std::string& dispatcher, const std::string& arg);
-+
-+ static std::optional<bool> s_luaProtocolDetected_; // cached detection result
-+
- std::thread ipcThread_;
- std::mutex callbackMutex_;
- util::JsonParser parser_;
-diff --git a/src/modules/hyprland/backend.cpp b/src/modules/hyprland/backend.cpp
-index 7060d304..1f772ecb 100644
---- a/src/modules/hyprland/backend.cpp
-+++ b/src/modules/hyprland/backend.cpp
-@@ -10,11 +10,13 @@
- #include <unistd.h>
-
- #include <filesystem>
-+#include <optional>
- #include <string>
-
- namespace waybar::modules::hyprland {
-
- std::filesystem::path IPC::socketFolder_;
-+std::optional<bool> IPC::s_luaProtocolDetected_;
-
- std::filesystem::path IPC::getSocketFolder(const char* instanceSig) {
- static std::mutex folderMutex;
-@@ -243,4 +245,69 @@ Json::Value IPC::getSocket1JsonReply(const std::string& rq) {
- return parser_.parse(reply);
- }
-
-+bool IPC::isLuaProtocol() {
-+ if (s_luaProtocolDetected_.has_value()) {
-+ return *s_luaProtocolDetected_;
-+ }
-+
-+ // Probe: send a harmless old-style dispatch and check the error.
-+ // In Lua-based Hyprland (>= 0.54) the error contains "hl.dispatch".
-+ // In older versions it returns "ok" or a different error.
-+ auto reply = getSocket1Reply("dispatch workspace __waybar_probe__");
-+ bool luaProto = reply.find("hl.dispatch") != std::string::npos;
-+
-+ if (luaProto) {
-+ spdlog::info("Hyprland IPC: detected Lua-based dispatch protocol (Hyprland >= 0.54)");
-+ } else {
-+ spdlog::info("Hyprland IPC: detected legacy dispatch protocol");
-+ }
-+
-+ s_luaProtocolDetected_ = luaProto;
-+ return luaProto;
-+}
-+
-+std::string IPC::buildLuaDispatch(const std::string& dispatcher, const std::string& arg) {
-+ // Map old-style dispatchers to the new Lua hl.dsp API.
-+ //
-+ // Old format: dispatch workspace 1
-+ // New format: /dispatch hl.dsp.focus({ workspace = "1" })
-+ //
-+ // Old format: dispatch focusworkspaceoncurrentmonitor 2
-+ // New format: /dispatch hl.dsp.focus({ workspace = "2", monitor = "current" })
-+ //
-+ // Old format: dispatch togglespecialworkspace name
-+ // New format: /dispatch hl.dsp.workspace.toggle_special("name")
-+
-+ if (dispatcher == "workspace") {
-+ return "/dispatch hl.dsp.focus({ workspace = \"" + arg + "\" })";
-+ }
-+ if (dispatcher == "focusworkspaceoncurrentmonitor") {
-+ return "/dispatch hl.dsp.focus({ workspace = \"" + arg + "\", monitor = \"current\" })";
-+ }
-+ if (dispatcher == "togglespecialworkspace") {
-+ if (arg.empty()) {
-+ return "/dispatch hl.dsp.workspace.toggle_special()";
-+ }
-+ return "/dispatch hl.dsp.workspace.toggle_special(\"" + arg + "\")";
-+ }
-+
-+ // Fallback for any other dispatcher: try the old format wrapped in dispatch().
-+ // This may not work for all dispatchers, but it's a reasonable default.
-+ spdlog::warn("Hyprland IPC: unknown dispatcher '{}' in Lua mode, attempting generic format",
-+ dispatcher);
-+ return "/dispatch hl.dsp." + dispatcher + "(\"" + arg + "\")";
-+}
-+
-+std::string IPC::dispatch(const std::string& dispatcher, const std::string& arg) {
-+ if (isLuaProtocol()) {
-+ return getSocket1Reply(buildLuaDispatch(dispatcher, arg));
-+ }
-+ // Legacy format: "dispatch <dispatcher> <arg>"
-+ std::string cmd = "dispatch " + dispatcher;
-+ if (!arg.empty()) {
-+ cmd += " " + arg;
-+ }
-+ return getSocket1Reply(cmd);
-+}
-+
- } // namespace waybar::modules::hyprland
-diff --git a/src/modules/hyprland/workspace.cpp b/src/modules/hyprland/workspace.cpp
-index 4cdd8910..b8090bd0 100644
---- a/src/modules/hyprland/workspace.cpp
-+++ b/src/modules/hyprland/workspace.cpp
-@@ -71,20 +71,20 @@ bool Workspace::handleClicked(GdkEventButton* bt) const {
- try {
- if (id() > 0) { // normal
- if (m_workspaceManager.moveToMonitor()) {
-- m_ipc.getSocket1Reply("dispatch focusworkspaceoncurrentmonitor " + std::to_string(id()));
-+ IPC::dispatch("focusworkspaceoncurrentmonitor", std::to_string(id()));
- } else {
-- m_ipc.getSocket1Reply("dispatch workspace " + std::to_string(id()));
-+ IPC::dispatch("workspace", std::to_string(id()));
- }
- } else if (!isSpecial()) { // named (this includes persistent)
- if (m_workspaceManager.moveToMonitor()) {
-- m_ipc.getSocket1Reply("dispatch focusworkspaceoncurrentmonitor name:" + name());
-+ IPC::dispatch("focusworkspaceoncurrentmonitor", "name:" + name());
- } else {
-- m_ipc.getSocket1Reply("dispatch workspace name:" + name());
-+ IPC::dispatch("workspace", "name:" + name());
- }
- } else if (id() != -99) { // named special
-- m_ipc.getSocket1Reply("dispatch togglespecialworkspace " + name());
-+ IPC::dispatch("togglespecialworkspace", name());
- } else { // special
-- m_ipc.getSocket1Reply("dispatch togglespecialworkspace");
-+ IPC::dispatch("togglespecialworkspace", "");
- }
- return true;
- } catch (const std::exception& e) {
diff --git a/gui-apps/waybar/waybar-0.10.4-r1.ebuild b/gui-apps/waybar/waybar-0.10.4-r1.ebuild
new file mode 100644
index 000000000000..02de587d2d29
--- /dev/null
+++ b/gui-apps/waybar/waybar-0.10.4-r1.ebuild
@@ -0,0 +1,101 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+DESCRIPTION="Highly customizable Wayland bar for Sway and Wlroots based compositors"
+HOMEPAGE="https://github.com/Alexays/Waybar"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Alexays/${PN^}.git"
+else
+ SRC_URI="https://github.com/Alexays/${PN^}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm64"
+ S="${WORKDIR}/${PN^}-${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="evdev experimental jack +libinput +logind mpd mpris network pipewire pulseaudio sndio systemd test tray +udev upower wifi"
+REQUIRED_USE="
+ upower? ( logind )
+"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=app-text/scdoc-1.9.2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/wayland-scanner
+ virtual/pkgconfig
+"
+RDEPEND="
+ dev-cpp/cairomm:0
+ dev-cpp/glibmm:2
+ dev-cpp/gtkmm:3.0
+ dev-libs/glib:2
+ dev-libs/jsoncpp:=
+ dev-libs/libsigc++:2
+ >=dev-libs/libfmt-8.1.1:=
+ >=dev-libs/spdlog-1.10.0:=
+ dev-libs/date:=
+ dev-libs/wayland
+ gui-libs/gtk-layer-shell
+ media-video/pipewire:=
+ x11-libs/gtk+:3[wayland]
+ x11-libs/libxkbcommon
+ evdev? ( dev-libs/libevdev )
+ jack? ( virtual/jack )
+ libinput? ( dev-libs/libinput:= )
+ logind? (
+ || ( sys-apps/systemd
+ sys-auth/elogind )
+ )
+ mpd? ( media-libs/libmpdclient )
+ mpris? ( >=media-sound/playerctl-2 )
+ network? ( dev-libs/libnl:3 )
+ pipewire? ( media-video/wireplumber:0/0.5 )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio:= )
+ systemd? ( sys-apps/systemd:= )
+ tray? (
+ dev-libs/libayatana-appindicator
+ dev-libs/libdbusmenu[gtk3]
+ )
+ udev? ( virtual/libudev:= )
+ upower? ( sys-power/upower:= )
+ wifi? ( sys-apps/util-linux )
+"
+DEPEND="${RDEPEND}
+ dev-libs/wayland-protocols
+ test? ( dev-cpp/catch:0 )
+"
+
+src_configure() {
+ local emesonargs=(
+ -Dman-pages=enabled
+ -Dcava=disabled
+ $(meson_feature evdev libevdev)
+ $(meson_feature jack)
+ $(meson_feature libinput)
+ $(meson_feature logind)
+ $(meson_feature mpd)
+ $(meson_feature mpris)
+ $(meson_feature network libnl)
+ $(meson_feature pulseaudio)
+ $(meson_feature pipewire wireplumber)
+ $(meson_feature pipewire)
+ $(meson_feature sndio)
+ $(meson_feature systemd)
+ $(meson_feature test tests)
+ $(meson_feature tray dbusmenu-gtk)
+ $(meson_feature udev libudev)
+ $(meson_feature upower upower_glib)
+ $(meson_feature wifi rfkill)
+ $(meson_use experimental)
+ )
+ meson_src_configure
+}
diff --git a/gui-apps/waybar/waybar-0.11.0-r1.ebuild b/gui-apps/waybar/waybar-0.11.0-r1.ebuild
new file mode 100644
index 000000000000..845a6694bb69
--- /dev/null
+++ b/gui-apps/waybar/waybar-0.11.0-r1.ebuild
@@ -0,0 +1,105 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+DESCRIPTION="Highly customizable Wayland bar for Sway and Wlroots based compositors"
+HOMEPAGE="https://github.com/Alexays/Waybar"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Alexays/${PN^}.git"
+else
+ SRC_URI="https://github.com/Alexays/${PN^}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm64"
+ S="${WORKDIR}/${PN^}-${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="evdev experimental jack +libinput +logind mpd mpris network pipewire pulseaudio sndio systemd test tray +udev upower wifi"
+REQUIRED_USE="
+ upower? ( logind )
+"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=app-text/scdoc-1.9.2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/wayland-scanner
+ virtual/pkgconfig
+"
+RDEPEND="
+ dev-cpp/cairomm:0
+ dev-cpp/glibmm:2
+ dev-cpp/gtkmm:3.0
+ dev-libs/glib:2
+ dev-libs/jsoncpp:=
+ dev-libs/libsigc++:2
+ >=dev-libs/libfmt-8.1.1:=
+ >=dev-libs/spdlog-1.10.0:=
+ dev-libs/date:=
+ dev-libs/wayland
+ gui-libs/gtk-layer-shell
+ media-video/pipewire:=
+ x11-libs/gtk+:3[wayland]
+ x11-libs/libxkbcommon
+ evdev? ( dev-libs/libevdev )
+ jack? ( virtual/jack )
+ libinput? ( dev-libs/libinput:= )
+ logind? (
+ || ( sys-apps/systemd
+ sys-auth/elogind )
+ )
+ mpd? ( media-libs/libmpdclient )
+ mpris? ( >=media-sound/playerctl-2 )
+ network? ( dev-libs/libnl:3 )
+ pipewire? ( media-video/wireplumber:0/0.5 )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio:= )
+ systemd? ( sys-apps/systemd:= )
+ tray? (
+ dev-libs/libayatana-appindicator
+ dev-libs/libdbusmenu[gtk3]
+ )
+ udev? ( virtual/libudev:= )
+ upower? ( sys-power/upower:= )
+ wifi? ( sys-apps/util-linux )
+"
+DEPEND="${RDEPEND}
+ dev-libs/wayland-protocols
+ test? ( dev-cpp/catch:0 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/tray-icons-fix.patch
+)
+
+src_configure() {
+ local emesonargs=(
+ -Dman-pages=enabled
+ -Dcava=disabled
+ $(meson_feature evdev libevdev)
+ $(meson_feature jack)
+ $(meson_feature libinput)
+ $(meson_feature logind)
+ $(meson_feature mpd)
+ $(meson_feature mpris)
+ $(meson_feature network libnl)
+ $(meson_feature pulseaudio)
+ $(meson_feature pipewire wireplumber)
+ $(meson_feature pipewire)
+ $(meson_feature sndio)
+ $(meson_feature systemd)
+ $(meson_feature test tests)
+ $(meson_feature tray dbusmenu-gtk)
+ $(meson_feature udev libudev)
+ $(meson_feature upower upower_glib)
+ $(meson_feature wifi rfkill)
+ $(meson_use experimental)
+ )
+ meson_src_configure
+}
diff --git a/gui-apps/waybar/waybar-0.11.0.ebuild b/gui-apps/waybar/waybar-0.11.0.ebuild
new file mode 100644
index 000000000000..20a16f9595aa
--- /dev/null
+++ b/gui-apps/waybar/waybar-0.11.0.ebuild
@@ -0,0 +1,101 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+DESCRIPTION="Highly customizable Wayland bar for Sway and Wlroots based compositors"
+HOMEPAGE="https://github.com/Alexays/Waybar"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Alexays/${PN^}.git"
+else
+ SRC_URI="https://github.com/Alexays/${PN^}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm64"
+ S="${WORKDIR}/${PN^}-${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="evdev experimental jack +libinput +logind mpd mpris network pipewire pulseaudio sndio systemd test tray +udev upower wifi"
+REQUIRED_USE="
+ upower? ( logind )
+"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=app-text/scdoc-1.9.2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/wayland-scanner
+ virtual/pkgconfig
+"
+RDEPEND="
+ dev-cpp/cairomm:0
+ dev-cpp/glibmm:2
+ dev-cpp/gtkmm:3.0
+ dev-libs/glib:2
+ dev-libs/jsoncpp:=
+ dev-libs/libsigc++:2
+ >=dev-libs/libfmt-8.1.1:=
+ >=dev-libs/spdlog-1.10.0:=
+ dev-libs/date:=
+ dev-libs/wayland
+ gui-libs/gtk-layer-shell
+ media-video/pipewire:=
+ x11-libs/gtk+:3[wayland]
+ x11-libs/libxkbcommon
+ evdev? ( dev-libs/libevdev )
+ jack? ( virtual/jack )
+ libinput? ( dev-libs/libinput:= )
+ logind? (
+ || ( sys-apps/systemd
+ sys-auth/elogind )
+ )
+ mpd? ( media-libs/libmpdclient )
+ mpris? ( >=media-sound/playerctl-2 )
+ network? ( dev-libs/libnl:3 )
+ pipewire? ( media-video/wireplumber:0/0.5 )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio:= )
+ systemd? ( sys-apps/systemd:= )
+ tray? (
+ dev-libs/libayatana-appindicator
+ dev-libs/libdbusmenu[gtk3]
+ )
+ udev? ( virtual/libudev:= )
+ upower? ( sys-power/upower:= )
+ wifi? ( sys-apps/util-linux )
+"
+DEPEND="${RDEPEND}
+ dev-libs/wayland-protocols
+ test? ( dev-cpp/catch:0 )
+"
+
+src_configure() {
+ local emesonargs=(
+ -Dman-pages=enabled
+ -Dcava=disabled
+ $(meson_feature evdev libevdev)
+ $(meson_feature jack)
+ $(meson_feature libinput)
+ $(meson_feature logind)
+ $(meson_feature mpd)
+ $(meson_feature mpris)
+ $(meson_feature network libnl)
+ $(meson_feature pulseaudio)
+ $(meson_feature pipewire wireplumber)
+ $(meson_feature pipewire)
+ $(meson_feature sndio)
+ $(meson_feature systemd)
+ $(meson_feature test tests)
+ $(meson_feature tray dbusmenu-gtk)
+ $(meson_feature udev libudev)
+ $(meson_feature upower upower_glib)
+ $(meson_feature wifi rfkill)
+ $(meson_use experimental)
+ )
+ meson_src_configure
+}
diff --git a/gui-apps/waybar/waybar-0.12.0.ebuild b/gui-apps/waybar/waybar-0.12.0.ebuild
new file mode 100644
index 000000000000..93a8f6ef1466
--- /dev/null
+++ b/gui-apps/waybar/waybar-0.12.0.ebuild
@@ -0,0 +1,105 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson optfeature
+
+DESCRIPTION="Highly customizable Wayland bar for Sway and Wlroots based compositors"
+HOMEPAGE="https://github.com/Alexays/Waybar"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Alexays/${PN^}.git"
+else
+ SRC_URI="https://github.com/Alexays/${PN^}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm64"
+ S="${WORKDIR}/${PN^}-${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="evdev experimental jack +libinput +logind mpd mpris network pipewire pulseaudio sndio systemd test tray +udev upower wifi"
+REQUIRED_USE="
+ upower? ( logind )
+"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=app-text/scdoc-1.9.2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/wayland-scanner
+ virtual/pkgconfig
+"
+RDEPEND="
+ dev-cpp/cairomm:0
+ dev-cpp/glibmm:2
+ dev-cpp/gtkmm:3.0
+ dev-libs/glib:2
+ dev-libs/jsoncpp:=
+ dev-libs/libsigc++:2
+ >=dev-libs/libfmt-8.1.1:=
+ >=dev-libs/spdlog-1.10.0:=
+ dev-libs/date:=
+ dev-libs/wayland
+ >=gui-libs/gtk-layer-shell-0.9.0
+ media-video/pipewire:=
+ x11-libs/gtk+:3[wayland]
+ x11-libs/libxkbcommon
+ evdev? ( dev-libs/libevdev )
+ jack? ( virtual/jack )
+ libinput? ( dev-libs/libinput:= )
+ logind? (
+ || ( sys-apps/systemd
+ sys-auth/elogind )
+ )
+ mpd? ( media-libs/libmpdclient )
+ mpris? ( >=media-sound/playerctl-2 )
+ network? ( dev-libs/libnl:3 )
+ pipewire? ( media-video/wireplumber:0/0.5 )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio:= )
+ systemd? ( sys-apps/systemd:= )
+ tray? (
+ dev-libs/libayatana-appindicator
+ dev-libs/libdbusmenu[gtk3]
+ )
+ udev? ( virtual/libudev:= )
+ upower? ( sys-power/upower:= )
+ wifi? ( sys-apps/util-linux )
+"
+DEPEND="${RDEPEND}
+ dev-libs/wayland-protocols
+ test? ( dev-cpp/catch:0 )
+"
+
+src_configure() {
+ local emesonargs=(
+ -Dman-pages=enabled
+ -Dcava=disabled
+ $(meson_feature evdev libevdev)
+ $(meson_feature jack)
+ $(meson_feature libinput)
+ $(meson_feature logind)
+ $(meson_feature mpd)
+ $(meson_feature mpris)
+ $(meson_feature network libnl)
+ $(meson_feature pulseaudio)
+ $(meson_feature pipewire wireplumber)
+ $(meson_feature pipewire)
+ $(meson_feature sndio)
+ $(meson_feature systemd)
+ $(meson_feature test tests)
+ $(meson_feature tray dbusmenu-gtk)
+ $(meson_feature udev libudev)
+ $(meson_feature upower upower_glib)
+ $(meson_feature wifi rfkill)
+ $(meson_use experimental)
+ )
+ meson_src_configure
+}
+
+pkg_postinst() {
+ optfeature "default icons support" "media-fonts/fontawesome"
+}
diff --git a/gui-apps/waybar/waybar-0.14.0.ebuild b/gui-apps/waybar/waybar-0.14.0.ebuild
new file mode 100644
index 000000000000..494b727a9d27
--- /dev/null
+++ b/gui-apps/waybar/waybar-0.14.0.ebuild
@@ -0,0 +1,121 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson optfeature toolchain-funcs
+
+DESCRIPTION="Highly customizable Wayland bar for Sway and Wlroots based compositors"
+HOMEPAGE="https://github.com/Alexays/Waybar"
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Alexays/${PN^}.git"
+else
+ SRC_URI="https://github.com/Alexays/${PN^}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm64"
+ S="${WORKDIR}/${PN^}-${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+IUSE="backlight evdev experimental gps jack +libinput +logind mpd mpris network niri pipewire pulseaudio sndio systemd test tray +udev upower wifi"
+REQUIRED_USE="
+ upower? ( logind )
+ backlight? ( udev logind )
+"
+
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ >=app-text/scdoc-1.9.2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/wayland-scanner
+ virtual/pkgconfig
+"
+RDEPEND="
+ dev-cpp/cairomm:0
+ dev-cpp/glibmm:2
+ dev-cpp/gtkmm:3.0
+ dev-libs/glib:2
+ dev-libs/jsoncpp:=
+ dev-libs/libsigc++:2
+ >=dev-libs/libfmt-8.1.1:=
+ >=dev-libs/spdlog-1.10.0:=
+ dev-libs/date:=
+ dev-libs/wayland
+ >=gui-libs/gtk-layer-shell-0.9.0
+ media-video/pipewire:=
+ x11-libs/gtk+:3[wayland]
+ x11-libs/libxkbcommon
+ evdev? ( dev-libs/libevdev )
+ gps? ( sci-geosciences/gpsd:= )
+ jack? ( virtual/jack )
+ libinput? ( dev-libs/libinput:= )
+ logind? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( sys-auth/elogind )
+ )
+ mpd? ( media-libs/libmpdclient )
+ mpris? ( >=media-sound/playerctl-2 )
+ network? ( dev-libs/libnl:3 )
+ pipewire? ( media-video/wireplumber:0/0.5 )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio:= )
+ systemd? ( sys-apps/systemd:= )
+ tray? (
+ dev-libs/libayatana-appindicator
+ dev-libs/libdbusmenu[gtk3]
+ )
+ udev? ( virtual/libudev:= )
+ upower? ( sys-power/upower:= )
+ wifi? ( sys-apps/util-linux )
+"
+DEPEND="${RDEPEND}
+ dev-libs/wayland-protocols
+ test? ( dev-cpp/catch:0 )
+"
+PATCHES=(
+ "${FILESDIR}"/meson-fix-build.patch
+)
+
+src_configure() {
+ local cxx_stdlib=$(tc-get-cxx-stdlib)
+ einfo "C++ standard library: ${cxx_stdlib:-unknown}"
+ local libcxx=false
+ if [[ ${cxx_stdlib} == libc++ ]]; then
+ libcxx=true
+ fi
+
+ local emesonargs=(
+ -Dlibcxx=${libcxx}
+ -Dman-pages=enabled
+ -Dcava=disabled # depends on LukashonakV/cava fork, but media-sound/cava is karlstav/cava
+ $(meson_feature evdev libevdev)
+ $(meson_feature gps)
+ $(meson_feature jack)
+ $(meson_feature libinput)
+ $(meson_feature logind)
+ $(meson_feature mpd)
+ $(meson_feature mpris)
+ $(meson_feature network libnl)
+ $(meson_feature pulseaudio)
+ $(meson_feature pipewire wireplumber)
+ $(meson_feature pipewire)
+ $(meson_feature sndio)
+ $(meson_feature systemd)
+ $(meson_feature test tests)
+ $(meson_feature tray dbusmenu-gtk)
+ $(meson_feature udev libudev)
+ $(meson_feature upower upower_glib)
+ $(meson_feature wifi rfkill)
+ $(meson_use backlight login-proxy)
+ $(meson_use experimental)
+ $(meson_use niri) # communicates by socket with gui-wm/niri::guru
+ )
+ meson_src_configure
+}
+
+pkg_postinst() {
+ optfeature "default icons support" "media-fonts/fontawesome"
+}