Openergo is a fully local service for managing ergonomics on Linux desktop systems. It can help you understand, reduce, and avoid the strain caused by keyboard and mouse use.
- Openergo works with all Wayland and X11 desktops without compositor-specific integration.
- Openergo is fully local by default. It does not require an account or a hosted service.
- Openergo is free and opensource. It exists for the benefit of the remaining human computer users.
Alpha. Code is available for technical preview and early testers.
I run from master on NixOS with X11/i3 currently.
- Dwell clicking reduces physical clicks by clicking when the pointer rests in place.
- Pain tracking records pain levels from configurable controls and can remind you to update your pain level when it may be stale.
- Flight data recorder stores high-frequency aggregate usage, activity, credit, and pain data locally for later ML analysis. Disabled by default.
- OpenTelemetry support sends usage, credit, and pain metrics to your own OpenTelemetry collector and data store. Disabled by default.
- Customizable credit model translates clicks, keys, scrolling, dragging, and modifier use into a normalized unit biomechanical cost. Costs, rate-based cost boosting, and rest, break, and daily limits can all be tuned.
- Credit-based reminders use desktop notifications, sounds, desktop bars, and external integrations to show when it is time to rest or stop for the day.
- MIDI devices - provide pain input and display credit and pain state using notes, control changes, sliders, knobs, and LEDs. The included Intech Grid integration uses its slider controls for pain input and its LEDs as a status display.
- Polybar - show live rest, break, daily credit, and pain status through the included script.
- Grafana - display exported metrics using the included dashboard.
A small stateless privileged system service reads input devices and provides dwell clicks, while a per-user service handles tracking, persistence, integrations, and notifications.
The Rust code is reactive async and single-threaded, carefully designed to minimize memory and CPU usage and keep battery use minimal.
Add Openergo to your flake inputs:
inputs.openergo.url = "github:wpbrown/openergo";In your flake outputs, add openergo.nixosModules.default to the host's module
list, then configure the user who will run the client. Replace alex with your
username.
{
imports = [ openergo.nixosModules.default ];
hardware.uinput.enable = true;
services.openergo = {
enable = true;
socket.user = "alex";
client = {
enable = true;
users = [ "alex" ];
};
dwellClick.allow = true;
};
}Rebuild NixOS and log in again. The module starts the system service and starts the client automatically for the configured user.
Download the package for your release from the GitHub releases page, then install it with APT:
sudo apt install ./openergo_<version>_<architecture>.debContinue with Enable the client.
See Manual installation for prerequisites and build instructions for Ubuntu and Fedora. After installation, continue with Enable the client.
Debian packages and manual installations create an openergo group but do not
enroll users or start their per-user service. Add your account to the group:
sudo usermod -aG openergo "$USER"Log out of your full session and log back in, then enable the client:
systemctl --user daemon-reload
systemctl --user enable --now openergo-client.serviceTo allow dwell clicking, set the following in /etc/openergo.toml and restart
the system service:
[dwell_click]
allow = truesudo systemctl restart openergo.serviceThe server configuration lives at /etc/openergo.toml. Per-user settings are
read from ~/.config/openergo/client.toml. See the
configuration reference for all available options.
Openergo is free and open source software licensed under the GNU General Public License v3.0.