
logiops
An unofficial userspace driver for HID++ Logitech devices
Introduced a runit start script to simplify managing the logid daemon process. This addition allows for easier process supervision and lifecycle management, ensuring logid runs reliably with the specified configuration. 
Added a new configuration for the Logitech MX Master mouse via logid.cfg. This update maps the device's gesture button (cid 0xc3) to custom window management key bindings using gestures. Now, horizontal and vertical mouse gestures will trigger ALT+TAB navigation sequence to improve workflow efficiency.
This update reverts the recent changes that introduced compatibility support for libconfig versions older than v1.5. By standardizing back on the newer API via .lookup(), we ensure a cleaner codebase maintained against modern library versions. 
This change replaces a broad set of libconfig lookup() calls with indexed setting access across configuration, actions, gestures, and device feature parsing. The goal is to avoid API incompatibilities in older libconfig versions that are still common on enterprise distributions like RHEL/CentOS 7, without changing the expected config schema or behavior. In practice, the project should now build and parse configs more reliably on older Linux environments with less patching or distro-specific workarounds.
The README now includes the Solus equivalent of the existing distro-specific dependency setup commands, listing the required eopkg packages for building the project. This is a small documentation improvement, but it removes guesswork for Solus users and makes the build setup more accessible across distributions. Practical effect: one less platform-specific hurdle when getting started.
This update expands the project's documented hardware compatibility by adding the MX Anywhere S2 to TESTED.md, including its device config name, Wireless Mobile Mouse MX Anywhere 2S. The rest of the change is table reformatting to keep the compatibility matrix aligned and readable. For users with this mouse, the practical effect is simple: there’s now an explicit confirmation that it works and which identifier to look for.
This change fixes gesture parsing for the none direction by recognizing mode: "NoPress" and treating it as intentionally doing nothing, instead of always expecting an action. It also adds validation and clearer warnings when an unsupported mode or non-string value is provided, while still defaulting to OnRelease for compatibility. The practical effect is that logid.example.cfg is now accurate and users can configure a no-op none gesture without parser surprises.
This patch corrects an argument alignment bug in ThumbWheel::setStatus: the code allocated a 2-byte parameter buffer but wrote to indices 1 and 2 instead of 0 and 1. That could send malformed data or hit out-of-bounds writes when toggling thumb wheel reporting behavior. The fix is small but meaningful for device control reliability, and it should make thumb wheel status changes behave as intended.
This change fixes the documentation for managing the daemon with systemd by replacing an incorrect start instruction with enable, and it also adds the combined enable --now workflow. The rest of the edits are small readability improvements to make setup less error-prone for users following the install guide. The practical effect is clearer onboarding and fewer mistakes when configuring the daemon to persist across reboots.
This change fixes the example logid.example.cfg by renaming the sample device from MX Master to Wireless Mouse MX Master, aligning it with the actual HID++ 2.0 name. It’s a documentation-only update, but it helps prevent confusion when users copy the example and wonder why their device is not being matched. The practical effect is a more accurate config example and a smoother setup experience.
This change introduces a new ThumbWheel feature implementation and wires it into device initialization and the build, adding support for Logitech devices with the 0x2150 thumb wheel such as the MX Master 3. The feature reads wheel capabilities, configures divert/invert behavior, and maps rotation, tap, touch, and proximity events to existing action and gesture handlers, including high-resolution axis gestures where possible. It’s explicitly untested because the hardware-specific feature is only available on certain devices, but the integration is substantial and opens the door for configurable side-wheel actions. For users with supported hardware, this should enable much richer thumb wheel behavior once validated.
This change adds explicit cleanup for the HiresScroll feature by removing its HID++ wheel-movement event handler in the destructor. Without that teardown, the device could retain a stale callback after the feature object goes away, which risks duplicate handling or lifecycle-related bugs during reconfiguration or shutdown. The practical effect is safer feature cleanup and more predictable high-resolution scroll behavior over the daemon’s lifetime.
This change makes InputDevice tolerate environments where REL_WHEEL_HI_RES and REL_HWHEEL_HI_RES are not available, which can happen on some Linux distributions or older kernel headers. The hi-res axis mapping logic is now guarded with conditional compilation instead of assuming those constants always exist, and the direct include of linux/input-event-codes.h was removed. In practice, the code now builds and behaves more safely across a wider range of distros without breaking standard wheel handling.



