Commit Graph
607 Commits
Author SHA1 Message Date
github-actions[bot] 3b89032eb9 chore: update plugin catalog [skip ci] 2026-08-12 13:34:29 +00:00
MA DingjieandGitHub 222fec4875 Dev/mihomo control (#339)
* Add Mihomo Control plugin

Monitor and control a Mihomo (Clash Meta) external controller from the
bar: live traffic graph, proxy mode, proxy-group management with latency
tests, and core restart. Works locally (127.0.0.1) or remotely via
host/port/secret settings.

* Add Chinese (Simplified) translation

* Add test-all latency button

Adds a Test all button next to the Proxy groups heading that runs latency
tests on every group sequentially, with a single summary notification.

* Unify traffic and proxy groups section styles

Give both sections the same card look: muted medium-weight heading on the
left, secondary info on the right, and proxy-group cards restyled as
bordered sub-cards inside the section.

* Polish proxy group cards

Show the selected proxy next to the bold group name (ECS > ecs-proxy),
move the expand chevron to the type/members row where the list opens,
and drop the list glyph from the card header.

* Decouple heights of paired group cards

Keep each card in a two-column row at its natural height instead of
stretching the neighbor when one is expanded.

* Use thumbnail generator to generate thumbnail

* mihomo-control: theme-aware panel colors

Use theme roles for traffic and latency colors so they stay readable in
light mode, and keep the status chip's green/amber/red identity with
darker light-mode shades.
2026-08-12 09:34:17 -04:00
github-actions[bot] 86e04099bc chore: update plugin catalog [skip ci] 2026-08-11 15:28:45 +00:00
13bde174ad pulsar-mouse: make the per-state widget colors configurable (#336)
* 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>
2026-08-11 11:28:30 -04:00
github-actions[bot] a7581e8a1c chore: update issue templates [skip ci] 2026-08-11 14:42:37 +00:00
github-actions[bot] 5fc8f5af04 chore: update plugin catalog [skip ci] 2026-08-11 14:42:26 +00:00
Zeti_1223andGitHub 1cdbaba5e7 thinkpad-led (#329)
* thinkpad-led

* Update en.json

* Update README with widget information

* PR fixes

* fix PR
2026-08-11 10:42:13 -04:00
github-actions[bot] 30f6bf0d66 chore: update plugin catalog [skip ci] 2026-08-11 00:32:17 +00:00
d5bf4d2168 feat(panel): remove full mode, rename compact to standard and fixed some UI (#328)
* feat(panel): remove full mode, rename compact to standard

- Remove panel-full entry (660×340) and all full-mode code paths
- Rename compact → standard across panel, settings, translations
- Restrict tile hover/click to icon+label only (no border hover)
- Shrink close button to 24×24 with 12px glyph
- Reduce standard section vertical padding to 4px
- Standard panel height: 290 → 260 (matches legacy at 260)
- Fix widget/shortcut/service toggle to respect panel-mode setting
- Update README with correct sizes and behavior

* added new thumbnail.webp

---------

Co-authored-by: Ahmed5Emad <ahmed5emad@users.noreply.github.com>
2026-08-10 20:32:07 -04:00
Lemmy 625fc8cba3 chore(i18n): stop fighting the translations 2026-08-10 20:29:37 -04:00
github-actions[bot] 38cf11cb86 chore: update plugin catalog [skip ci] 2026-08-11 00:28:28 +00:00
dfe53d2469 fix(obs-integration): missing "Broken" build status (#335)
* fix(obs-integration): missing Broken build status

* chore(obs-integration): bump version up

---------

Co-authored-by: neyfua <ogkhang.05@gmail.com>
2026-08-10 20:28:17 -04:00
github-actions[bot] 59699f3fa0 chore: update plugin catalog [skip ci] 2026-08-11 00:26:32 +00:00
RAMAandGitHub 12e0501c44 gamer-mode: 0.7.0 (#331)
* gamer-mode: 0.7.0

Adds a monitor bar widget that renders live readings the way the shell's own
sysmon widgets do, with a flame band beneath them while gamer mode runs.

- Readings warm toward the highlight colour over the shell's own activity and
  critical thresholds, so a monitor sitting beside a sysmon capsule group warms
  in step with it.
- The flame is advected along a wandering wind and sharpened so it reads as
  tongues rather than a smudge; the flare ignites and decays on an ease-out.
- The band's slot is reserved on each side of the readings, so toggling gamer
  mode never moves a digit and the readings stay centred in the pill.
- Panel readings outrank their captions, progress fills warm at the same
  thresholds, and the mark carries a load-reactive halo with a soft ember under
  the header while the mode runs.
- The mark is redrawn and ships a dark and a light ramp.

* gamer-mode: tighten the README prose
2026-08-10 20:26:19 -04:00
github-actions[bot] ced017593e chore: update plugin catalog [skip ci] 2026-08-10 16:03:56 +00:00
Dave HammerandGitHub 41b58c734d Update davemhammer/gocryptfs to 1.3.1 (#326)
Secure short-lived password files under a private 0700 directory
(under /dev/shm when available) before write, closing a umask/chmod race.
2026-08-10 12:03:42 -04:00
Lemmy 2010b199f0 chore(i18n): gocryptfs + ruh-vpn init 2026-08-09 21:09:59 -04:00
github-actions[bot] f59badc8d5 chore: update issue templates [skip ci] 2026-08-10 01:08:55 +00:00
github-actions[bot] 04a40bcf27 chore: update plugin catalog [skip ci] 2026-08-10 01:08:43 +00:00
Dave HammerandGitHub 0919fff83c Add davemhammer/gocryptfs (#324)
Mount, unmount, init, and auto-mount gocryptfs volumes from Noctalia.
Passwords use secret-tool (desktop keyring) plus keyctl session cache.
2026-08-09 21:08:30 -04:00
github-actions[bot] 186ad22c80 chore: update issue templates [skip ci] 2026-08-10 01:03:23 +00:00
github-actions[bot] 0c2436884f chore: update plugin catalog [skip ci] 2026-08-10 01:03:12 +00:00
0733efd186 Add umedbazarov/ruh-vpn: VPN/proxy manager for sing-box (#304)
* Add umedbazarov/ruh-vpn: VPN/proxy manager for sing-box

New community plugin: bar widget, panel, service and control-center
shortcut for managing SSH, VLESS, VMess, Shadowsocks and SOCKS5
connections through sing-box, with routing presets, custom rules,
system-proxy/TUN modes and a kill switch. The bundled Python backend
serves a loopback control API protected by a per-launch bearer token.

* Address review: sanitize kill-switch ruleset, scope TUN capability, fix mux error path, disclose DNS

- kill switch: only pre-resolved, canonicalized literal IPs enter the nft
  ruleset; domains are resolved first and anything unparseable is dropped,
  so subscription-supplied addresses can no longer inject nft syntax
- TUN: CAP_NET_ADMIN is granted to a plugin-private copy of sing-box in a
  0700 directory instead of the shared system binary; the copy is refreshed
  (clearing the cap) when the system binary changes, and the legacy grant
  on the shared binary is removed in the same polkit prompt
- fix NameError in the mux startup failure path (undefined mux_name) that
  hid the log tail and skipped teardown
- README: disclose plain-UDP DNS endpoints (8.8.8.8 via tunnel, 223.5.5.5
  direct in rules mode) alongside the TUN DoH endpoint

---------

Co-authored-by: Umedjon Bazarov <170195993+UmedjonBA@users.noreply.github.com>
2026-08-09 21:03:02 -04:00
Damian D'SouzaandGitHub 443056892e docs(battery-threshold): add supported devices note (#323) 2026-08-09 17:07:57 -04:00
github-actions[bot] ccf3a47466 chore: update plugin catalog [skip ci] 2026-08-09 20:49:51 +00:00
Apex077andGitHub 68264df5cc fix(eyecare): fixed silent audio fallback, add reset toast (#312) (#322)
* chore(eyecare): bump version to 1.0.2

* fix(eyecare): fix silent audio, finish-break chime, and reset toast notification

* fix(eyecare): reorder helper functions above update to resolve Luau scoping
2026-08-09 16:49:41 -04:00
Lemmy f40d2b32fc chore(i18n): procmon 2026-08-09 13:55:51 -04:00
github-actions[bot] 97d160c5b8 chore: update plugin catalog [skip ci] 2026-08-09 17:55:13 +00:00
weinguyenandGitHub 44e32f58bc Update(procmon-plugin): Add keyboard navigation and reduce CPU sampling (#321)
* Add procmon plugin with live process panel

New Noctalia plugin: bar widget shows CPU/RAM usage and process
count; floating panel has a sortable, searchable process table
with per-process kill. Background service samples ps and /proc
stats and publishes via plugin state.

* Throttle data-driven panel renders

Rebuild table at most every 500ms to stay within the panel update
CPU budget. User interactions still render immediately; only state
watches and the tick go through maybeRender().

* Update procmon deps and fix timestamp precision

Document head, grep, and cat as required commands. Correct refresh
interval default to 1000 ms. Sample refreshedAtMs in milliseconds.

* Add keyboard navigation and reduce CPU sampling

- Panel: arrow keys move cursor, Ctrl+D kills selected, Ctrl+F focuses
  filter
- Service: sample /proc stats every 1s, ps every 2s; 2s render floor
- Widget: handle vertical bars, truncate text, use valid theme color
- Bump version to 0.4.0, plugin_api 13
2026-08-09 13:55:01 -04:00
Lemmy 82f1cffd55 chore(i18n): opencode-companion+link-ip-mon 2026-08-09 13:52:47 -04:00
github-actions[bot] 961c5c8ebc chore: update issue templates [skip ci] 2026-08-09 17:50:52 +00:00
github-actions[bot] e7015b4ec2 chore: update plugin catalog [skip ci] 2026-08-09 17:50:42 +00:00
NilsonlinuxandGitHub af32a36f1c Add nilsonlinux/link-ip-monitor v1.0.0 (#320)
* Add nilsonlinux/link-ip-monitor v1.0.0

* Add nilsonlinux/link-ip-monitor v1.0.0

* Update plugin ID in README.md

* Rename project to link-ip-monitor and update ID

Updated the project name and ID in the README.

* Update plugin ID and command syntax in README
2026-08-09 13:50:32 -04:00
github-actions[bot] 42bea0452b chore: update issue templates [skip ci] 2026-08-09 17:44:16 +00:00
github-actions[bot] 29e51cdb14 chore: update plugin catalog [skip ci] 2026-08-09 17:44:03 +00:00
weinguyenandGitHub e77d7ef7fb Add OpenCode Companion plugin (#286)
* Add OpenCode Panel plugin
Introduce initial implementation of the OpenCode Panel plugin.
This commit includes:
- Bar widget for status and quick actions.
- Chat panel with session selection, message history, and input.
- Background service for OpenCode server management, SSE event
  handling, and state persistence.
- Plugin configuration, documentation, and internationalization.

* Refine session chooser UI layout

Remove an unnecessary spacer and apply top-justification to improve
vertical alignment. Add a subtle background fill to the session list.

* Introduce session search in chooser

Enable live filtering of sessions in the chooser. Matches against
title, slug, ID, and directory. Search is case-insensitive.

* Support multi-question agent requests and clear composer

Implement multi-question agent replies by accumulating choices locally.
A "Submit" button becomes enabled only after all questions are answered.
The chat composer clears its text after sending by updating its key,
forcing the UI to re-render an empty input field.
Updated translations for send hints and question submit button.

* Add UI mode setting for compact layout

Introduce a `ui_mode` setting (Full/Compact) that dynamically adjusts
panel
layout. Compact mode reduces padding, font sizes, and gaps, hiding some
secondary details to minimize the panel footprint. Layout metrics
recompute on every render based on this setting.

* Delete opencode-panel

* Update thumbnail.webp

* Render chat messages newest-first

Newest message shows at top. Scrolling down reveals older messages.
This avoids scroll offset resets on re-mount in older shell APIs.
Thinking bubble now appears above the newest message.

* FEAT: Add panel layout setting

Provide option for panel to fill right side or appear compact near
click.
Introduces a new panel entry for the "fill right" mode.

* Rename plugin to OpenCode Companion

Update plugin ID, panel entries, IPC commands, and state paths.

* Only send model override when known

Stale default_model now falls back to no override instead of failing
every turn. Warn when configured default unavailable.

* Update service.luau

* fix(opencode-companion): secure terminal open, publish MCP status,
respect auto_start

- Shell-quote host and session id in the "open in terminal" command so a
  crafted server_host cannot inject extra shell commands
- Publish opencode.mcp_status and render it as a collapsible footer
  (previously declared but never observable)
- Honor auto_start: skip managed-server start on load when set to false
- Fix broken thumbnail link in README (assets/thumbnail.webp ->
  thumbnail.webp)

* fix Terminal command injection,MCP status publication and UI
2026-08-09 13:43:51 -04:00
Lemmy 66226fc7e1 chore(i18n): push/pull for new plugins 2026-08-09 10:26:51 -04:00
github-actions[bot] abd2a8fde8 chore: update issue templates [skip ci] 2026-08-09 14:24:44 +00:00
github-actions[bot] c795e1c7b5 chore: update plugin catalog [skip ci] 2026-08-09 14:24:35 +00:00
Dave HammerandGitHub 38d6255b98 Add davemhammer/opnsense (#315)
OPNsense health, interfaces, gateways, rules, logs, and service control.
2026-08-09 10:24:22 -04:00
github-actions[bot] ad943f87ae chore: update issue templates [skip ci] 2026-08-09 14:14:17 +00:00
github-actions[bot] 04b81e898b chore: update plugin catalog [skip ci] 2026-08-09 14:14:07 +00:00
Dave HammerandGitHub 5bae8428a3 Add davemhammer/k8s-status (#314)
* Add davemhammer/k8s-status

Kubernetes nodes/pods/deployments monitor with panel and /kube launcher.

* k8s-status v1.1.5: fix stuck Querying cluster

Parallel kubectl refresh, hang recovery, safer loading UI.
2026-08-09 10:13:48 -04:00
github-actions[bot] 6c77061326 chore: update issue templates [skip ci] 2026-08-09 14:01:58 +00:00
github-actions[bot] 056a06eece chore: update plugin catalog [skip ci] 2026-08-09 14:01:45 +00:00
73ae491d97 Add pulsar-mouse plugin (#318)
* 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>
2026-08-09 10:01:34 -04:00
Apex077andGitHub d93e7e0b05 fix(eyecare): respect Noctalia sound settings (#316)
* fix(eyecare): reflect configurable break duration in notification message

Fixes #63

* fix(eyecare): respect Noctalia global sound settings
2026-08-09 09:56:47 -04:00
github-actions[bot] ae989549f6 chore: update plugin catalog [skip ci] 2026-08-09 13:53:58 +00:00
f222cdee2b Update nightwatch75/dns-switcher to 0.1.2 — fix #292 review notes (#319)
Addresses the three non-blocking notes from #292:

- README's plugin_api requirement was stale (22) vs the manifest's real
  minimum (17, the onExit lifecycle addition) — corrected, and pinned the
  noctalia version floor to beta.7 (the first tagged release plugin_api
  actually reaches 17 in).
- apply()'s privilege path ran the whole discovery+mutate script through
  `priv sh -c '...'`, which the documented sudoers rule (NOPASSWD:
  /usr/bin/nmcli) never covers — sudo -n always failed. Now the privilege
  prefix is applied to each of the two mutating nmcli calls individually,
  never to a wrapping shell.
- Regenerated thumbnail.webp.

Co-authored-by: nightwatch75 <nightwatch75@users.noreply.github.com>
2026-08-09 09:53:47 -04:00
Lemmy b9d21951ec docs: fix v5 links 2026-08-08 23:39:27 -04:00