Skip to content

feat: add ip-monitor plugin - #207

Merged
ItsLemmy merged 15 commits into
noctalia-dev:mainfrom
3ri4nG0ld:add-ip-monitor
Aug 3, 2026
Merged

feat: add ip-monitor plugin#207
ItsLemmy merged 15 commits into
noctalia-dev:mainfrom
3ri4nG0ld:add-ip-monitor

Conversation

@3ri4nG0ld

@3ri4nG0ld 3ri4nG0ld commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Plugin

  • Id: 3ri4ng0ld/ip-monitor
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

It provides a bar widget (widget) and a desktop widget (desktop) to monitor network IP addresses. It supports fetching IPs from network interfaces (with wildcard support), running custom shell commands (e.g., fetching a public IP via curl), or receiving IP and network details via external IPC events.

  • Bar Widget (widget): Displays the icon, IP, and optional name on the bar with a detailed hover tooltip containing network metadata (interface, IP, network, gateway, mask, broadcast), with click actions to copy the IP or name.
  • Desktop Widget (desktop): Displays an overlay widget on the desktop with configurable font sizes, customizable label/value colors, and a dedicated network details table.

External dependencies

  • ip (from iproute2): Required to resolve IP and gateway in Interface mode (ip -4 -o addr show and ip route show).
  • curl (optional): Used by default custom command setting to fetch public IP (curl -s ifconfig.me).

Testing

Tested both bar and desktop widgets switching between Interface, Custom Command, and IPC modes. Verified that interface globs correctly match network interfaces and sent IPC set payloads to update IP and network details.

  • Tested on Hyprland
  • Tested on Niri
  • Tested on Sway
  • Tested on another compositor:
  • Noctalia version tested against: v5 (latest)
  • Plugin API level: 3

Screenshots / Videos

image image

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.
  • I created thumbnail.webp with the thumbnail generator.
  • 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

Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:

  • 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.

@3ri4nG0ld
3ri4nG0ld marked this pull request as draft August 1, 2026 23:57
@3ri4nG0ld 3ri4nG0ld changed the title Add ip-monitor plugin feat: add ip-monitor plugin Aug 1, 2026
@3ri4nG0ld
3ri4nG0ld force-pushed the add-ip-monitor branch 2 times, most recently from 873f667 to a2364c1 Compare August 2, 2026 00:05
@3ri4nG0ld
3ri4nG0ld marked this pull request as ready for review August 2, 2026 02:55
@ItsLemmy

ItsLemmy commented Aug 2, 2026

Copy link
Copy Markdown
Contributor
  1. blocking - ip-monitor/widget.luau:297

The interface name parsed from ip output is appended verbatim to a command passed to noctalia.runAsync. Noctalia executes this API through /bin/sh -c, so shell metacharacters in an interface name can be interpreted as shell syntax and cause unintended command execution in interface mode. Shell-quote matchedIface or use an
argv-based execution path.

  1. blocking - ip-monitor/README.md:51

ip-monitor/README.md:57
ip-monitor/README.md:58
ip-monitor/plugin.toml:3

All documented IPC commands use 3ri4nG0ld/ip-monitor, but the manifest ID is 3ri4ng0ld/ip-monitor. Noctalia compares IPC entry IDs byte-for-byte, so these commands cannot match the plugin entry. Update every command to use the exact manifest ID.

  1. non-blocking - ip-monitor/README.md:87

ip-monitor/widget.luau:196
ip-monitor/widget.luau:201

The README says left-click and right-click actions are configurable and lists a None option, but the manifest declares no click-action settings. The implementation always copies the IP on left click and the name on right click. Either add the documented settings or describe the fixed behavior and remove the unused option translations.

  1. non-blocking - ip-monitor/README.md:34

ip-monitor/plugin.toml:117

The README documents a 10-second default refresh interval, while the manifest default is 60 seconds. Align the documentation with the effective default.

@ItsLemmy
ItsLemmy marked this pull request as draft August 2, 2026 15:46
@3ri4nG0ld
3ri4nG0ld marked this pull request as ready for review August 3, 2026 01:35
@ItsLemmy
ItsLemmy merged commit fb5dd05 into noctalia-dev:main Aug 3, 2026
2 checks passed
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.

2 participants