pub struct DeviceConfig {
pub gesture_owner: Option<GestureOwner>,
pub identity: Option<DeviceIdentity>,
pub bindings: BTreeMap<ButtonId, Binding>,
pub per_app_bindings: BTreeMap<String, BTreeMap<ButtonId, Action>>,
pub dpi_presets: Vec<u32>,
pub dpi: Option<u32>,
pub lighting: Option<Lighting>,
pub smartshift: Option<SmartShift>,
pub invert_scroll: bool,
}Expand description
Settings scoped to a single physical device (keyed by HID++ model+ext).
Deserialization goes through RawDeviceConfig (#[serde(from)]) so
pre-v2 files — which split bindings across button_bindings +
gesture_bindings — fold into the unified Self::bindings map. Only
bindings is ever serialized, so a migrated file self-heals to the v2 shape
on its next save.
Fields§
§gesture_owner: Option<GestureOwner>Which button owns the device’s single gesture role, once the user has
chosen explicitly. Absent means “infer” (the thumb pad owns gestures if
present) — see Config::gesture_owner. Listed first so it serializes
as a scalar ahead of the bindings sub-table.
identity: Option<DeviceIdentity>Last-known identity (name / kind / capabilities), captured while the
device was online. Lets the UI render this device — with the right
config panels — on a cold start before any probe, or while it sleeps.
None for configs written before this field existed or by hand.
bindings: BTreeMap<ButtonId, Binding>Every rebindable button’s binding: a single Action, or — for the
gesture button (and, later, any raw-XY-capable button) — a
Binding::Gesture per-direction map.
per_app_bindings: BTreeMap<String, BTreeMap<ButtonId, Action>>Per-application binding overlays (P1.4). Keyed by bundle identifier
(e.g. "com.microsoft.VSCode" on macOS). When the foreground app’s
id matches a key here, those bindings take precedence; anything not
listed falls through to bindings. Deliberately Action-valued (not
Binding): a per-app override replaces the whole button with one
action, never a per-direction gesture overlay.
dpi_presets: Vec<u32>Ordered list of DPI presets cycled through by
Action::CycleDpiPresets and indexed by
Action::SetDpiPreset. Empty means “no presets configured” —
the cycle action becomes a no-op until the user adds at least one.
dpi: Option<u32>The sensor DPI the user committed for this device. Persisted because
the value lives in device RAM and resets on a power cycle (#189); the
agent re-applies it when the device reconnects. None until the user
first changes DPI.
lighting: Option<Lighting>Per-device RGB lighting (static color + brightness + on/off). None
until the user changes it, so it stays out of config.toml otherwise.
smartshift: Option<SmartShift>Per-device SmartShift wheel configuration, re-applied on reconnect for
the same reason as Self::dpi. None until the user changes it.
invert_scroll: boolInvert this device’s scroll-wheel direction relative to the OS setting
(issue #126): on, a wheel tick scrolls the opposite way, so a user who
keeps macOS “natural scrolling” for the trackpad can have a traditional
“reverse” wheel on the mouse. Vertical only; the agent applies it in the
OS hook and leaves continuous trackpad scrolling untouched. false
(default) is the native direction, and is omitted from config.toml.
Trait Implementations§
Source§impl Clone for DeviceConfig
impl Clone for DeviceConfig
Source§fn clone(&self) -> DeviceConfig
fn clone(&self) -> DeviceConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more