Tray applets as modules: openrazer, polychromatic, forticlient, nm-applet #60

Merged
mesh-admin merged 1 commits from feat/tray-applets into main 2026-10-05 13:10:52 +00:00
Contributor

The remaining tray applets of the workstations, each a module with one start (novox/hq ADR 0205, 0207, 0208, 0210, 0212, 0182).

New modules

  • openrazer: openrazer-driver-dkms, openrazer-daemon, python-openrazer (official, extra). No start of its own: D-Bus activation of org.razer through the package's user unit is the daemon's one start. Tools: openrazer_status, openrazer_restart, openrazer_check (driver built by DKMS for the running kernel and loaded, devices bound, account in the openrazer group and its service manager with it, daemon running once from its unit, devices seen over D-Bus, always --auto-start=no).
  • polychromatic: the AUR tray, kept as found (no package). Its one start is a node-display-session contribution, exec --no-startup-id polychromatic-tray-applet, taken over from the i3 module, which drops the line in this change (config/config and module.json). The package's login helper also starts the tray while the app's setting is ticked: polychromatic_check names that as a second start; the operator unticks it once.
  • forticlient: the AUR VPN client, kept as found; forticlient.service declared running and enabled. The tray's one start is the vendor's XDG autostart entry (dex). Tools report running and connected state only: no profile, credential, gateway, certificate, interface name or address is read or answered; tests plant them on a fake machine and assert no answer carries them.
  • nm-applet: network-manager-applet (official). Separate from networkmanager, which runs on servers and holds node-uplink; declares none of its packages. One start: the package's XDG autostart entry.

Other changes

  • desktop.go (shared by blueman, nextcloud-client and the four new bundles) gains procsOf/stopProcs/waitForOf: polychromatic-tools and polychromatic-tray-applet share the 15-character command name, so the tray is matched by its full program name and the tools never count or end themselves. A copies_test.go keeps the six copies identical.
  • cups README: the desktop's print applet (system-config-printer) is not cups's (it needs a display, and cups needs none); left as found, a future desktop module if wanted.
  • xdg README: the autostart owners updated, and geoclue's demo agent (a dependency's piece on the desktop) noted as left as found.

Found while inspecting

The openrazer daemon has failed at every login on both workstations: the account is in plugdev but not in openrazer, which openrazer's udev rules and daemon now require. The module cannot declare the membership, because the account's user resource is zsh's and a second module declaring it collides at composition. One-off step per workstation: sudo gpasswd -a $USER openrazer, then log out of every session or reboot.

Checks

mctl module check modules/*: the new modules pass; the 10 problems are the existing node-backup ones. go vet and go test pass for openrazer, polychromatic, forticlient, nm-applet, blueman, nextcloud-client, i3 (including the catalogue-wide contribution test with i3 -C), xdg and cups.

Not merged, built, assigned or pushed to any machine.

The remaining tray applets of the workstations, each a module with one start (novox/hq ADR 0205, 0207, 0208, 0210, 0212, 0182). ## New modules - **openrazer**: `openrazer-driver-dkms`, `openrazer-daemon`, `python-openrazer` (official, `extra`). No start of its own: D-Bus activation of `org.razer` through the package's user unit is the daemon's one start. Tools: `openrazer_status`, `openrazer_restart`, `openrazer_check` (driver built by DKMS for the running kernel and loaded, devices bound, account in the `openrazer` group and its service manager with it, daemon running once from its unit, devices seen over D-Bus, always `--auto-start=no`). - **polychromatic**: the AUR tray, kept as found (no package). Its one start is a `node-display-session` contribution, `exec --no-startup-id polychromatic-tray-applet`, taken over from the i3 module, which drops the line in this change (`config/config` and module.json). The package's login helper also starts the tray while the app's setting is ticked: `polychromatic_check` names that as a second start; the operator unticks it once. - **forticlient**: the AUR VPN client, kept as found; `forticlient.service` declared running and enabled. The tray's one start is the vendor's XDG autostart entry (dex). Tools report running and connected state only: no profile, credential, gateway, certificate, interface name or address is read or answered; tests plant them on a fake machine and assert no answer carries them. - **nm-applet**: `network-manager-applet` (official). Separate from `networkmanager`, which runs on servers and holds `node-uplink`; declares none of its packages. One start: the package's XDG autostart entry. ## Other changes - `desktop.go` (shared by blueman, nextcloud-client and the four new bundles) gains `procsOf`/`stopProcs`/`waitForOf`: `polychromatic-tools` and `polychromatic-tray-applet` share the 15-character command name, so the tray is matched by its full program name and the tools never count or end themselves. A `copies_test.go` keeps the six copies identical. - cups README: the desktop's print applet (`system-config-printer`) is not cups's (it needs a display, and cups needs none); left as found, a future desktop module if wanted. - xdg README: the autostart owners updated, and geoclue's demo agent (a dependency's piece on the desktop) noted as left as found. ## Found while inspecting The openrazer daemon has **failed at every login on both workstations**: the account is in `plugdev` but not in `openrazer`, which openrazer's udev rules and daemon now require. The module cannot declare the membership, because the account's `user` resource is zsh's and a second module declaring it collides at composition. One-off step per workstation: `sudo gpasswd -a $USER openrazer`, then log out of every session or reboot. ## Checks `mctl module check modules/*`: the new modules pass; the 10 problems are the existing `node-backup` ones. `go vet` and `go test` pass for openrazer, polychromatic, forticlient, nm-applet, blueman, nextcloud-client, i3 (including the catalogue-wide contribution test with `i3 -C`), xdg and cups. Not merged, built, assigned or pushed to any machine.
jschoubben added 1 commit 2026-10-05 13:10:33 +00:00
openrazer (the official driver, daemon and library), polychromatic (the
AUR tray, kept as found; its i3 line moves out of the i3 module into its
own node-display-session contribution), forticlient (the AUR VPN client:
its service declared, its configuration never read) and nm-applet (the
desktop half of NetworkManager, apart from the server-side module).

The openrazer daemon fails on both workstations because the account is
not in the openrazer group; openrazer_check names it and the README
carries the one-off step, since the account's user resource is zsh's.

desktop.go learns to tell a program from another sharing its 15-character
command name, so polychromatic's tools never count or end themselves, and
a copies test holds the six carriers to one text.
jschoubben force-pushed feat/tray-applets from 7c55d0557a to d0d5546088 2026-10-05 13:10:33 +00:00 Compare
mesh-admin merged commit 97b1b2b36b into main 2026-10-05 13:10:52 +00:00
mesh-admin deleted branch feat/tray-applets 2026-10-05 13:10:52 +00:00
Author
Contributor

Delivery novox/mesh-catalog@97b1b2b36bec — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic → g14, shanks; no bus step

  • tier 0: blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic
  • g14: receives blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic
  • shanks: receives blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#60 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@97b1b2b36bec` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic → g14, shanks; no bus step - tier 0: blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic - g14: receives blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic - shanks: receives blueman, cups, forticlient, i3, nextcloud-client, nm-applet, openrazer, polychromatic **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#60 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#60