pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/wayland/waybar



Module Name:    pkgsrc
Committed By:   kikadf
Date:           Mon Aug 24 14:25:32 UTC 2026

Added Files:
        pkgsrc/wayland/waybar: DESCR Makefile PLIST distinfo
        pkgsrc/wayland/waybar/patches: patch-include_modules_battery.hpp
            patch-include_util_udev__deleter.hpp patch-meson.build
            patch-src_factory.cpp patch-src_modules_battery.cpp
            patch-src_modules_cpu__frequency_bsd.cpp
            patch-src_modules_custom.cpp patch-src_modules_simpleclock.cpp
            patch-src_modules_user.cpp patch-src_util_icon__loader.cpp

Log Message:
waybar: new package

Waybar is a highly customizable Wayland bar for Sway and
Wlroots based compositors.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 pkgsrc/wayland/waybar/DESCR \
    pkgsrc/wayland/waybar/Makefile pkgsrc/wayland/waybar/PLIST \
    pkgsrc/wayland/waybar/distinfo
cvs rdiff -u -r0 -r1.1 \
    pkgsrc/wayland/waybar/patches/patch-include_modules_battery.hpp \
    pkgsrc/wayland/waybar/patches/patch-include_util_udev__deleter.hpp \
    pkgsrc/wayland/waybar/patches/patch-meson.build \
    pkgsrc/wayland/waybar/patches/patch-src_factory.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_modules_battery.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_modules_cpu__frequency_bsd.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_modules_custom.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_modules_simpleclock.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_modules_user.cpp \
    pkgsrc/wayland/waybar/patches/patch-src_util_icon__loader.cpp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: pkgsrc/wayland/waybar/DESCR
diff -u /dev/null pkgsrc/wayland/waybar/DESCR:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/DESCR Mon Aug 24 14:25:31 2026
@@ -0,0 +1,2 @@
+Highly customizable Wayland bar for Sway and
+Wlroots based compositors.
Index: pkgsrc/wayland/waybar/Makefile
diff -u /dev/null pkgsrc/wayland/waybar/Makefile:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/Makefile      Mon Aug 24 14:25:31 2026
@@ -0,0 +1,65 @@
+# $NetBSD: Makefile,v 1.1 2026/08/24 14:25:31 kikadf Exp $
+
+DISTNAME=      waybar-0.15.0
+CATEGORIES=    wayland
+MASTER_SITES=  ${MASTER_SITE_GITHUB:=Alexays/}
+GITHUB_PROJECT=        Waybar
+GITHUB_TAG=    ${PKGVERSION_NOREV}
+
+MAINTAINER=    kikadf%NetBSD.org@localhost
+HOMEPAGE=      https://github.com/Alexays/Waybar/
+COMMENT=       Wayland bar for Wlroots based compositors
+LICENSE=       mit
+
+USE_CXX_FEATURES+=     filesystem
+USE_LANGUAGES=         c c++
+
+USE_TOOLS+=    pkg-config gdbus-codegen
+
+SUBST_CLASSES+=                nogit
+SUBST_STAGE.nogit=     pre-configure
+SUBST_MESSAGE.nogit=   Set version
+SUBST_FILES.nogit+=    meson.build
+SUBST_SED.nogit+=      -e 's/git =/\#git =/g'
+SUBST_SED.nogit+=      -e 's/git.found()/false/g'
+
+SUBST_CLASSES+=                conf
+SUBST_STAGE.conf=      pre-configure
+SUBST_MESSAGE.conf=    Set SYSCONFDIR
+SUBST_FILES.conf+=     src/config.cpp
+SUBST_SED.conf+=       -e 's|SYSCONFDIR "|"${PKG_SYSCONFBASE}|g'
+
+EGDIR=         ${PREFIX}/share/examples/waybar
+CONF_FILES=    ${EGDIR}/config.jsonc ${PKG_SYSCONFDIR}/config.jsonc
+CONF_FILES+=   ${EGDIR}/style.css ${PKG_SYSCONFDIR}/style.css
+CONF_FILES+=   ${EGDIR}/power_menu.xml ${PKG_SYSCONFDIR}/power_menu.xml
+
+PKG_SYSCONFSUBDIR=     xdg/waybar
+BUILD_DEFS+=           PKG_SYSCONFBASE
+
+post-install:
+       ${INSTALL_DATA} ${WRKSRC}/resources/custom_modules/power_menu.xml \
+               ${DESTDIR}${EGDIR}
+
+# Linux uses udev for battery plugin
+.include "../../mk/bsd.fast.prefs.mk"
+.if ${OPSYS} == "Linux"
+.include "../../sysutils/libudev/buildlink3.mk"
+.endif
+
+.include "../../devel/meson/build.mk"
+.include "../../textproc/scdoc/tool.mk"
+.include "../../devel/chrono-date/buildlink3.mk"
+.include "../../devel/libdbusmenu-gtk3/buildlink3.mk"
+.include "../../devel/libinotify/buildlink3.mk"
+.include "../../devel/spdlog/buildlink3.mk"
+.include "../../devel/wayland/buildlink3.mk"
+.include "../../devel/wayland-protocols/buildlink3.mk"
+.include "../../geography/gpsd/buildlink3.mk"
+.include "../../textproc/fmtlib/buildlink3.mk"
+.include "../../textproc/jsoncpp/buildlink3.mk"
+.include "../../textproc/libxml2/buildlink3.mk"
+.include "../../wayland/gtk-layer-shell/buildlink3.mk"
+.include "../../x11/libxkbcommon/buildlink3.mk"
+.include "../../x11/gtkmm3/buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
Index: pkgsrc/wayland/waybar/PLIST
diff -u /dev/null pkgsrc/wayland/waybar/PLIST:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/PLIST Mon Aug 24 14:25:31 2026
@@ -0,0 +1,43 @@
+@comment $NetBSD: PLIST,v 1.1 2026/08/24 14:25:31 kikadf Exp $
+bin/waybar
+man/man5/waybar-battery.5
+man/man5/waybar-cffi.5
+man/man5/waybar-clock.5
+man/man5/waybar-cpu.5
+man/man5/waybar-custom.5
+man/man5/waybar-disk.5
+man/man5/waybar-dwl-tags.5
+man/man5/waybar-dwl-window.5
+man/man5/waybar-ext-workspaces.5
+man/man5/waybar-gamemode.5
+man/man5/waybar-gps.5
+man/man5/waybar-hyprland-language.5
+man/man5/waybar-hyprland-submap.5
+man/man5/waybar-hyprland-window.5
+man/man5/waybar-hyprland-workspaces.5
+man/man5/waybar-idle-inhibitor.5
+man/man5/waybar-image.5
+man/man5/waybar-inhibitor.5
+man/man5/waybar-memory.5
+man/man5/waybar-menu.5
+man/man5/waybar-niri-language.5
+man/man5/waybar-niri-window.5
+man/man5/waybar-niri-workspaces.5
+man/man5/waybar-river-layout.5
+man/man5/waybar-river-mode.5
+man/man5/waybar-river-tags.5
+man/man5/waybar-river-window.5
+man/man5/waybar-states.5
+man/man5/waybar-styles.5
+man/man5/waybar-sway-language.5
+man/man5/waybar-sway-mode.5
+man/man5/waybar-sway-scratchpad.5
+man/man5/waybar-sway-window.5
+man/man5/waybar-sway-workspaces.5
+man/man5/waybar-temperature.5
+man/man5/waybar-tray.5
+man/man5/waybar-wlr-taskbar.5
+man/man5/waybar.5
+share/examples/waybar/config.jsonc
+share/examples/waybar/power_menu.xml
+share/examples/waybar/style.css
Index: pkgsrc/wayland/waybar/distinfo
diff -u /dev/null pkgsrc/wayland/waybar/distinfo:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/distinfo      Mon Aug 24 14:25:31 2026
@@ -0,0 +1,15 @@
+$NetBSD: distinfo,v 1.1 2026/08/24 14:25:31 kikadf Exp $
+
+BLAKE2s (waybar-0.15.0.tar.gz) = 59b011bb71da6acc9b3ee333f6ab9bbb4ccbb22b1627112b53b13135db4baa22
+SHA512 (waybar-0.15.0.tar.gz) = f267c1ad2af1e4e74c3d8c966009a013c0b5c2849bfaf312b3b91e9d6f6856dc5466118f308208948118ea1de0cf70986cc3b592cc830f84d634b8518c5b8c9e
+Size (waybar-0.15.0.tar.gz) = 355671 bytes
+SHA1 (patch-include_modules_battery.hpp) = 3bebca10de357bc25a70d26d677a8f7717d3b495
+SHA1 (patch-include_util_udev__deleter.hpp) = 8f95df3fc76f9f7461fe4576994c6fdfacb3b91b
+SHA1 (patch-meson.build) = ffb2de1b1c11b79312ef166411ac93f3f4433cc7
+SHA1 (patch-src_factory.cpp) = de849a029ac8b51381bbe4b94ea59ab9c94c44ef
+SHA1 (patch-src_modules_battery.cpp) = 4ee104fb0ed46112c09d8559687d910e08ee93b0
+SHA1 (patch-src_modules_cpu__frequency_bsd.cpp) = 9ad194942940b2b38b0f01d6a96408cd23969269
+SHA1 (patch-src_modules_custom.cpp) = 644740e4862444b7ed33523affe5d97e5fcbdd32
+SHA1 (patch-src_modules_simpleclock.cpp) = 7ffa485e5cc9033e090d46133654243cbd1b3f8d
+SHA1 (patch-src_modules_user.cpp) = 7b9d5578a64d2b1fefbecd650549c5e9f8ea19ad
+SHA1 (patch-src_util_icon__loader.cpp) = 29b8f755333ab617263b6f80e20c993025300e9a

Index: pkgsrc/wayland/waybar/patches/patch-include_modules_battery.hpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-include_modules_battery.hpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-include_modules_battery.hpp     Mon Aug 24 14:25:32 2026
@@ -0,0 +1,18 @@
+$NetBSD: patch-include_modules_battery.hpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Use udev only for linux
+
+--- include/modules/battery.hpp.orig   2026-05-24 09:20:05.456525925 +0000
++++ include/modules/battery.hpp
+@@ -40,9 +40,11 @@ class Battery : public ALabel {
+   void processEvents(std::string& state, std::string& status, uint8_t capacity);
+ 
+   std::map<fs::path, int> batteries_;
++#ifdef HAVE_LIBUDEV
+   std::unique_ptr<udev, util::UdevDeleter> udev_;
+   std::array<pollfd, 1> poll_fds_;
+   std::unique_ptr<udev_monitor, util::UdevMonitorDeleter> mon_;
++#endif
+   fs::path adapter_;
+   int battery_watch_fd_;
+   std::mutex battery_list_mutex_;
Index: pkgsrc/wayland/waybar/patches/patch-include_util_udev__deleter.hpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-include_util_udev__deleter.hpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-include_util_udev__deleter.hpp  Mon Aug 24 14:25:32 2026
@@ -0,0 +1,21 @@
+$NetBSD: patch-include_util_udev__deleter.hpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Use udev only for linux
+
+--- include/util/udev_deleter.hpp.orig 2026-05-24 09:05:13.454406135 +0000
++++ include/util/udev_deleter.hpp
+@@ -1,5 +1,6 @@
+ #pragma once
+ 
++#ifdef HAVE_LIBUDEV
+ #include <libudev.h>
+ 
+ namespace waybar::util {
+@@ -18,4 +19,5 @@ struct UdevEnumerateDeleter {
+ struct UdevMonitorDeleter {
+   void operator()(udev_monitor* ptr) const { udev_monitor_unref(ptr); }
+ };
+-}  // namespace waybar::util
+\ No newline at end of file
++}  // namespace waybar::util
++#endif // HAVE_LIBUDEV
Index: pkgsrc/wayland/waybar/patches/patch-meson.build
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-meson.build:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-meson.build     Mon Aug 24 14:25:32 2026
@@ -0,0 +1,49 @@
+$NetBSD: patch-meson.build,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Build battery on NetBSD, link with -lprop
+* Config files to examples
+
+--- meson.build.orig   2026-02-06 20:15:03.000000000 +0000
++++ meson.build
+@@ -58,15 +58,19 @@ if compiler.links(code, name : 'nl_langi
+     add_project_arguments('-DHAVE_LANGINFO_1STDAY', language: 'cpp')
+ endif
+ 
+-add_global_arguments(cpp_args, language : 'cpp')
+-add_global_link_arguments(cpp_link_args, language : 'cpp')
+-
+ is_linux = host_machine.system() == 'linux'
+ is_dragonfly = host_machine.system() == 'dragonfly'
+ is_freebsd = host_machine.system() == 'freebsd'
+ is_netbsd = host_machine.system() == 'netbsd'
+ is_openbsd = host_machine.system() == 'openbsd'
+ 
++if is_netbsd
++    cpp_link_args += ['-lprop']
++endif
++
++add_global_arguments(cpp_args, language : 'cpp')
++add_global_link_arguments(cpp_link_args, language : 'cpp')
++
+ thread_dep = dependency('threads')
+ fmt = dependency('fmt', version : ['>=8.1.1'], fallback : ['fmt', 'fmt_dep'])
+ spdlog = dependency('spdlog', version : ['>=1.15.2'], fallback : ['spdlog', 'spdlog_dep'], default_options : ['std_format=disabled', 'tests=disabled'])
+@@ -245,7 +249,7 @@ elif is_dragonfly or is_freebsd or is_ne
+         'man/waybar-cpu.5.scd',
+         'man/waybar-memory.5.scd',
+     )
+-    if is_freebsd
++    if is_freebsd or is_netbsd
+         src_files += files('src/modules/battery.cpp')
+         man_files += files('man/waybar-battery.5.scd')
+     endif
+@@ -572,7 +576,8 @@ executable(
+ install_data(
+     'resources/config.jsonc',
+     'resources/style.css',
+-    install_dir: sysconfdir / 'xdg/waybar'
++    #install_dir: sysconfdir / 'xdg/waybar'
++    install_dir: prefix / 'share/examples/waybar'
+ )
+ 
+ scdoc = dependency('scdoc', version: '>=1.9.2', native: true, required: get_option('man-pages'))
Index: pkgsrc/wayland/waybar/patches/patch-src_factory.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_factory.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_factory.cpp Mon Aug 24 14:25:32 2026
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_factory.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Enable battery module on NetBSD
+
+--- src/factory.cpp.orig       2026-05-24 09:08:08.278804792 +0000
++++ src/factory.cpp
+@@ -46,7 +46,7 @@
+ #include "modules/wayfire/window.hpp"
+ #include "modules/wayfire/workspaces.hpp"
+ #endif
+-#if defined(__FreeBSD__) || defined(__linux__)
++#if defined(__FreeBSD__) || defined(__linux__) || defined(__NetBSD__)
+ #include "modules/battery.hpp"
+ #endif
+ #if defined(HAVE_CPU_LINUX) || defined(HAVE_CPU_BSD)
+@@ -129,7 +129,7 @@ waybar::AModule* waybar::Factory::makeMo
+     auto hash_pos = name.find('#');
+     auto ref = name.substr(0, hash_pos);
+     auto id = hash_pos != std::string::npos ? name.substr(hash_pos + 1) : "";
+-#if defined(__FreeBSD__) || defined(__linux__)
++#if defined(__FreeBSD__) || defined(__linux__) || defined(__NetBSD__)
+     if (ref == "battery") {
+       return new waybar::modules::Battery(id, bar_, config_[name]);
+     }
Index: pkgsrc/wayland/waybar/patches/patch-src_modules_battery.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_modules_battery.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_modules_battery.cpp Mon Aug 24 14:25:32 2026
@@ -0,0 +1,219 @@
+$NetBSD: patch-src_modules_battery.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Add NetBSD support
+* Use udev only for linux
+
+--- src/modules/battery.cpp.orig       2026-02-06 20:15:03.000000000 +0000
++++ src/modules/battery.cpp
+@@ -2,15 +2,79 @@
+ 
+ #include <algorithm>
+ #include <cctype>
++#include <cstddef>
+ 
+ #include "util/command.hpp"
+ #if defined(__FreeBSD__)
+ #include <sys/sysctl.h>
+ #endif
++#ifdef HAVE_LIBUDEV
+ #include <libudev.h>
+ #include <poll.h>
+-#include <spdlog/spdlog.h>
+ #include <sys/signalfd.h>
++#endif
++#include <spdlog/spdlog.h>
++
++#if defined(__NetBSD__)
++#include <fcntl.h>
++#include <unistd.h>
++#include <prop/proplib.h>
++#include <sys/envsys.h>
++
++#define SYSMON "/dev/sysmon"
++
++static prop_array_t get_device(const char* name) {
++  prop_dictionary_t dict;
++  prop_object_t obj;
++  prop_array_t array;
++  int fd;
++
++  if (name == nullptr) { return nullptr; }
++  if ((fd = open(SYSMON, O_RDONLY)) < 0) { return nullptr; }
++  if (prop_dictionary_recv_ioctl(fd, ENVSYS_GETDICTIONARY, &dict) != 0) {
++    close(fd);
++    return nullptr;
++  }
++  close(fd);
++
++  if ((obj = prop_dictionary_get(dict, name)) == nullptr) {
++    prop_object_release(dict);
++    return nullptr;
++  }
++  if (prop_object_type(obj) != PROP_TYPE_ARRAY) {
++    prop_object_release(dict);
++    return nullptr;
++  }
++
++  array = (prop_array_t)obj;
++  prop_object_retain(array);
++  prop_object_release(dict);
++
++  return array;
++}
++
++static int64_t handle_stat(prop_dictionary_t stat, const char * key) {
++  prop_object_t obj;
++
++  if ((stat == nullptr || key == nullptr) ||
++      ((obj = prop_dictionary_get(stat, key)) == nullptr) ||
++      (prop_object_type(obj) != PROP_TYPE_NUMBER))
++  { return -1; }
++
++  return prop_number_signed_value((prop_number_t)obj);
++}
++
++static bool stat_is_valid(prop_dictionary_t stat) {
++  prop_object_t obj;
++
++  if ((stat == nullptr) ||
++      ((obj = prop_dictionary_get(stat, "state")) == nullptr) ||
++      (prop_object_type(obj) != PROP_TYPE_STRING))
++  { return false; }
++
++  return prop_string_equals_string((prop_string_t)obj, "valid");
++}
++#endif
+ 
+ waybar::modules::Battery::Battery(const std::string& id, const Bar& bar, const Json::Value& config)
+     : ALabel(config, "battery", id, "{capacity}%", 60), last_event_(""), bar_(bar) {
+@@ -56,7 +120,7 @@ waybar::modules::Battery::~Battery() {
+ }
+ 
+ void waybar::modules::Battery::worker() {
+-#if defined(__FreeBSD__)
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+   thread_timer_ = [this] {
+     dp.emit();
+     thread_timer_.sleep_for(interval_);
+@@ -248,6 +312,82 @@ waybar::modules::Battery::getInfos() {
+     // spdlog::info("{} {} {} {}", capacity,time,status,rate);
+     return {capacity, time / 60.0, status, rate, 0, 0.0F};
+ 
++#elif defined(__NetBSD__)
++    //Need: [capacity, time_remaining, status,      power, cycles,   health]
++    //      [uint8_t,  float,          std::string, float, uint16_t, float ]
++    prop_array_t bat;
++    prop_object_iterator_t iter;
++    prop_dictionary_t id;
++    prop_string_t desc;
++    int32_t cur_charge = 0;
++    int32_t max_charge = 0;
++    int32_t last_max_charge = 0;
++    int32_t charge_rate = 0;
++    int32_t discharge_rate = 0;
++    std::string status;
++    int32_t capacity;
++    float time_remaining;
++    float power;
++
++    if ((bat = get_device("acpibat0")) == nullptr) {
++        throw std::runtime_error("get acpibat0 device info failed");
++    }
++    if ((iter = prop_array_iterator(bat)) == nullptr) {
++        prop_object_release(bat);
++        throw std::runtime_error("prop_array_iterator failed");
++    }
++    while ((id = (prop_dictionary_t)prop_object_iterator_next(iter)) != nullptr) {
++        desc = (prop_string_t)prop_dictionary_get(id, "description");
++        if (desc == nullptr) continue;
++        if (prop_string_equals_string(desc, "charge")) {
++            cur_charge = handle_stat(id, "cur-value");
++            max_charge = handle_stat(id, "max-value");
++        } else if (prop_string_equals_string(desc, "last full cap")) {
++            if (stat_is_valid(id)) last_max_charge = handle_stat(id, "cur-value");
++        } else if (prop_string_equals_string(desc, "charge rate")) {
++            if (stat_is_valid(id)) charge_rate = handle_stat(id, "cur-value");
++        } else if (prop_string_equals_string(desc, "discharge rate")) {
++            if (stat_is_valid(id)) discharge_rate = handle_stat(id, "cur-value");
++        }
++    }
++    prop_object_iterator_release(iter);
++    prop_object_release(bat);
++
++    spdlog::info("{} {} {} {}", max_charge,cur_charge,charge_rate,discharge_rate);
++
++    if (max_charge <= 0) max_charge = last_max_charge;
++    if (charge_rate == 0 && (discharge_rate == 0 || discharge_rate == -1000)) {
++        time_remaining = 0.0;
++        power = 0.0;
++    } else {
++        if (charge_rate) {
++            time_remaining = -(float)(max_charge - cur_charge) / (float)charge_rate;
++            power = charge_rate;
++        } else {
++            time_remaining = -(float)cur_charge / (float)discharge_rate;
++            power = discharge_rate;
++        }
++    }
++
++    capacity = (cur_charge * 100) / max_charge;
++    // Handle full-at
++    if (config_["full-at"].isUInt()) {
++        auto full_at = config_["full-at"].asUInt();
++        if (full_at < 100) {
++            capacity = 100.f * capacity / full_at;
++        }
++    }
++    if (capacity > 100.f) {
++        // This can happen when the battery is calibrating and goes above 100%
++        // Handle it gracefully by clamping at 100%
++        capacity = 100.f;
++    }
++
++    status = getAdapterStatus(capacity);
++
++    spdlog::info("{} {} {} {}", capacity,time_remaining,status,power);
++    return {capacity, time_remaining, status, power, 0, 0.0F};
++
+ #elif defined(__linux__)
+     uint32_t total_power = 0;  // μW
+     bool total_power_exists = false;
+@@ -639,6 +779,38 @@ const std::string waybar::modules::Batte
+   bool online = state == 2;
+   std::string status{"Unknown"};  // TODO: add status in FreeBSD
+   {
++#elif defined(__NetBSD__)
++  prop_array_t ac;
++  prop_object_iterator_t iter;
++  prop_dictionary_t id;
++  prop_string_t desc;
++  std::string status;
++  bool online = false;
++
++  if ((ac = get_device("acpiacad0")) == nullptr) {
++    status = "Unknown";
++  } else {
++    if ((iter = prop_array_iterator(ac)) == nullptr){
++      prop_object_release(ac);
++      throw std::runtime_error("prop_array_iterator failed");
++    }
++    while ((id = (prop_dictionary_t)prop_object_iterator_next(iter)) != nullptr) {
++      desc = (prop_string_t)prop_dictionary_get(id, "description");
++        if (desc == nullptr) continue;
++        if (!prop_string_equals_string(desc, "connected")) continue;
++        // Unknown > Full > Not charging > Discharging > Charging
++        if (handle_stat(id, "cur-value") != 0) {
++          status = "Charging";
++          online = true;
++        } else {
++          status = "Discharging";
++        }
++        break;
++    }
++    prop_object_iterator_release(iter);
++    prop_object_release(ac);
++  }
++  {
+ #else
+   if (!adapter_.empty()) {
+     bool online;
Index: pkgsrc/wayland/waybar/patches/patch-src_modules_cpu__frequency_bsd.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_modules_cpu__frequency_bsd.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_modules_cpu__frequency_bsd.cpp      Mon Aug 24 14:25:32 2026
@@ -0,0 +1,28 @@
+$NetBSD: patch-src_modules_cpu__frequency_bsd.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Add NetBSD support
+
+--- src/modules/cpu_frequency/bsd.cpp.orig     2026-05-25 08:52:26.638052357 +0000
++++ src/modules/cpu_frequency/bsd.cpp
+@@ -8,7 +8,7 @@ std::vector<float> waybar::modules::CpuF
+   size_t len;
+   int32_t freq;
+ 
+-#ifndef __OpenBSD__
++#if defined(__FreeBSD__)
+   char buffer[256];
+   uint32_t i = 0;
+   while (true) {
+@@ -18,7 +18,11 @@ std::vector<float> waybar::modules::CpuF
+     frequencies.push_back(freq);
+     ++i;
+   }
+-#else
++#elif defined(__NetBSD__)
++  if (sysctlbyname("machdep.cpu.frequency.current", &freq, &len, NULL, 0) == 0) {
++    frequencies.push_back((float)freq);
++  }
++#elif defined(__OpenBSD__)
+   int getMhz[] = {CTL_HW, HW_CPUSPEED};
+   len = sizeof(freq);
+   sysctl(getMhz, 2, &freq, &len, NULL, 0);
Index: pkgsrc/wayland/waybar/patches/patch-src_modules_custom.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_modules_custom.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_modules_custom.cpp  Mon Aug 24 14:25:32 2026
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_modules_custom.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Portable WEXITSTATUS usage
+
+--- src/modules/custom.cpp.orig        2025-12-18 09:25:10.973327997 +0000
++++ src/modules/custom.cpp
+@@ -81,7 +81,8 @@ void waybar::modules::Custom::continuous
+     if (getline(&buff, &len, fp_) == -1) {
+       int exit_code = 1;
+       if (fp_) {
+-        exit_code = WEXITSTATUS(util::command::close(fp_, pid_));
++        int status = util::command::close(fp_, pid_);
++        exit_code = WEXITSTATUS(status);
+         fp_ = nullptr;
+       }
+       if (exit_code != 0) {
Index: pkgsrc/wayland/waybar/patches/patch-src_modules_simpleclock.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_modules_simpleclock.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_modules_simpleclock.cpp     Mon Aug 24 14:25:32 2026
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_modules_simpleclock.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* fmt::localtime was removed in fmtlib-12
+
+--- src/modules/simpleclock.cpp.orig   2025-12-18 09:42:22.535423519 +0000
++++ src/modules/simpleclock.cpp
+@@ -17,7 +17,9 @@ waybar::modules::Clock::Clock(const std:
+ auto waybar::modules::Clock::update() -> void {
+   tzset();  // Update timezone information
+   auto now = std::chrono::system_clock::now();
+-  auto localtime = fmt::localtime(std::chrono::system_clock::to_time_t(now));
++  auto t = std::chrono::system_clock::to_time_t(now);
++  std::tm localtime{};
++  localtime_r(&t, &localtime);
+   auto text = fmt::format(fmt::runtime(format_), localtime);
+   label_.set_markup(text);
+ 
Index: pkgsrc/wayland/waybar/patches/patch-src_modules_user.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_modules_user.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_modules_user.cpp    Mon Aug 24 14:25:32 2026
@@ -0,0 +1,21 @@
+$NetBSD: patch-src_modules_user.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Portable uptime usage, fallback to CLOCK_MONOTONIC
+
+--- src/modules/user.cpp.orig  2025-12-18 09:12:40.964198952 +0000
++++ src/modules/user.cpp
+@@ -63,10 +63,12 @@ long User::uptime_as_seconds() {
+ #if HAVE_CPU_BSD
+   struct timespec s_info;
+   int flags = 0;
+-#ifndef __OpenBSD__
++#ifdef CLOCK_UPTIME_PRECISE
+   flags = CLOCK_UPTIME_PRECISE;
+-#else
++#elif defined(CLOCK_UPTIME)
+   flags = CLOCK_UPTIME;
++#else
++  flags = CLOCK_MONOTONIC;
+ #endif
+   if (0 == clock_gettime(flags, &s_info)) {
+     uptime = s_info.tv_sec;
Index: pkgsrc/wayland/waybar/patches/patch-src_util_icon__loader.cpp
diff -u /dev/null pkgsrc/wayland/waybar/patches/patch-src_util_icon__loader.cpp:1.1
--- /dev/null   Mon Aug 24 14:25:32 2026
+++ pkgsrc/wayland/waybar/patches/patch-src_util_icon__loader.cpp       Mon Aug 24 14:25:32 2026
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_util_icon__loader.cpp,v 1.1 2026/08/24 14:25:32 kikadf Exp $
+
+* Fix ctype usage
+
+--- src/util/icon_loader.cpp.orig      2026-07-27 13:52:11.975754660 +0000
++++ src/util/icon_loader.cpp
+@@ -185,7 +185,7 @@ Glib::RefPtr<Gio::DesktopAppInfo> IconLo
+ 
+     auto lower_app_id = app_id;
+     std::ranges::transform(lower_app_id, lower_app_id.begin(),
+-                           [](char c) { return std::tolower(c); });
++                           [](char c) { return static_cast<char>(std::tolower(static_cast<unsigned char>(c))); });
+     app_info_ = get_desktop_app_info(lower_app_id);
+     if (app_info_) {
+       return app_info_;



Home | Main Index | Thread Index | Old Index