Skip to Content
GuideConfiguration

Configuration

OpenLogi stores everything in a single TOML file. The GUI writes it for you — the main window edits button and gesture bindings, DPI presets, SmartShift, and lighting, and the Settings window (⌘,) covers the app-wide preferences — but the file is plain text and safe to hand-edit. Per-app profile overlays have no dedicated editor yet, so those are authored here directly.

OpenLogi reads the config on startup and rewrites it atomically on every change. Hand-edit it while the app is quit, or the GUI will overwrite your edits the next time it saves.

File location

PlatformPath
macOS / Linux$XDG_CONFIG_HOME/openlogi/config.toml (default ~/.config/openlogi/config.toml)
Windows%USERPROFILE%\.config\openlogi\config.toml

The file is written atomically (temp file + rename) and, on Unix, with 0600 permissions.

Top-level layout

schema_version = 2 # required; an unknown version is refused selected_device = "2b042" # HID++ key of the device shown in the carousel [app_settings] # app-wide preferences (omitted entirely when default) # … [devices.2b042] # one block per device, keyed by HID++ id # …
  • schema_version — the layout version (currently 2). A v1 file (separate button_bindings / gesture_bindings tables) still loads and is migrated to the unified bindings map on the next save; a file with an unrecognised version is refused rather than silently misread.
  • selected_device — remembers which device the carousel was on; omitted when unset.
  • [app_settings] — see below; the whole block is omitted while every field is at its default.
  • [devices.<key>] — per-device settings, keyed by each device’s HID++ identifier (e.g. 2b042 for an MX Master 4).

[app_settings]

KeyDefaultMeaning
launch_at_loginfalseStart OpenLogi on login — a LaunchAgent plist on macOS, a systemd user unit on Linux.
check_for_updatesfalseOpt-in. One HEAD request to the GitHub latest-release per launch; logs whether a newer version exists — never downloads. Off by default to keep no telemetry.
show_in_menu_bartruemacOS only. true → menu-bar status item (no Dock icon while closed); false → ordinary Dock app.
language(follow system)UI locale, one of the 20 bundled locales (en, de, pt-BR, zh-CN, …). Unset follows the system locale.
thumbwheel_sensitivity14Thumb-wheel responsiveness on a 1100 scale; the default is 1× native scroll (the wheel is only diverted from native scrolling once this leaves the default).

Per-device blocks

Each [devices.<key>] block holds the settings for one physical device. The key is the device’s HID++ identifier — the same config_key the GUI uses.

KeyTypeMeaning
bindingstableMaps a logical button to a binding: a single action, or a per-direction gesture table (see Buttons and Gesture bindings).
per_app_bindingstable of tablesOverlays keyed by app id (e.g. "com.microsoft.VSCode"). When that app is frontmost its entries win; everything else falls through to bindings.
gesture_ownerstringWhich button owns the gesture role: a button name or "Off". Absent means “infer” — the thumb pad owns gestures when present.
dpi_presetsarray of intsOrdered DPI values cycled by CycleDpiPresets and indexed by SetDpiPreset.
lightingtablePer-device RGB for wired G-series keyboards — see below.

lighting

KeyDefaultMeaning
enabledtrueWhether the static color is applied.
color"ffffff"Static color as six hex digits RRGGBB (no leading #).
brightness1000100; clamped on load.

Buttons

bindings and per_app_bindings are keyed by a logical button:

LeftClick, RightClick, MiddleClick, Back, Forward, DpiToggle (the mode-shift button under the wheel), Thumbwheel (its click), ThumbwheelScrollUp, ThumbwheelScrollDown, GestureButton.

Actions

Binding values are action names, written verbatim:

  • SuppressNone (capture the input but do nothing)
  • MouseLeftClick, RightClick, MiddleClick, MouseBack, MouseForward (the real extra-button events most apps treat as native back/forward)
  • EditingCopy, Paste, Cut, Undo, Redo, SelectAll, Find, Save
  • Browser & tabsBrowserBack, BrowserForward, NewTab, CloseTab, ReopenTab, NextTab, PrevTab, ReloadPage
  • Window & desktop (macOS)MissionControl, AppExpose, PreviousDesktop, NextDesktop, ShowDesktop, LaunchpadShow
  • SystemLockScreen, Screenshot
  • MediaPlayPause, NextTrack, PrevTrack, VolumeUp, VolumeDown, MuteVolume
  • DPI & wheelCycleDpiPresets, SetDpiPreset, ToggleSmartShift
  • ScrollScrollUp, ScrollDown, HorizontalScrollLeft, HorizontalScrollRight
  • CustomCustomShortcut, a recorded key chord

SetDpiPreset (a preset index) and CustomShortcut (a recorded chord) carry extra data, so they’re best set from the GUI’s action picker rather than by hand.

Gesture bindings

A button in gesture mode binds per direction instead of to a single action: its bindings entry becomes a sub-table keyed by Up, Down, Left, Right, Click (Click is the plain press, no swipe). Which button that is — the thumb pad, or another capable button — is chosen via gesture_owner or the GUI’s gesture-button selector.

Example

schema_version = 2 selected_device = "2b042" [app_settings] launch_at_login = true language = "zh-CN" thumbwheel_sensitivity = 14 # MX Master 4 (HID++ key 2b042) [devices.2b042] gesture_owner = "GestureButton" dpi_presets = [800, 1600, 3200] [devices.2b042.bindings] Back = "BrowserBack" Forward = "BrowserForward" MiddleClick = "MissionControl" # The gesture button binds per direction; Click is the plain press. [devices.2b042.bindings.GestureButton] Left = "PrevTab" Right = "NextTab" Click = "PlayPause" # Back becomes Undo only while VS Code is frontmost. [devices.2b042.per_app_bindings."com.microsoft.VSCode"] Back = "Undo" # A wired G-series keyboard, under its own HID++ device key # (`g513` here stands in for that key). [devices.g513.lighting] enabled = true color = "ff0000" brightness = 80

Source: CONFIGURATION.md 

Last updated on