Commit Graph
1082 Commits
Author SHA1 Message Date
Alexis Rouillard c77c60e0b6 Merge pull request #5138 from runxiyu/runxiyu
fix(sni): ignore name/pixmap updates for custom icons
2026-07-03 20:52:16 +02:00
Alexis Rouillard 6c6b69b862 Merge pull request #5114 from jaschiu/patch-3
fix(privacy): segfault due to use-after-free from get_children()
2026-07-03 20:52:12 +02:00
Alexis Rouillard 2e0c34af5e Merge branch 'master' into fix/mpd-markup-truncation 2026-07-03 20:45:15 +02:00
Alexis Rouillard dfe2d80496 Merge branch 'master' into fix/tray-hide-when-empty 2026-07-03 20:45:10 +02:00
Alexis Rouillard fa79b931e9 Merge branch 'master' into sayrus-gh/sway-workspaces-quotes 2026-07-03 20:45:01 +02:00
Alexis Rouillard 0445607fb6 Merge branch 'master' into mpd-duration 2026-07-03 20:44:45 +02:00
Alexis Rouillard 0116808f4b Merge pull request #5079
Fix (memory): Fix tooltip showing incorrect unit and add proper unit initialization
2026-07-03 20:43:20 +02:00
Alexis Rouillard 260a68cf58 Merge pull request #5100 from SaveTheRbtz/codex-mpd-playing-update
perf(mpd): avoid duplicate playing-state updates
2026-07-03 19:55:23 +02:00
Ibrahim Issa 4d1a561cdc feat(modules): pause background threads when display is asleep
Currently, modules polling hardware nodes continuously wake up kernel drivers even when the monitor is asleep (e.g., DPMS off), flooding dmesg.

- Adds 'disable-on-sleep' config flag
- Hooks GTK window map/unmap signals to track DPMS state
- Propagates suspend/resume calls to AModule worker threads
2026-07-03 18:44:03 +02:00
Runxi Yu e37fcee35d fix(sni): ignore name/pixmap updates for custom icons 2026-06-19 05:51:00 +00:00
iamcheyan 14e59daae4 feat(wlr/taskbar): expose active toplevel state on the bar window
Add opt-in bar-css-states option to wlr/taskbar module.

When enabled, the module tracks the active workspace and updates CSS
classes on window#waybar to reflect the current window state:
- toplevel-active: when a window is focused
- toplevel-maximized: when any non-minimized window on active workspace is maximized
- toplevel-minimized: when the active window is minimized
- toplevel-fullscreen: when any non-minimized window on active workspace is fullscreen

This feature requires compositor support for ext-workspace-v1 protocol
to correctly track workspace membership. Without it, classes fall back
to the active application state only.

Also includes active-only option implementation.

Changes:
- Add ext-workspace-v1 protocol support for workspace tracking
- Implement WorkspaceState tracking in Taskbar class
- Add workspace management lifecycle (create/remove/done)
- Add bar CSS class update logic with aggregation
- Add visible() getter to Task class
- Implement active-only task visibility control
- Update man page with documentation and CSS examples

Signed-off-by: iamcheyan <iamcheyan@users.noreply.github.com>
2026-06-13 11:34:29 +09:00
Jason Chiu 2506196274 Update privacy.hpp 2026-06-09 06:49:41 +00:00
Alexey Ivanov 0cccf0d8b5 perf(mpd): avoid duplicate playing-state updates 2026-06-04 15:23:54 -07:00
DreamMaoMao 3eeffbe389 feat: add mango modules: workspace,language,keymode,window,layout 2026-05-29 12:56:40 +08:00
muratyalcin-ce 5ea824c24c Use unit in config for memory module tooltip 2026-05-28 23:56:52 +03:00
stalker 822071f36e feat(custom): add image 2026-05-25 08:18:12 +04:00
Carlo Teubner d8848a478b Sway IPC: code cleanups 2026-05-24 08:20:10 +01:00
Siriusuna 81fd9ee4ab fix(mpd): truncate before sanitization and improve tooltip UX
Fix an issue in the MPD module where text failed to render
when raw tags containing markup characters were truncated
mid-sequence after sanitization,
resulting in fragmented XML entities (such as `&amp;` cut into `&am`).

Resolve this by shifting the order of operations to
truncate the raw strings *before* running `sanitize_string`.
To keep `setLabel` decoupled and clean,
we introduce helper methods (`getArtistStr`, `getAlbumArtistStr`,
`getAlbumStr`, `getTitleStr`) inside the `MPD` class,
matching the architectural style of MPRIS.

Additionally:
- Introduce support for the customizable `ellipsis` config option
  (defaulting to `…`).
- Switch the truncation logic of the MPD module to be
  visual-width-aware using the newly extracted
  `waybar::util::utf8_truncate`.
- Decouple the tooltip text from the main label's truncated text.
  The tooltip now displays un-truncated, complete metadata
  (properly escaped), providing a significantly better user
  experience.
2026-05-22 03:15:26 +08:00
finitemonkey 0351ac8fb2 Additional options when muted for the PulseAudio-Slider module:
- Add "muted" class for styling the muted state.
- Add "zero-on-mute" boolean option to control slider position
  when muted.
- Add "unmute-on-volume-change" boolean option to control whether
  to automatically unmute when the volume changes.
2026-05-17 08:22:17 +01:00
Adam Druzd ff76e96786 fix(hyprland): keep workspace hover over taskbar icons 2026-05-17 09:12:08 +02:00
Desuwa 546b53d675 mpd: Implement idle events for Playing state 2026-05-16 15:41:09 -07:00
Desuwa 7e2afaa5b3 fix: mpd specify timer interval in seconds 2026-05-16 14:05:17 -07:00
Jack Barnes 51becf2fbc feat(niri/workspaces): Add enable-bar-scroll option 2026-05-16 13:03:53 +08:00
Antoine Gaudreau Simard 3971bb6c00 feat: add support for multiple batteries in a single bluetooth device 2026-05-13 11:48:42 -04:00
yyyumeniku 2a05edaf6a hyprland/workspaces: add debounce timer to prevent workspace button flicker
When switching between workspaces rapidly (especially empty ones),
Hyprland sends createworkspace and destroyworkspace events slightly
out of order. This causes workspace buttons to render in wrong
positions for a split second before snapping to their correct spots.

Add a 7ms debounce timer that batches workspace events before
calling dp.emit(), preventing the visual glitch.

Fixes #4376
2026-05-12 20:09:13 -04:00
Jérémie Rodon 5c3ec1fd63 fix(tray): hide module when no items are visible
Tray::update() already had logic to hide the module when all child items were passive, but it was only re-run on item add/remove — never on a status change. When the last visible item transitioned to Passive, the item hid itself but the now-empty module remained visible.

Connect Tray to each item's Gtk::EventBox signal_show/signal_hide so update() runs on every visibility transition, and simplify update() to check child->get_visible() directly instead of inspecting the `passive` CSS class. The Tray-level `show-passive-items` read becomes redundant since Item already honours it when deciding its own visibility; remove it along with the now-unused Tray::show_passive_ member.

Fixes: #3721
2026-05-11 22:47:24 +02:00
Higor Prado 97917db593 test(hyprland): expose dispatch internals for unit tests
Move buildLuaDispatch and isLuaProtocol from private to
protected/public so IPCTestHelper can access them.

Add 7 tests covering all buildLuaDispatch branches, dispatch
error path, and isLuaProtocol cache behavior.
2026-05-02 20:25:43 -03:00
Higor Prado e17c0d9f0a fix(hyprland/workspaces): adapt dispatch commands for Lua IPC protocol
Hyprland 0.54 replaced the text-based dispatch socket protocol with a
Lua-based one. Commands like "dispatch workspace 1" are now interpreted
as invalid Lua (return hl.dispatch(workspace 1)), breaking workspace
clicks and scroll navigation.

Add IPC::dispatch() that probes the running Hyprland on first call and
routes commands through the new hl.dsp Lua API when the Lua protocol is
detected, falling back to the old text format otherwise.
2026-04-29 16:41:11 -03:00
lilly-lizard 0ee4fd4aa2 added output class to dwl/mangowm allowing tags to display differently when the output is focused (for multi-monitor setups) 2026-04-14 13:47:53 +12:00
lilly-lizard e9741829d8 Merge branch 'master' into river-tags-monitor-focus 2026-04-14 08:30:00 +12:00
Arnaud Gaudard 450b6a785f Add "ignore-workspaces" option to sway/workspaces module 2026-04-12 17:22:19 +02:00
xiyori 503d99b128 Add max-windows option to hyprland/workspaces 2026-04-09 14:15:56 +03:00
Ricardo Markiewicz 4d6354af48 feat: add gauge and stacked bar graph type 2026-04-08 23:36:47 +02:00
Ricardo Markiewicz efadb82c56 feat: basic line graph component and cpu graph module 2026-04-08 23:36:47 +02:00
Alexis Rouillard 202ae4bd5f Merge pull request #4975 from pix-code/master
memory: feature - add "unit" config option
2026-04-07 12:45:24 +02:00
Duke B fc11789a4f add unit config option to memory module 2026-04-05 19:01:36 -04:00
vdermichev 2c2901e8f7 hyprland/workspaces: expose workspace name as CSS class
Enable per-workspace styling by adding the workspace name as a
CSS class to each workspace button. The name is sanitized to a
valid CSS identifier: lowercased, non-alphanumeric characters
collapsed to hyphens, digit-leading names prefixed with "ws-".

Examples: "IDE" → .ide, "special:telegram" → .telegram, "1" → .ws-1

Allows users to style individual workspaces:
  #workspaces button.telegram { color: #54a0e0; }
2026-04-05 11:44:56 +02:00
g_goessel 39656deab3 feat: Add wifi network link bitrate value
In order to obtain the RX and TX bitrates from the kernel netlink we need to open a second info socket to get the station data. The values are formatted like "1.9Gb/s" and then exposed as `rx_bitrate` and `tx_bitrate`.
This code is closely following the `iw` implementation.
2026-04-01 12:12:04 +02:00
hecate cantus c866c4cd24 Merge branch 'master' into master 2026-03-30 14:25:41 -07:00
Adrian LopezandSisyphus 753294dbf4 fix(network): prevent near-zero bandwidth on rapid event-driven updates
When netlink events (link/addr/route changes) fire between timer
intervals, dp.emit() triggers update() which consumes the byte delta
and resets bandwidth_down_total_. A subsequent timer update sees
near-zero delta, displaying very small bandwidth.

Cache the last computed bandwidth values and skip recalculation
when update() is called within half the interval. Event-driven
updates reuse the cached values instead.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-30 19:38:24 +02:00
Stefan Gründel c0c1a4223a Fix network bandwidth rate calculation for early updates 2026-03-21 13:17:06 +01:00
Thomas BeyerandClaude Sonnet 4.6 86d516c74d clock: add weeks-numbering option for configurable CW calculation
The iso8601 flag previously controlled both the calendar grid layout
and the week number format as a coupled boolean. This adds a new
weeks-numbering option (iso/monday/sunday) that explicitly overrides
just the week number calculation method, independent of iso8601 and
locale settings. Existing behaviour is fully preserved when the option
is not set.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 11:43:17 +01:00
ignormies a05c7bc28f chore: Stop using deprecated/removed Nerdfonts codepoints
These Nerdfonts codepoints were removed in [3.0.0](https://www.nerdfonts.com/releases#v3.0.0):

> **Breaking 2: Material Design Icons Codepoints**
>
> The old Material Design Icon codepoints are finally dropped. Due to an historic mistake we placed them in between some asiatic glyphs, breaking that script. Since v2.3.0 the (updated and expanded) Material Design Icons have new codepoints in the 5 digit region.
>
> - Dropped codepoints `F500`… and class names `nf-mdi-*`
> - New codepoints `F0001`… and class names `nf-md-*`
> - The whole discussions are here: https://github.com/ryanoasis/nerd-fonts/issues/365
> - A translation table is available here: https://github.com/ryanoasis/nerd-fonts/issues/1059#issuecomment-1404891287
> - There are tools out there that probably can update your configuration.

For the majority of the removed symbols, it was as easy as finding the
replacement with the exact same name. For example, `f76b` (`nf-mdi-format_header_2`)
became `f026c` (`nf-md-format_header_2`).

There was one symbol that was completely removed (it was removed from
Material Design): `f5fc` (`nf-mdi-camcorder_box`). I have substituted it
with `f03d` (`nf-fa-video_camera`) which is not Material Design, but the
closest icon I could find.

Here's some example output from [nerdfix](https://github.com/loichyan/nerdfix)
```
╭─(ignormies)(~/g/fork-waybar)  removed-nerdfonts-codepoints
╰──▪ nix-shell -p nerdfix --run "nerdfix check resources/config.jsonc"
 INFO Check input from 'resources/config.jsonc'
  ☞ Found obsolete icon U+F76B
     ╭─[resources/config.jsonc:131:27]
 130 │         "format": "{temperatureC}°C {icon}",
 131 │         "format-icons": ["", "", ""]
     ·                           ┬
     ·                           ╰── Icon 'mdi-format_header_2' is marked as obsolete
 132 │     },
     ╰────
  help: You could replace it with:
          1. 󰉬 U+F026C md-format_header_2
          2. 󰉫 U+F026B md-format_header_1
          3. 󰉭 U+F026D md-format_header_3
          4. 󰉮 U+F026E md-format_header_4

  ☞ Found obsolete icon U+F769
     ╭─[resources/config.jsonc:131:41]
 130 │         "format": "{temperatureC}°C {icon}",
 131 │         "format-icons": ["", "", ""]
     ·                                     ┬
     ·                                     ╰── Icon 'mdi-format_float_right' is marked as obsolete
 132 │     },
     ╰────
  help: You could replace it with:
          1. 󰉪 U+F026A md-format_float_right
          2. 󰉨 U+F0268 md-format_float_left
          3. 󰉩 U+F0269 md-format_float_none
          4. 󰉣 U+F0263 md-format_align_right

  ☞ Found obsolete icon U+F5E7
     ╭─[resources/config.jsonc:146:41]
 145 │         "format-full": "{capacity}% {icon}",
 146 │         "format-charging": "{capacity}% ",
     ·                                         ┬
     ·                                         ╰── Icon 'mdi-cached' is marked as obsolete
 147 │         "format-plugged": "{capacity}% ",
     ╰────
  help: You could replace it with:
          1. 󰃨 U+F00E8 md-cached

  ☞ Found obsolete icon U+F796
     ╭─[resources/config.jsonc:170:45]
 169 │         "format-wifi": "{essid} ({signalStrength}%) ",
 170 │         "format-ethernet": "{ipaddr}/{cidr} ",
     ·                                             ┬
     ·                                             ╰── Icon 'mdi-gamepad_variant' is marked as obsolete
 171 │         "tooltip-format": "{ifname} via {gwaddr} ",
     ╰────
  help: You could replace it with:
          1. 󰊗 U+F0297 md-gamepad_variant
          2. 󰺷 U+F0EB7 md-gamepad_variant_outline
          3. 󰑢 U+F0462 md-road_variant
          4. 󰉜 U+F025C md-food_variant

  ☞ Found obsolete icon U+F796
     ╭─[resources/config.jsonc:171:50]
 170 │         "format-ethernet": "{ipaddr}/{cidr} ",
 171 │         "tooltip-format": "{ifname} via {gwaddr} ",
     ·                                                  ┬
     ·                                                  ╰── Icon 'mdi-gamepad_variant' is marked as obsolete
 172 │         "format-linked": "{ifname} (No IP) ",
     ╰────
  help: You could replace it with:
          1. 󰊗 U+F0297 md-gamepad_variant
          2. 󰺷 U+F0EB7 md-gamepad_variant_outline
          3. 󰑢 U+F0462 md-road_variant
          4. 󰉜 U+F025C md-food_variant

  ☞ Found obsolete icon U+F796
     ╭─[resources/config.jsonc:172:44]
 171 │         "tooltip-format": "{ifname} via {gwaddr} ",
 172 │         "format-linked": "{ifname} (No IP) ",
     ·                                            ┬
     ·                                            ╰── Icon 'mdi-gamepad_variant' is marked as obsolete
 173 │         "format-disconnected": "Disconnected ⚠",
     ╰────
  help: You could replace it with:
          1. 󰊗 U+F0297 md-gamepad_variant
          2. 󰺷 U+F0EB7 md-gamepad_variant_outline
          3. 󰑢 U+F0462 md-road_variant
          4. 󰉜 U+F025C md-food_variant

  ☞ Found obsolete icon U+F6A9
     ╭─[resources/config.jsonc:180:36]
 179 │         "format-bluetooth": "{volume}% {icon} {format_source}",
 180 │         "format-bluetooth-muted": " {icon} {format_source}",
     ·                                    ┬
     ·                                    ╰── Icon 'mdi-cup' is marked as obsolete
 181 │         "format-muted": " {format_source}",
     ╰────
  help: You could replace it with:
          1. 󰆪 U+F01AA md-cup

  ☞ Found obsolete icon U+F6A9
     ╭─[resources/config.jsonc:181:26]
 180 │         "format-bluetooth-muted": " {icon} {format_source}",
 181 │         "format-muted": " {format_source}",
     ·                          ┬
     ·                          ╰── Icon 'mdi-cup' is marked as obsolete
 182 │         "format-source": "{volume}% ",
     ╰────
  help: You could replace it with:
          1. 󰆪 U+F01AA md-cup

  ☞ Found obsolete icon U+F590
     ╭─[resources/config.jsonc:186:28]
 185 │             "headphone": "",
 186 │             "hands-free": "",
     ·                            ┬
     ·                            ╰── Icon 'mdi-battery_unknown' is marked as obsolete
 187 │             "headset": "",
     ╰────
  help: You could replace it with:
          1. 󰂑 U+F0091 md-battery_unknown
          2. 󰥊 U+F094A md-battery_unknown_bluetooth
          3. 󱟞 U+F17DE md-battery_arrow_down
          4. 󰝐 U+F0750 md-microsoft_xbox_controller_battery_unknown

  ☞ Found obsolete icon U+F590
     ╭─[resources/config.jsonc:187:25]
 186 │             "hands-free": "",
 187 │             "headset": "",
     ·                         ┬
     ·                         ╰── Icon 'mdi-battery_unknown' is marked as obsolete
 188 │             "phone": "",
     ╰────
  help: You could replace it with:
          1. 󰂑 U+F0091 md-battery_unknown
          2. 󰥊 U+F094A md-battery_unknown_bluetooth
          3. 󱟞 U+F17DE md-battery_arrow_down
          4. 󰝐 U+F0750 md-microsoft_xbox_controller_battery_unknown
```
2026-03-19 17:39:57 -07:00
Carlo Teubner 3b1262061d systemd-failed-units: tooltip w/ failed units list 2026-03-17 21:35:20 +00:00
Carlo Teubner d046c19b85 systemd-failed-units: small tweaks
- Remove unneeded destructor impl
- Rename member variables for consistench with other files
- manpage wording fixes
- updateData(): small logic tweak
2026-03-17 21:34:59 +00:00
eonphi f5d2ef1c4c Merge remote-tracking branch 'upstream/master' 2026-03-10 14:27:40 +01:00
Alexis Rouillard 100349a5c7 Merge pull request #4910 from khaneliman/hyprland
fix(hyprland): misc hardening with ipc socket and events
2026-03-08 22:21:40 +01:00
Austin Horstman f6d92fd708 fix(sni): render attention and overlay tray icon assets
Load attention and overlay pixmaps from item properties, watch the
corresponding update signals, and prefer attention artwork while an item is in
NeedsAttention state.

When an item only exports an attention movie asset, fall back to loading that
asset as a static pixbuf so the tray still shows the alert state.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-03-08 01:42:31 -06:00
Austin Horstman 2a748f1a56 fix(sni): delay tray item insertion until proxies are ready
Only add tray widgets after the SNI proxy has finished initializing and the
item has a valid id/category pair.

This also removes invalid items through the host teardown path, refreshes the
tray when item status changes, and avoids calling DBus methods through a null
proxy during early clicks or scroll events.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-03-08 01:20:15 -06:00
Austin Horstman dd47a2b826 fix(hyprland/workspaces): stabilize reload and event handling
Hyprland workspace reloads could stack duplicate scroll-event connections,
causing a single wheel gesture to switch multiple workspaces after repeated
config reloads. The persistent-workspaces monitor-array form also created the
monitor name instead of the configured workspace name.

Disconnect and replace the scroll handler on reinit, fix the persistent
workspace name selection, normalize urgent-window address matching, and reject
malformed workspace payloads before they corrupt the local state machine.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-03-07 21:06:30 -06:00