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.
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 through
the device’s HID++ native wheel-inversion mode when supported. 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