What's Changed
- ci: bump flake lock actions by @khaneliman in #4822
- fix: update tooltip method to use pango markup formatting by @Cprakhar in #4831
- Fix include of poll.h by @hannesbraun in #4828
- fix(image): treat missing interval as once by @khaneliman in #4838
- docs: fix typo in waybar.5 in
expand-rightfield info by @esensar in #4847 - fix: remove unnecessary console log for battery status by @Cprakhar in #4844
- memory: use markup rather than text for memory tooltip by @chrisvittal in #4858
- fix: use pango markup for consistent formatting in format and tooltip-format by @Cprakhar in #4857
- fix: use SafeSignal in ipc in order to not call GTK funcs from a thread by @sliedes in #4854
- fix(keyboard-state): fix segfault on device hotplug removal by @tobixen in #4852
- hyprland/workspaces: Add
enable-bar-scrolloption by @VAWVAW in #3088 - bump: niri/workspaces: change icons priority by @cebem1nt in #4869
- fix: ensure AAppIconLabel image remains not visibile if icons are disabled by @olliestone in #4863
- fix(cava): remove silent CSS class on reactivation by @GG2R10 in #4874
- feat: add tooltip-format config option in cpu module by @Cprakhar in #4856
- battery: power switch events by @44vladimirov in #4849
- feat: add
{tooltip}in format replacements in custom module by @Cprakhar in #4836 - feat(niri): niri depends on socket by @khaneliman in #4834
- fix: owerwrite handleScroll to remove any scrolling handling from group by @cebem1nt in #4821
- fix(mpris): fall back to next non-ignored player and prefer playing players by @BlueManCZ in #4846
- bluetooth: fix segfault when DBus manager fails to initialize by @Alexays with @Copilot in #4879
- battery: fix SIGABRT on USB device unplug race condition by @Alexays with @Copilot in #4881
- mpd: fix socket FD leak on system-level connection errors by @Alexays with @Copilot in #4880
- [WIP] Fix waybar responsiveness and interaction issues by @Alexays with @Copilot in #4888
- fix(util): ensure SleeperThread lifecycle safety and thread sync by @khaneliman in #4889
- fix(util): bound SafeSignal queue growth under burst load by @khaneliman in #4890
- fix: float interval cast by @BryceGust in #4895
- fix(command): return non-zero when child exec fails by @khaneliman in #4892
- fix(network): align tooltip and tooltip text by @khaneliman in #4897
- perf(memory): optimize string operations; remove deep copies, memdup, and icon theme rescanning by @khaneliman in #4898
- fix(hyprland-ipc): harden fd lifecycle and listener loop by @khaneliman in #4891
- fix: sync tooltip updates without resetting hover state by @AlisonB319 in #4900
- fix(mpris): disconnect GLib signals before destroying objects by @sw1nn in #4905
- fix(menu): keep popup menus alive after builder teardown by @khaneliman in #4911
- fix(tray): complete attention/overlay implementation by @khaneliman in #4913
- fix(hyprland): misc hardening with ipc socket and events by @khaneliman in #4910
- Add simple calendar tooltip example for clock module by @B2krobbery in #4924
- systemd-failed-units: add tooltip with list of failed units by @c4rlo in #4929
- Fix menu-actions GTK callback pointer handling by @B2krobbery in #4925
- chore: remove heaptrack dump by @khaneliman in #4931
- cava bump by @LukashonakV in #4932
- chore: Stop using deprecated/removed Nerdfonts codepoints by @BryceBeagle in #4939
- fix(hyprland/window): Fix segfault caused by use-after-free by @jayshozie in #4938
- Add start-expanded option to group by @sjudin in #4937
- fix: prevent resource leak when rebinding Wayland globals by @B2krobbery in #4946
- Network: Fix default interface selection. by @tsukasa-au in #4948
- clarify logical condition in wlr taskbar module by @B2krobbery in #4945
- Fix network bandwidth rate calculation for early updates by @sgruendel in #4943
- Fix unnecessary allocation in GTK callback by @B2krobbery in #4953
- fix: prevent resource leak when rebinding dwl globals by @B2krobbery in #4962
- feat(client): add support for 8-bit hex color codes in CSS by @keepo-dot in #4960
- Group ref fix by @cebem1nt in #4973
- niri/workspaces: feature - add "hide-empty" config option by @cebem1nt in #4966
- fix(bar): ensure exception safety for group module allocation by @B2krobbery in #4970
- fix(network): prevent near-zero bandwidth on rapid event-driven updates by @adrianlzt in #4964
- Network: fix: delete correct address type by @argentite in #4967
- memory: feature - add "unit" config option by @pix-code in #4975
- fix the io failure for hotplug-in device by @Mrpaoo in #4982
- fix(sni): use std::make_unique for Item allocation by @B2krobbery in #4990
- Various toctou fixes by @nschloe in #5007
- fix(hyprland/workspaces): adapt dispatch commands for Lua IPC protocol by @higorprado in #5013
- fix(battery): prevent crash when removing a hot-plugged device by @InetAddress in #5121
- fix(delayWorker): stop loop for static modules with no exec command by @martuscellifaria in #5123
- feat(modules): pause background threads when display is asleep by @JuustKiwi in #5154
- Fix (wayfire/backend): Fixed unhandled exception (out_of_range) after… by @muratyalcin-ce in #5076
- fix(mpd): avoid false no-song warning when stopped by @SaveTheRbtz in #5101
- fix(amodule): prevent crash when cursor timeout fires after destruction by @typedrifter in #5058
- Fix connection loop in pulseaudio by @Neltharion01 in #5010
- perf(mpd): avoid duplicate playing-state updates by @SaveTheRbtz in #5100
- perf(json): parse directly from string buffers by @SaveTheRbtz in #5108
- fix(hyprland/workspaces): fix IPC call when using move-to-monitor by @tomben13 in #5043
- Fix (memory): Fix tooltip showing incorrect unit and add proper unit initialization by @muratyalcin-ce in #5079
- fix(niri/workspaces): segfault when setting workspace button markup by @jaschiu in #5112
- fix(privacy): segfault due to use-after-free from get_children() by @jaschiu in #5114
- fix(sni): ignore name/pixmap updates for custom icons by @runxiyu in #5138
- fix: mpd specify timer interval in seconds by @awused in #5046
- fix(sway/workspaces): use number when available to avoid parsing issues by @Sayrus in #4742
- fix(hyprland): replace EventBox with Button for taskbar window items by @buzz in #5062
- fix(tray): hide module when no items are visible by @JeremieRodon in #5028
- (Fix) (sway workspace module) persistent workspaces always removed by @Lege19 in #5072
- fix(hyprland): support custom scroll commands by @buzz in #5061
- fix(mpd): truncate before sanitization and improve tooltip UX by @Siriusuna in #5064
- hyprland/workspaces persistent fix and improve cursor handling configuration by @The-Robin-Hood in #4753
- fix(sway/language): keep flag visible across hot-plug and unknown layouts by @mil-ad in #5039
- battery: guard _exists = true assignment inside if condition by @EvansJahja in #5009
- hyprland/window: fix title not showing for windows in special workspaces by @jramrath in #2965
- Fix bug #4241 by @stkth in #4383
- Add tooltip functionality on hyprland/language module by @vpcano in #3698
- fix(hyprland/language): handle commas in keyboard-name config by @Alexays in #5155
- fix: Watch new CSS files on appearance change by @BBaoVanC in #4804
- fix(sway/workspaces): escape markup in workspace if enabled by @Sayrus in #4744
- custom_modules: Fix mediaplayer.py handling untitled track by @cogwheel in #5088
- fix: USR1/USR2 handling on OpenBSD by @VlkrS in #4992
- fix(hyprland): keep workspace hover over taskbar icons by @Praczet in #5048
- Fix timeout created by most recent gtk-layer-shell release when creating bars for multiple monitors. by @Mervius in #4984
- fix: issue #4955 wrong behaviour of regex for sway/window 'rewrite' by @85ae in #4957
- fix: Return when ID doesn't exist, we only care about the interest list. by @Mental-Vortex in #4672
- Fix indentation formatting in power_menu.xml by @OlivierNeyret in #4649
- fix(hyprland/workspaces) Special Workspace Multi-Monitor Support by @aaronred345 in #4692
- feat(hyprland/workspace): improved styling for named special workspaces by @aaronred345 in #4691
- fix(sni): retry Host proxy creation on transient errors by @oqlatulesba3 in #5093
- fix: prioritize
pluggedstatus overfullwhen battery is full and plugged in by @Cprakhar in #4837 - Fix clang build error by @jaschiu in #4483
- fix(wlr/taskbar): let task titles shrink within available space by @EzequielColungaAcha in #5060
- perf(label): skip redundant markup updates by @SaveTheRbtz in #5111
- Refactor: simplify conditional expressions in Hyprland workspace module by @B2krobbery in #4983
- docs: clarify global tooltip styling behavior by @B2krobbery in #4930
- Fallback formatting when format-paused is missing uses ALabel by @JangXa in #5148
- meson_options: improve sndio's description by @fkobi in #4035
- Document light and dark stylesheets in
manual by @ccjmne in #5139 - bar: warn on invalid height type in configuration by @B2krobbery in #4951
- Hide niri/language widget if formatted string is empty by @Gskartwii in #4524
- Force layer-shell commit after configure by @rmt in #5131
- added a "fallback" option to hyprland/window when no window in focus by @shibjyoti555 in #4353
- Allow tooltip formatting the CPU module. by @hallvardnmbu in #4724
- Additional options when muted for the PulseAudio-Slider module by @finitemonkey in #5045
- cpu: add load{1,5,15} format variables by @Duncaen in #4114
- feat(temperature): add hwmon-name option for stable sensor selection by @kaosuran in #4723
- feat(sway/workspaces): add format for negative indices by @cartok in #4747
- feat: add custom format-icons for each key in keyboard-state module by @Cprakhar in #4883
- feat(wlr/taskbar): expose active toplevel state on the bar window by @iamcheyan in #5126
- feat(battery): add option to smooth power for more stable time_remaining estimates by @Benji-clm in #4761
- Encode icon inside label by @oisanjaya in #4719
- power-profiles-daemon: split driver into cpu driver and platform driver by @jeevithakannan2 in #3994
- feature: group - add reveal-delay config option for drawer by @cebem1nt in #4993
- feat: add compact versions of bandwidthBytes to network module by @yui-915 in #5015
- river/tags: Allow river tags to be styled based on monitor focus by @lilly-lizard in #3436
- feat: add support for configurable first day of the week in calendar by @Cprakhar in #4841
- feat: add mango modules: workspace,language,keymode,window,layout by @DreamMaoMao in #5078
- feat: allow sorting niri workspaces by @RaphaelKimmig in #4683
- Add hide-active by @Roc25 in #4134
- feat: support Pango markup in remaining tooltips by @Agnibha007 in #5034
- mpd: Implement idle events for Playing state by @awused in #5047
- feat: Show Niri/window component when workspace is empty by @diego-velez in #4463
- Add "ignore-workspaces" option to sway/workspaces module by @maltherd in #4986
- feat (hyprland/workspaces): expose workspace name as CSS class by @v-dermichev in #4958
- [feat]
sway/workspaces: refer to outputs by their monitor identifier inpersistent-workspacesby @ar-turek in #5073 - feature: add on-click-copy clipboard functionality by @Skyfrei in #4950
- Add CSS classes for sway workspace indicators depending on associated output by @burbschat in #4193
- Add css class to hyprland language module of short_name language code by @dimti in #4529
- Add max-windows option to hyprland/workspaces by @xiyori in #4981
- feat(language): add tooltip support with configurable tooltip-format by @yihangwu539-png in #5012
- Add CSS selector for expanded drawers by @Diax170 in #4977
- [RFC] niri/window: add col/max_col parameters by @martinetd in #4530
- feat (hyprland/workspaces): support for state specific icon overrides by @GlassyBridge in #4994
- feat(wlr/taskbar): add
justifyoption to control horizontal alignment of the module box by @mbroemme in #4532 - feat(cpu): add {icons} format replacement for all per-core icons by @IVSOP in #5054
- pulseaudio: add target option to control source (microphone) volume by @7FM in #4908
- hostname dependend module by @jaypikay in #4907
- Add an option to search for name in hwmon directory for the temperature module by @ico277 in #3706
- dwl/window: allow hiding of title when either inactive or empty by @casKd-dev in #3926
- feat (clock): Add support for optional CSS classes to the clock module's calendar tooltip by @nickjj in #4896
- wireplumber: add more volume formats by @mBornand in #4255
- dwl/tags: add hide-vacant option by @casKd-dev in #3925
- feat (tray): Ignore Tray items by service name and when dbus properties load by @AntGarSil in #4826
- feat(disk)!: handle multiple disks at once by @szbmrk in #4762
- feat(image): expand
~&$HOMEin path by @zspher in #4607 - add prefer-album-artist to mpris module by @PandorasFox in #4084
- feat(backlight): added percentexp as format option by @nova-nowiz in #1870
- pulseaudio: Add 'sink-mapping' config option by @Ape in #3421
- feat(hyprland/workspaces): grouping icons by @eonphi in #4861
format-bluetoothanddevice.form-factorsupport for wireplumber module by @winkelnp in #4366- Add '-' support to wifi config by @ALSchwalm in #4722
- feat(clock): Add action to execute external command by @akselaase in #4760
- feat: add customgraph module by @Gazer in #4588
- feat(niri/workspaces): Add
enable-bar-scrolloption by @yuukibarns in #5041 - feat(mpd): add playing-interval option by @theoratkin in #4334
- feat(group): add reveal-by-default option by @ErrorNoInternet in #4060
- feat(custom): add image by @stlkr in #5069
- River/tags: Add static CSS classes for all available tags. by @nonamescm in #5017
- feat: add support for bt peripheral device battery by @AntoineGS in #4712
- Added Idle Inhibitor Features: Signal Inputs & Activity Detection by @guttermonk in #4565
- feat(niri/workspaces): add {total} format token to workspaces by @archion in #5110
- Sway IPC client: robustness improvements & code cleanups by @c4rlo in #5068
- log: use native journald protocol for when running as a service by @VannTen in #4553
- feat(cursor): use cursor-shape-v1 cursor names instead of Gdk::CursorType by @J0hannes101 in #5133
- refactor(ALabel): generic label+tooltip helper to remove per-module duplication by @Alexays in #5156
- Add missing documentation for the "target" option of the PulseAudio-Slider module. by @finitemonkey in #5049
- feat(hyprland/submap): add config option to specify different icons for submaps by @szbmrk in #4772
- hyprland/workspaces: add debounce timer to prevent workspace button f… by @yyyumeniku in #5032
- waybar-styles.5: add semicolon to css import statement by @Habbie in #5033
- feat(ALabel): allow custom percentage thresholds in format-icons by @Grinchuelo in #5153
- feat(group): Add .empty class to empty groups by @sjudin in #4941
- feat(wlr/taskbar): add
homogeneousoption to evenly distribute button widths by @mbroemme in #4543 - feat(niri/worspaces): add ignore-workspaces configuration option by @thomascrha in #4537
- feat: allow not switching output when clicking sway/workspace by @AckslD in #4685
- Support hiding tray icons by @andresilva in #4624
- Implemented "only-physical" parameter in the wireplumber module. by @PickNicko13 in #4714
- feat(hyprland/workspaces): add deduplication and max-icons option to workspace-taskbar by @whymusticode in #4694
- clock: add weeks-numbering option for configurable CW calculation by @beyertom in #4940
- feat(Group/Drawer): add dynamic drawer hiding modules based on module's class by @piwonskp in #4014
- feat: add display-condition configuration option by @hansp27 in #4001
- allow dynamic timeout setting for idle inhibitor by @torgiren in #3370
- Added a taskbar squash option by @NoakPalander in #3740
- add click coordinates to script by @rossmeier in #3573
- feat: Add wifi network link bitrate value by @g-goessel in #4265
- add format-icons to river/layout by @AtomToast in #3311
- feat: add new module 'images' to render multiple images under one gtk container by @VPavliashvili in #3151
- feat(hyprland/workspaces): add uniqueIcons option by @LoricAndre in #4320
- [hyprland/workspaces] Add tooltips to hyprland/workspaces by @0x000C0A71 in #3017
- feat: add way to use environment value for 'output' option by @JarKz in #3817
- feat: Added source_desc argument to format_source in pulseaudio.cpp by @Sduniii in #3818
- feat: added dbus handler to update current player by @savely-krasovsky in #2157
- feat(wlr/taskbar): add
truncateoption to ellipsize long button text by @mbroemme in #4545 - added output-dimensions option by @RyanGibb in #1358
- feat (niri/workspaces): add dynamic window icons to workspaces matching hyprland/workspaces by @kabhijeet in #4396
- fix(tray): segfault due to use-after-free from iterating children by @jaschiu in #5115
- fix: Use workspace ID to handle hyprland/workspace updates by @edeustua in #4305
- (sni) be able to control oder of tray items, and clean up sni module based on clang-tidy by @yangyingchao in #4850
- feat: sway/workspaces: add custom workspace sorting functionality by @Esensats in #4536
- WWAN module (ModemManager) by @adryzz in #4557
- Add GeoClue2 location privacy item by @ErikReider in #4504
- feat(niri): add workspace-taskbar support by @sewaustav in #4997
- net: add ethernet link speed by @awariac in #2891
- fix: backward-compat + bug fixes and man-page build fix for 0.16.0 by @Alexays in #5157
- fix: batch of crash/freeze fixes (clock DST, interval:0, thread-safety, reconnects) by @Alexays in #5158
- fix(wireplumber): correct linear→cubic volume conversion (0% on Bluetooth) + source-muted state by @Alexays in #5161
- fix(clock): degrade gracefully on an invalid format specifier by @Alexays in #5160
- fix(keyboard-state): read lock LEDs from all devices, not just the first by @Alexays in #5163
- fix: tray accel-group crash (#5142), wlr/taskbar shell-exec of built-in actions (#3284), MPD connect-timeout freeze (#1186) by @Alexays in #5164
- fix: mpris resume SIGSEGV (#5124), wireplumber async UAF (#3974), stale reload batch state (#4129) by @Alexays in #5165
- ci: headless smoke + screenshot test for the bar by @Alexays in #5166
- fix: backlight leds subsystem (#2848), sway/ipc reconnect (#3166), ethernet unplug regression (#4364) by @Alexays in #5167
- refactor(custom): move continuous exec onto GLib command stream by @khaneliman in #4915
- fix(niri): keep the initial IPC connect synchronous by @khaneliman in #5171
- feat(format): expand pow_format modifiers by @layus in #5170
- fix(label): compare markup cache by raw bytes, not collation by @khaneliman in #5172
- fix: batch of bugs found reviewing the 0.15.0..master diff by @Alexays in #5175
- fix: resource-leak / correctness cleanups from the 0.15.0..master review (low severity) by @Alexays in #5176
- fix(image): don't crash at startup when the widget isn't realized yet (#5051) by @Alexays in #5174
- fix(wireplumber): reconnect when PipeWire/WirePlumber restarts (#2882) by @Alexays in #5168
- ci(smoke): sanitizer build + module/interaction/a11y/layout coverage by @Alexays in #5173
- fix: backlight I/O flooding (#5020) + network IP recovery after link flap (#5122) by @Alexays in #5177
- fix(wlr/taskbar): respect all-outputs by @khaneliman in #5180
- ci(smoke): fix state tier hang from bare wait on a lingering daemon by @Alexays in #5184
- docs(man): add load by @pajlada in #5187
- fix(idle_inhibitor.cpp): Fix build for systems without SIGRTMIN/SIGRTMAX by @VlkrS in #5197
- refactor(cava): fix thread-safety, resource leaks, and style violations by @LukashonakV in #5199
- use nmcli implementation for calculating WiFi signal strength by @grishatop1 in #5201
- refactor: rm direct dp.emit() call in constructor. by @Mrpaoo in #5208
- cava bump by @LukashonakV in #5213
- fix(tooltips): keep dynamic tooltips from resetting hover delay by @bjnobre in #5212
- fix(mpris): sanitize metadata to prevent multiline UI expansion by @JuustKiwi in #5225
- util/enum: make header-only and drop mandatory Hyprland dependency by @LukashonakV in #5216
- fix(sway/ipc): don't mistake events for the subscribe reply by @10ne1 in #5219
- fix(backlight): clamp scroll step to min-brightness by @gitmpr in #5210
- config: add min-brightness to backlight example by @gitmpr in #5209
- Replace lone tab character in style.css with spaces for consistency by @toadjaune in #5230
- privacy: disconnect pending timeouts on destruction by @shivankgarg98 in #5249
- fix(hyprland/workspaces): handle workspace ID changes by @daher13 in #5248
- feat: clang format options added on makefile and docker image for arc… by @daher13 in #5252
- fix: fix module backlight format using clang by @daher13 in #5251
- fix(hyprland/workspaces): respect enable-bar-scroll config option by @brian-brow in #5232
- docs(states): wireplumber uses >=, not <= by @rootatoskr in #5257
- fix(hyprland/language): ensuring exact match of the device name by @JeremieRodon in #5278
- sink the GVariant to prevent freeing a floating variant by @monban in #5273
- meson: Fix unwinding error in libunwind over glibc by @aokblast in #5267
- fix: don't block startup on the desktop portal by @shivankgarg98 in #5270
- fix(tray): fall back when dbus menu is unavailable by @nanomatters in #5238
- ipc: Improve teardown process by @aokblast in #5266
- ext/workspaces: fix inverted capability bit checks by @llyyr in #5265
- fix(hyprland): detect dispatch protocol via configProvider by @CristianMz21 in #5231
- Fix crash with
keyboard-stateon keyboard removal by @wilkmaia in #5279 - wlr/taskbar: reload icon when the widget scale factor changes by @teivng in #5262
- Fix/command read busy loop by @10ne1 in #5259
- fix(tooltips): only update the tooltip of the hovered module by @rmrfus in #5245
- fix(hyprland/language): ignore empty/unknown layouts from virtual keyboards by @zeerayne in #5263
- fix(hyprland/workspaces): only deduplicate taskbar icons when max-icons is set by @IlyasKhallouki in #5222
- icon_loader: fix ctype usage by @kikadf in #5321
- memory: fix get_free_memory() on NetBSD by @kikadf in #5319
- fix(tray): prebuild the dbusmenu before the first right click by @wrisky-cmyk in #5327
- bump libjsoncpp by @mtimaN in #5330
- fix(tray): accept dbusmenus without the Version property by @khaneliman in #5315
- fix(wireplumber): apply common muted class to primary node by @tonrl in #5337
- fix(taskbar): avoid stale pointer in drag payload by @sanyarnd in #5334
- fix(custom): stop applying module-level CSS classes to the inner label by @Carltoffel in #5340
- fix(custom,disk): catch fmt::format_error by @kylin-liwn in #5332
- fix(load): respect tooltip-format config by @kylin-liwn in #5331
- fix(tray): respect tooltip config option by @Tallis-Larsen in #5359
- fix(hyprland/workspace): GTK memory leak by @penguin-sophist in #5342
- mango/window: added max-length option to documentation by @daher13 in #5377
- docs(temperature): document disable-on-sleep and what actually triggers it by @ihsandeniz in #5345
- Portable uptime usage, fallback to CLOCK_MONOTONIC by @kikadf in #5320
- fix(tray): do not abort on a malformed
ordersentry by @Carltoffel in #5296 - sni/watcher: accept combined "bus_name/object_path" item registrations (Electron 43.4.1+) by @teivng in #5287
- fix(power-profiles-daemon): guard async callback lifetime by @sdegler in #5383
- ext/worksapces: sort buttons when workspace changes group by @llyyr in #5264
- fix(hyprland/language): split activelayout on the last comma outside parens by @vanshdev0101 in #5247
- fix(inhibitor): use a private system bus connection and reconnect when closed by @ravi-arnan in #5272
- mpris: add hide-on-paused option by @sndsh404 in #5309
- fix(sni): destroy the dbusmenu and drop its reference in ~Item() by @dmitry-j-mikhin in #5375
- fix(backlight): let stop() cancel the udev worker only in epoll_wait() by @dmitry-j-mikhin in #5376
- fix/disks: added linebreak just after second path by @daher13 in #5384
- feat(sway/workspaces): Add CSS class to identify workspaces by number by @turbodt in #5336
- fix(network): read the ACK after get_station requests by @CraftyMuscle in #5386
- fix(modules): disconnect GLib signal handlers before destroying objects by @serhatvs in #5385
- clock: use standalone month names in calendar header by @Nikshay1 in #5387
- feat(label): add fit-height to fit multi-line labels into the bar by @iamkarlson in #5381
- fix(hyprland): Support addressable workspace IPC by @tonybutt in #5324
- Add bar blur option by @AntonyLittle in #5348
- fix(backlight): calculate scroll limits in device units by @infinityidk in #5355
- feat(mango/workspaces): add tag-filter option to restrict visible tag… by @GeanJair in #5351
- fix(battery): round capacity instead of truncating it by @ln-bodicherla in #5398
- fix(keyboard-state): inotify descriptor leak by @sdegler in #5403
- fix(power-profiles-daemon): initialize active profile iterator by @sdegler in #5397
- fix: sanitized tooltip text by @daher13 in #5422
- GTK4. Dockerfiles update by @LukashonakV in #5412
- GTK4. freeBSD update by @LukashonakV in #5413
- docs(custom): make interval and signal descriptions agree by @ihsandeniz in #5394
- fix(nix): match the current libcava wrap source and directory by @mishalshanavas in #5427
- fix(subprojects): keep libcava as wrap-file so sandboxed builds work by @twstagg in #5431
- feat(battery): add {eta} replacement for estimated end time by @davidemanini in #5428
- fix(bar): waybar crashes when an output's scale changes by @nikarh in #5435
- feat: Add umbriel/workspaces, umbriel/window & umbriel/layout by @SsubezZ in #5434
- fix(ci): repair checkout step in Nix lockfile updater by @mishalshanavas in #5426
- fix(util/command, custom_graph): forked child must not inherit a pending pthread_cancel by @dmitry-j-mikhin in #5370
- fix(network): misc fixes and cleanups in network module by @c4rlo in #5416
- fix(tooltips): show the tooltip again after scrolling a module by @Carltoffel in #5404
- fix(wireplumber): resolve default node once it is added by @andresilva in #5396
- fix(custom): keep module name and class on the label when there is no image by @zeerayne in #5365
- Add ext-workspaces scroll support by @llyyr in #5261
- fix(hyprland/workspaces): clear the tooltip when its format is empty by @Fiwex in #5433
- group: allow replacing the drawer leader when expanded by @bjnobre in #5291
- feat: load cava and gps as runtime modules by @Alexays in #5441
- fix(sni): disconnect the dbusmenu from its client before destroying it by @dmitry-j-mikhin in #5439
- Add Umbriel to README #5434 by @SsubezZ in #5437
- fix(AModule): let unhandled clicks propagate to parent groups by @miju04 in #5424
- ci: harden lockfile updater with explicit job permissions by @mishalshanavas in #5436
- test(smoke): inject clicks through a virtual pointer and gate on them by @Alexays in #5442
- fix(main): keep the signal thread alive on EINTR by @Alexays in #5450
- fix(bar): run the first module updates without a pipe write each by @Alexays in #5449
- fix(cava): handle a missing audio server instead of crashing by @Alexays in #5448
- fix(wireplumber): survive a missing or stopped pipewire by @Alexays in #5447
- fix(bluetooth): drop connected devices that vanish with their controller by @Alexays in #5446
- fix(wwan): survive a missing modemmanager and follow modem changes by @Alexays in #5445
- fix: show mpd format-disconnected and reject an out-of-range image size by @Alexays in #5444
- test(smoke): run most modules for real in the smoke workflow by @Alexays in #5443
- fix: clamp interval values and make the hardware smoke tier run on ci by @Alexays in #5451
- fix(idle_inhibitor): toggle once per signal across all bars by @gilbsgilbs in #5411
- feat(tray): support wildcard keys in icons by @BlaiseRideout in #5419
- chore: 0.16.0 by @Alexays in #5452
New Contributors
- @Cprakhar made their first contribution in #4831
- @hannesbraun made their first contribution in #4828
- @esensar made their first contribution in #4847
- @chrisvittal made their first contribution in #4858
- @sliedes made their first contribution in #4854
- @tobixen made their first contribution in #4852
- @olliestone made their first contribution in #4863
- @GG2R10 made their first contribution in #4874
- @44vladimirov made their first contribution in #4849
- @BlueManCZ made their first contribution in #4846
- @BryceGust made their first contribution in #4895
- @AlisonB319 made their first contribution in #4900
- @sw1nn made their first contribution in #4905
- @B2krobbery made their first contribution in #4924
- @BryceBeagle made their first contribution in #4939
- @jayshozie made their first contribution in #4938
- @sjudin made their first contribution in #4937
- @tsukasa-au made their first contribution in #4948
- @sgruendel made their first contribution in #4943
- @keepo-dot made their first contribution in #4960
- @adrianlzt made their first contribution in #4964
- @argentite made their first contribution in #4967
- @pix-code made their first contribution in #4975
- @Mrpaoo made their first contribution in #4982
- @higorprado made their first contribution in #5013
- @InetAddress made their first contribution in #5121
- @martuscellifaria made their first contribution in #5123
- @JuustKiwi made their first contribution in #5154
- @muratyalcin-ce made their first contribution in #5076
- @SaveTheRbtz made their first contribution in #5101
- @typedrifter made their first contribution in #5058
- @Neltharion01 made their first contribution in #5010
- @jaschiu made their first contribution in #5112
- @runxiyu made their first contribution in #5138
- @awused made their first contribution in #5046
- @Sayrus made their first contribution in #4742
- @buzz made their first contribution in #5062
- @JeremieRodon made their first contribution in #5028
- @Lege19 made their first contribution in #5072
- @Siriusuna made their first contribution in #5064
- @The-Robin-Hood made their first contribution in #4753
- @mil-ad made their first contribution in #5039
- @EvansJahja made their first contribution in #5009
- @vpcano made their first contribution in #3698
- @cogwheel made their first contribution in #5088
- @VlkrS made their first contribution in #4992
- @Praczet made their first contribution in #5048
- @Mervius made their first contribution in #4984
- @85ae made their first contribution in #4957
- @Mental-Vortex made their first contribution in #4672
- @OlivierNeyret made their first contribution in #4649
- @aaronred345 made their first contribution in #4692
- @oqlatulesba3 made their first contribution in #5093
- @EzequielColungaAcha made their first contribution in #5060
- @JangXa made their first contribution in #5148
- @fkobi made their first contribution in #4035
- @ccjmne made their first contribution in #5139
- @Gskartwii made their first contribution in #4524
- @rmt made their first contribution in #5131
- @shibjyoti555 made their first contribution in #4353
- @hallvardnmbu made their first contribution in #4724
- @finitemonkey made their first contribution in #5045
- @iamcheyan made their first contribution in #5126
- @Benji-clm made their first contribution in #4761
- @oisanjaya made their first contribution in #4719
- @jeevithakannan2 made their first contribution in #3994
- @yui-915 made their first contribution in #5015
- @lilly-lizard made their first contribution in #3436
- @RaphaelKimmig made their first contribution in #4683
- @Agnibha007 made their first contribution in #5034
- @diego-velez made their first contribution in #4463
- @maltherd made their first contribution in #4986
- @v-dermichev made their first contribution in #4958
- @ar-turek made their first contribution in #5073
- @Skyfrei made their first contribution in #4950
- @burbschat made their first contribution in #4193
- @dimti made their first contribution in #4529
- @xiyori made their first contribution in #4981
- @yihangwu539-png made their first contribution in #5012
- @Diax170 made their first contribution in #4977
- @martinetd made their first contribution in #4530
- @GlassyBridge made their first contribution in #4994
- @mbroemme made their first contribution in #4532
- @IVSOP made their first contribution in #5054
- @7FM made their first contribution in #4908
- @jaypikay made their first contribution in #4907
- @ico277 made their first contribution in #3706
- @casKd-dev made their first contribution in #3926
- @nickjj made their first contribution in #4896
- @mBornand made their first contribution in #4255
- @AntGarSil made their first contribution in #4826
- @szbmrk made their first contribution in #4762
- @PandorasFox made their first contribution in #4084
- @eonphi made their first contribution in #4861
- @ALSchwalm made their first contribution in #4722
- @akselaase made their first contribution in #4760
- @Gazer made their first contribution in #4588
- @yuukibarns made their first contribution in #5041
- @theoratkin made their first contribution in #4334
- @ErrorNoInternet made their first contribution in #4060
- @stlkr made their first contribution in #5069
- @nonamescm made their first contribution in #5017
- @AntoineGS made their first contribution in #4712
- @archion made their first contribution in #5110
- @J0hannes101 made their first contribution in #5133
- @yyyumeniku made their first contribution in #5032
- @Habbie made their first contribution in #5033
- @Grinchuelo made their first contribution in #5153
- @thomascrha made their first contribution in #4537
- @AckslD made their first contribution in #4685
- @PickNicko13 made their first contribution in #4714
- @whymusticode made their first contribution in #4694
- @beyertom made their first contribution in #4940
- @piwonskp made their first contribution in #4014
- @torgiren made their first contribution in #3370
- @NoakPalander made their first contribution in #3740
- @rossmeier made their first contribution in #3573
- @g-goessel made their first contribution in #4265
- @AtomToast made their first contribution in #3311
- @VPavliashvili made their first contribution in #3151
- @LoricAndre made their first contribution in #4320
- @0x000C0A71 made their first contribution in #3017
- @JarKz made their first contribution in #3817
- @Sduniii made their first contribution in #3818
- @savely-krasovsky made their first contribution in #2157
- @RyanGibb made their first contribution in #1358
- @kabhijeet made their first contribution in #4396
- @Esensats made their first contribution in #4536
- @sewaustav made their first contribution in #4997
- @awariac made their first contribution in #2891
- @pajlada made their first contribution in #5187
- @grishatop1 made their first contribution in #5201
- @bjnobre made their first contribution in #5212
- @10ne1 made their first contribution in #5219
- @gitmpr made their first contribution in #5210
- @toadjaune made their first contribution in #5230
- @shivankgarg98 made their first contribution in #5249
- @daher13 made their first contribution in #5248
- @brian-brow made their first contribution in #5232
- @rootatoskr made their first contribution in #5257
- @monban made their first contribution in #5273
- @nanomatters made their first contribution in #5238
- @CristianMz21 made their first contribution in #5231
- @wilkmaia made their first contribution in #5279
- @teivng made their first contribution in #5262
- @rmrfus made their first contribution in #5245
- @zeerayne made their first contribution in #5263
- @IlyasKhallouki made their first contribution in #5222
- @kikadf made their first contribution in #5321
- @wrisky-cmyk made their first contribution in #5327
- @mtimaN made their first contribution in #5330
- @tonrl made their first contribution in #5337
- @sanyarnd made their first contribution in #5334
- @Carltoffel made their first contribution in #5340
- @kylin-liwn made their first contribution in #5332
- @Tallis-Larsen made their first contribution in #5359
- @penguin-sophist made their first contribution in #5342
- @ihsandeniz made their first contribution in #5345
- @sdegler made their first contribution in #5383
- @vanshdev0101 made their first contribution in #5247
- @ravi-arnan made their first contribution in #5272
- @sndsh404 made their first contribution in #5309
- @dmitry-j-mikhin made their first contribution in #5375
- @turbodt made their first contribution in #5336
- @CraftyMuscle made their first contribution in #5386
- @serhatvs made their first contribution in #5385
- @Nikshay1 made their first contribution in #5387
- @iamkarlson made their first contribution in #5381
- @tonybutt made their first contribution in #5324
- @AntonyLittle made their first contribution in #5348
- @infinityidk made their first contribution in #5355
- @GeanJair made their first contribution in #5351
- @ln-bodicherla made their first contribution in #5398
- @mishalshanavas made their first contribution in #5427
- @twstagg made their first contribution in #5431
- @nikarh made their first contribution in #5435
- @SsubezZ made their first contribution in #5434
- @Fiwex made their first contribution in #5433
- @miju04 made their first contribution in #5424
- @gilbsgilbs made their first contribution in #5411
- @BlaiseRideout made their first contribution in #5419
Full Changelog: 0.15.0...0.16.0