Skip to content

Releases: codingncaffeine/Nexus-Manager

Nexus Manager 0.0.6

Choose a tag to compare

@codingncaffeine codingncaffeine released this 09 Sep 01:12

What's New

  • Macros, with an editor — A touch button can now run an ordered sequence of key presses, releases and waits, repeating once, a set number of times, or until you press it again. Pick Macro as a button's action and Edit macro… opens a numbered event list: click a chip to set its key or its delay, click the state chip to cycle tap → hold → release, right-click a row for Add Above / Add Below / Copy / Paste / Delete. Separate press and release are the point — that is what lets a macro hold Ctrl across several other keys.

    Test runs it once after a three-second countdown, so you can put focus on the window the keys are actually meant for. It runs one pass whatever the repeat setting says, because an until pressed again macro tested from a dialog would never stop.

    Keys come from a searchable picker of all 94 the virtual keyboard can send. Everything goes through a uinput virtual keyboard, which on Wayland is the only way to reach another application at all.

    There is no recording tab. Wayland has no global key capture — the same wall that makes uinput necessary for sending — so the events are authored rather than captured. Nothing about the stored format would change if recording ever becomes possible.

  • Music visualizers can share a screen — A visualizer used to own the whole strip. It is now a cell with a weight, like a readout or a button, so you can put a spectrum next to your CPU temperature instead of choosing between them. A screen carrying one automatically runs at 30 fps instead of the 24 that is plenty for a number that changes once a second.

  • Import Corsair's own screen packs — nexus-manager import <pack.cuescreens> reads the .cuescreens files iCUE exports, including their macros, and --write adds them to your configuration. The format was decoded from Corsair's published packs and is documented in docs/CUESCREENS-FORMAT.md.

    A pack can only ever produce a macro. Any other action type is refused by name — an imported file cannot make a button launch a program.

  • A button can carry your own image** instead of a drawn icon. Config-file only for now: set Image on a button in screens.json. There is no editor control for it yet, and it is listed here so it is not a surprise rather than as a finished feature.

What's Fixed

  • The editor could stop drawing entirely** — A sentinel value overflowed on every timer tick, which killed the render loop for every screen. Nothing crashed and nothing was logged; the window simply froze, which is indistinguishable from a feature that does not work. If you saw a visualizer screen render nothing, this was why.

  • A macro button worked on every other press** — The runner treats a second press as stop, but never marked a finished run as finished, so the following press was swallowed. Silent, and it made a working macro look intermittently broken.

Nexus Manager 0.0.5

Choose a tag to compare

@codingncaffeine codingncaffeine released this 08 Sep 21:08

A small release. If you are on 0.0.4 there is nothing here you will notice day to day; the reason to take it is the checksum file and the cleaner binaries.

Not affiliated with or endorsed by Corsair.

What's New

  • Every release now ships a SHA256SUMS file — Verify a download before installing it:

    sha256sum -c SHA256SUMS --ignore-missing

    Builds are also deterministic now, so building the tag on a machine with the same .NET toolchain reproduces the published tarball byte for byte. That is not the same as a signature, and it is not reproducible across different toolchains — the bundled runtime version has to match. SECURITY.md says exactly what is and is not claimed.

What's Updated

  • Glow pills no longer allocates per bar per frame — The mode created a native rounded-rectangle object for every bar on every frame and never disposed one. It draws identically now and does slightly less work. Measured honestly: this was not causing memory growth you would have noticed — an A/B soak could not tell the old build from the new one — but an undisposed object in a per-frame path is worth removing regardless.
  • Build paths are no longer embedded in the binaries — Assemblies carried the absolute path they were compiled from, which showed up in crash reports. Stack traces are shorter and no longer carry a developer's directory layout.

Under the hood

Not user-visible, listed because people ask what a project does to check itself:

  • Continuous integration on every push and weekly: builds with warnings as errors, runs the analyser self-test, renders a real frame, runs the editor's full view self-test under xvfb, audits dependencies for known advisories, asserts the build is reproducible, and runs CodeQL.
  • The package test now starts the packaged systemd unit and requires it to reach its ready state — the check that would have caught the broken unit shipped in 0.0.3.

Installing

# Debian / Ubuntu
sudo dpkg -i nexus-manager.deb && sudo apt-get -f install

# Arch
paru -S nexus-manager-bin

Both install the udev rule and reload udev. If the panel was already plugged in, replug it or reboot so the access rule applies.

The music visualizers capture the default output through parec, which comes from pulseaudio-utils on Debian and libpulse on Arch. Everything else works without an audio server.

Nexus Manager 0.0.4

Choose a tag to compare

@codingncaffeine codingncaffeine released this 08 Sep 19:02

A security and robustness pass over 0.0.3. Everything below was found by reviewing the code rather than by waiting for it to go wrong, and each fix was verified against the failure it repairs.

If you are on 0.0.3, this replaces it. Not affiliated with or endorsed by Corsair.

What's Fixed

  • The headless service could never start — The bundled systemd user unit set ProtectHome=, which covers /run/user as well as your home directory. That made the directory holding the panel lock read-only, so the daemon could not start and reported "the panel is already being driven by another instance" — naming a process that did not exist. Anyone who tried to run the panel without a tray hit this every time.
  • A damaged configuration crashed the application on startup — An interrupted save, or a hand edit with a typo in it, left screens.json unreadable and the application died on launch with no message explaining why. It now tells you what is wrong with the file, keeps a copy of it alongside, and starts from a freshly discovered configuration instead of overwriting what you had.
  • Lock failures blamed the wrong thing — Several unrelated problems all reported that another instance held the panel. If you were told to stop a program that was not running, this is why.
  • Launching a program could hang the button that launched it — A launch action waited on the program's output, so a program that printed a lot could deadlock, and launching anything long-lived tied up a worker for as long as it stayed open.
  • A predictable temporary directory — On systems where XDG_RUNTIME_DIR is not set, the fallback directory under /tmp was created with default permissions at a name another user on the same machine could guess and create first. It is now created private to you, and refused if it is not.

What's New

  • The Debian package installs the headless service — Previously only the AUR package did, so there was no supported way to run the daemon without a tray on Debian or Ubuntu.
  • A security documentSECURITY.md sets out what the application can do, what it deliberately does not need — no root, no network, no system daemon — and where the trust boundaries are. Worth reading if you configure launch actions or key presses.

What's Updated

  • The service is sandboxed considerably harder — System call filtering, no network access at all, and device access closed to everything except the panel and the virtual keyboard. systemd-analyze security rates the unit 1.3 where it previously rated 7.0. Two settings that improved the rating were removed again because the service would not start with them; SECURITY.md records which and why.

Installing

# Debian / Ubuntu
sudo dpkg -i nexus-manager.deb && sudo apt-get -f install

# Arch
paru -S nexus-manager-bin

Both install the udev rule and reload udev. If the panel was already plugged in, replug it or reboot so the access rule applies.

The music visualizers capture the default output through parec, which comes from pulseaudio-utils on Debian and libpulse on Arch. Everything else works without an audio server.

Nexus Manager 0.0.3

Choose a tag to compare

@codingncaffeine codingncaffeine released this 08 Sep 18:16

Nexus Manager drives the Corsair iCUE NEXUS — the 640×48 touchscreen that clips to a keyboard — directly over USB HID on Linux. No vendor software is involved: iCUE is Windows-only, and Corsair's own SDK is a client of the iCUE daemon rather than a hardware interface, so it cannot help here either.

Not affiliated with or endorsed by Corsair.

What's New

  • Sensor display on the panel — Configurable readouts rendered at 24 fps, with scrolling strip charts and the session low and high shown beside each reading. Sensors are discovered from the machine itself; a typical desktop reports 70 or more across CPU, GPU, drives, memory, network and the motherboard.
  • Multiple screens, changed by swiping — Lay out as many screens as you like and swipe between them on the panel. Touch buttons share the strip with readouts and fire key combinations, brightness changes, screen jumps or arbitrary commands.
  • Animated backgrounds — Point a screen at a GIF or WebP and it plays behind the readouts at its own frame rate.
  • 32 music visualizer modes — Driven by whatever the machine is playing. Spectrum bars in several shapes, oscilloscopes, a stereo goniometer, VU meters, a scrolling spectrogram, and effect modes from fire and plasma to metaballs, a particle fountain and a feedback tunnel. Peak caps hold, detach and fall under gravity onto the bar beneath them. Named colour palettes apply across every spectrum mode, and bar and cap colours are set independently.
  • GUI editor with a live preview — Home, Dashboard, Panel and Music Visualizer views. The preview pushes to the panel as you edit, so what you are configuring is on the keyboard in front of you. Drag to reorder, resize cells by dragging their dividers, and log sensors to CSV.
  • Tray icon and autostart — Closing the window hides it rather than quitting, so dismissing the window never blanks the panel. A headless systemd user service is included for machines with no tray.
  • Temperature in Celsius, Fahrenheit or Kelvin.
  • Debian package and AUR package — A .deb for Debian and Ubuntu, installing the udev rule and desktop entries, and nexus-manager-bin on the AUR. Both bundle the .NET runtime, so nothing needs installing alongside them.

Installing

The panel needs a udev rule before it can be opened without root. Both packages install it and reload udev for you; if the panel was already plugged in, replug it or reboot so the ACL is applied.

Building from source instead:

dotnet build -c Release
sudo cp packaging/70-icue-nexus.rules /etc/udev/rules.d/
sudo udevadm control -R && sudo udevadm trigger --action=add --subsystem-match=hidraw
./packaging/install-desktop.sh

The music visualizers capture the default output's monitor through parec, so they need pulseaudio-utils on Debian or libpulse on Arch. Everything else works without an audio server.

Known limits

  • One panel per machine; a second instance is refused rather than allowed to fight over the device.
  • .cuescreens import is not implemented, though the format is documented in docs/.
  • Macros are limited to a single key or chord — no sequences, delays or repeats yet.