* pulsar-mouse: make the per-state widget colors configurable
Both widgets hardcoded their state colors: error for a fault, secondary
while charging, error at the mouse's low-power threshold. The desktop
widget's one `color` setting only covered the normal state, and the bar
widget had no color setting at all.
Expose all four states (normal/charging/low/error) as `type = "color"`
settings on each widget, in the same shape battery-widget uses. Defaults
reproduce exactly what was hardcoded, so an existing install renders
identically until someone changes one.
The new settings are `advanced`; the desktop widget's pre-existing
`color` stays where it was so it does not disappear behind the toggle
for anyone already using it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* pulsar-mouse: rename the bar's normal-state key to normal_color
A bar widget's plugin settings share one TOML table with Noctalia's own
per-widget presentation settings, where `color` already exists ("Color
role for this widget's icon and label"). A plugin declaring `color`
there does not shadow it, it aliases it - one `color = "primary"` under
[widget.<id>] drove both pickers at once, so setting either silently
moved the other.
Renamed to `normal_color`, which also makes the retest unambiguous: the
glyph follows the plugin setting while Presentation's own Color picker
stays on Default.
The desktop widget keeps plain `color` - no clash there, and renaming it
would break existing configs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* Add pulsar-mouse plugin
Battery/charging status and quick sensor/lighting/power controls for a
Pulsar gaming mouse (bar widget, desktop/lock-screen widget, and a
quick-controls panel), backed by the pulsar-mouse CLI from
https://github.com/harveywuk/pulsar-mouse-linux.
* pulsar-mouse: sync to v1.6.1 (three panel fixes)
The plugin picked up four commits upstream after this PR's initial
snapshot was taken. Three of them are bug fixes, two user-facing enough
that installing the current snapshot gives a visibly broken panel:
- Panel went permanently read-only after a successful profile switch.
Every control is `enabled = not busy`, and the profile-switch path set
busy = true then relied on readStatus() to clear it, which it did not
do on any path. No error was shown, because from the user's point of
view nothing had failed.
- readStatus() did not guard decoded.dpi being absent, so a malformed
response threw before clearing busy - the same lockup by another route.
- The panel only re-synced to the mouse's real active profile on the
first open of the process, because the profileSynced flag is module-
scoped and survived the panel closing. Switching profiles by any other
means afterwards (physical profile button, `pulsar-mouse
--active-profile`, Fusion on another OS) left every later reopen
showing, and writing to, a stale profile.
The fourth renames "breath" to "breathe" so the LED effect naming
matches the pulsar-mouse CLI's --breathe-speed flag; that accounts for
the two README wording changes and part of the panel diff.
plugin.toml's version goes 1.6.0 -> 1.6.1 per the contribution rules
(patch: fixes and text only, no new capability). Its header comment also
now describes the tabbed panel that shipped earlier rather than the
original DPI/polling-only one.
bar.luau, desktop.luau, translations/en.json and thumbnail.webp are
unchanged and untouched.
No change to what the plugin shells out to, writes, or reads: still only
`pulsar-mouse` (declared in dependencies), still only reading
~/.cache/pulsar-mouse/battery.json. No network access.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>