Skip to content

Add soundcore-buds plugin - #686

Merged
ItsLemmy merged 1 commit into
noctalia-dev:mainfrom
sankity:add-soundcore-buds
Sep 10, 2026
Merged

ItsLemmy merged 1 commit into
noctalia-dev:mainfrom
sankity:add-soundcore-buds

Conversation

@sankity

@sankity sankity commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Plugin

  • Id: sankity/soundcore-buds
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

Soundcore battery, listening mode and ANC strength in the Noctalia bar, powered by OpenSCQ30. Bar widget (soundcore) shows buds outline plus lowest battery; left click opens the panel (panel), right click cycles the listening mode via the service (service) without opening anything. The panel exposes battery, listening modes + ANC sub-modes, touch controls, sound/device settings and a Find-my-buds locating tone — all capability-driven, so unsupported controls stay hidden per model. Tested against Soundcore R60i NC (D1202C).

plugin_api = 24: youngest capability used is the argument-array form of noctalia.runAsync() (every call site passes an argv table). Nothing above level 24 is used ([widget.actions] = 14, capture_keys = 13, noctalia.nowMs() = 12). Levels 24–28 all map to the same Noctalia release, so 24 is the oldest level this plugin requires.

External dependencies

  • openscq30 — device query/control (all Soundcore communication goes through it)
  • bluetoothctl — discovery and connection state
  • busctl — pause/resume MPRIS players while the Find tone plays
  • pactl — sink selection, volume/mute save, boost and restore
  • paplay (or pw-play) — play the locating tone
  • python3 — synthesize the 20 s locating WAV locally via heredoc (no download)
  • bash — run the shipped helpers/find.sh

All seven are listed in dependencies in plugin.toml and documented under Requirements in README.md.

Testing

Opened the widget on the bar, opened the panel via left click and via noctalia msg panel-toggle sankity/soundcore-buds:panel, cycled modes via right click and via noctalia msg plugin sankity/soundcore-buds:service all cycle-noise, exercised refresh, find-left/find-right/stop-find, and toggled the widget settings (hide_when_disconnected, icon) plus plugin settings (openscq30_path, poll_interval).

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor: Umbriel
  • Noctalia version tested against: v5.0.1
  • Plugin API level: 24

Screenshots / Videos

panel

Checklist

  • The directory name matches the part of id after the / in plugin.toml exactly.
  • It ships plugin.toml, README.md, thumbnail.webp, and translations/en.json.
  • README.md follows the
    README template, documents
    every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
  • thumbnail.webp is present and relevant; for a new plugin I created it with the thumbnail generator, and for an update I regenerated it with the generator if the visual identity or user-facing appearance changed.
  • version follows semver and is bumped in this PR; plugin_api is the oldest API level this plugin requires.
  • Every non-English translation in this PR uses a locale supported by Noctalia core, and I can read, write, and
    understand that language well enough to review and maintain it (no unreviewed machine/LLM translations).
  • I did not edit catalog.toml; CI generates it.
  • This PR touches exactly one plugin directory.

Code review attestation

  • The code is readable and not obfuscated, minified, or generated.
  • It does not download and execute remote code.
  • Every network call, filesystem write, and spawned process is something the description above accounts for.
  • I have the right to publish this code under the license declared in plugin.toml.

@alitura1

alitura1 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

That's nice

@ItsLemmy

Copy link
Copy Markdown
Contributor
  1. non-blocking - soundcore-buds/thumbnail.webp
    The bottom edge of the product-render panel is clipped: the "LISTENING MODE"
    section text is sliced horizontally mid-glyph at the image boundary, with no
    panel bottom border visible beneath it. Confirmed on an enlarged crop of the
    lower right corner. The thumbnail is the plugin's storefront image and the
    clip reads as a broken render. Regenerate the thumbnail so the whole panel
    fits inside the 960x540 canvas.

@ItsLemmy
ItsLemmy merged commit a6cd142 into noctalia-dev:main Sep 10, 2026
3 checks passed
@sankity
sankity deleted the add-soundcore-buds branch September 10, 2026 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants