pub struct AppSettings {Show 19 fields
pub launch_at_login: bool,
pub check_for_updates: bool,
pub auto_install_updates: bool,
pub update_prompt_seen: bool,
pub show_in_menu_bar: bool,
pub capture_mouse_events: bool,
pub smooth_scroll: bool,
pub vertical_scroll_sensitivity: VerticalScrollSensitivity,
pub app_icon: AppIcon,
pub auto_download_assets: bool,
pub asset_source: AssetSourcePreference,
pub language: Option<String>,
pub thumbwheel_sensitivity: ThumbwheelSensitivity,
pub appearance: Appearance,
pub ui_scale: UiScale,
pub device_view_mode: DeviceViewMode,
pub theme_light: Option<String>,
pub theme_dark: Option<String>,
pub ui_radius: Option<u8>,
}Expand description
App-wide preferences not tied to any particular device.
All fields are #[serde(default)] so adding a new one is backward
compatible — old config files just keep the default for the new field.
Fields§
§launch_at_login: boolStart the background agent at login. On by default: the agent is
what keeps remaps working, so a fresh install that silently died on
reboot would be broken-by-default. On macOS this is a sunk switch:
the SMAppService login item stays registered either way (visible and
revocable under System Settings › Login Items — that consent surface
is what makes the default defensible), and the agent itself reads this
value when launchd starts it — off, and with no client connecting, it
idles out instead of arming. On Linux/Windows the agent reconciles its
autostart unit / Run-key with it. A config written before the flip
keeps the value it saved.
check_for_updates: boolOpt-in update check (P2.8). Off by default to honour the
README’s “no telemetry, no auto-update poller” promise. When true,
the app makes exactly one HEAD /repos/AprilNEA/OpenLogi/releases/ latest request per launch and logs whether a newer version is
available — no automatic download.
auto_install_updates: boolOpt-in automatic install. When true and Self::check_for_updates
surfaces a newer version, the GUI downloads and stages it in the
background; the update is applied on the next restart (never mid-session,
and never auto-relaunched). Off by default — it only acts after a
check the user already opted into, and stays inert in unsigned dev builds
where verification fails closed.
update_prompt_seen: boolTrue once the first-run “check for updates?” prompt has been answered
(either way), so it is never shown again. The prompt is how a
privacy-conscious default of check_for_updates = false still lets a
user opt in on first launch.
Whether OpenLogi shows a macOS menu-bar (status item) icon — and, on
Windows, the notification-area (tray) icon. true (default) → the
agent is visible in the menu bar / tray; false → it runs with no
visible presence (macOS additionally keeps the ordinary Dock icon
while a window is open). Ignored on Linux.
capture_mouse_events: boolWhether the agent installs the OS-level mouse hook (CGEventTap /
exclusive evdev grab / WH_MOUSE_LL) that intercepts mouse events
for button remapping. true (default) keeps remapping active;
false is an escape hatch that leaves every input device untouched
(on Linux: no exclusive grabs at all; on macOS the agent also skips
the startup Accessibility prompt). HID++-side features — DPI,
SmartShift, the gesture button, the thumb wheel — are unaffected.
Takes effect on agent restart.
smooth_scroll: boolWhether ordinary mouse-wheel input is replaced with a finite smooth scroll animation. Off by default: while enabled the OS hook suppresses eligible physical wheel events only after its non-blocking scroll worker accepts them. Trackpad and other continuous pixel input remains native. Windows’ low-level hook cannot attribute wheel messages to a device, so the preference applies to every traditional mouse-wheel message there.
vertical_scroll_sensitivity: VerticalScrollSensitivityDistance multiplier for traditional vertical mouse-wheel input.
VerticalScrollSensitivity::DEFAULT means 1×; trackpad and other
continuous pixel input is never scaled.
app_icon: AppIconWhich app icon the user picked. Applied at launch, and whenever it changes, by whichever process owns a surface showing one — on macOS the GUI hands the choice to the Dock and writes it onto the bundle (so the icon survives a quit), and the agent restyles the menu-bar item, which is its own glyph and no one else’s to set. Elsewhere it is inert. Defaults to the icon the app is signed with.
auto_download_assets: boolWhether the GUI automatically downloads device images from
assets.openlogi.org when a device appears. true (default) keeps
the current behavior; false makes no asset network requests at all
(the app falls back to bundled art and the synthetic silhouette). A
manual “Refresh assets” in Settings still fetches on demand regardless.
Whether the GUI automatically downloads device images from the selected
source when a device appears. true (default) keeps the current behavior;
false makes no asset network requests at all (the app falls back to
bundled art and the synthetic silhouette). A manual “Refresh assets” in
Settings still fetches on demand regardless.
asset_source: AssetSourcePreferencePreferred mirror for automatic and manual device-asset downloads.
Defaults to racing all built-in mirrors; OPENLOGI_ASSETS remains a
process-level override for development and diagnostics.
language: Option<String>UI language as a BCP-47-ish locale code matching the GUI’s bundled
locales (e.g. "en", "de", "pt-BR", "zh-CN", "zh-TW"; see the
GUI’s i18n::SUPPORTED). None means “follow the system locale”, which
the GUI resolves at startup. Stored here so a user’s explicit choice
survives restarts regardless of the OS setting.
thumbwheel_sensitivity: ThumbwheelSensitivityThumb-wheel responsiveness. It scales both the speed of the wheel’s
continuous horizontal or remapped vertical scroll and how few rotation
increments a custom wheel action needs to fire.
ThumbwheelSensitivity::DEFAULT means 1× scroll speed; the wheel is
only diverted from native scrolling once this leaves the default.
appearance: AppearanceLight/dark appearance preference. Defaults to following the OS.
ui_scale: UiScaleText and rem-based interface scale. Defaults to 100%.
device_view_mode: DeviceViewModeLayout used for the Home device gallery. Defaults to the responsive grid.
theme_light: Option<String>Name of the theme used in light mode (a crate-agnostic string
matching a gpui-component theme, e.g. "OpenLogi Light"). None uses
the OpenLogi brand light theme.
theme_dark: Option<String>Name of the theme used in dark mode. None uses the OpenLogi brand dark
theme.
ui_radius: Option<u8>Corner-radius override for the UI, in pixels (the Appearance page offers
0 / 6 / 12). None keeps each theme’s own radius.
Implementations§
Source§impl AppSettings
impl AppSettings
Sourcepub fn is_default(&self) -> bool
pub fn is_default(&self) -> bool
skip_serializing_if helper: true when nothing diverges from the
default, so empty settings don’t clutter config.toml.
Trait Implementations§
Source§impl Clone for AppSettings
impl Clone for AppSettings
Source§fn clone(&self) -> AppSettings
fn clone(&self) -> AppSettings
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AppSettings
impl Debug for AppSettings
Source§impl Default for AppSettings
impl Default for AppSettings
Source§impl<'de> Deserialize<'de> for AppSettings
impl<'de> Deserialize<'de> for AppSettings
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for AppSettings
Source§impl PartialEq for AppSettings
impl PartialEq for AppSettings
Source§impl Serialize for AppSettings
impl Serialize for AppSettings
impl StructuralPartialEq for AppSettings
Auto Trait Implementations§
impl Freeze for AppSettings
impl RefUnwindSafe for AppSettings
impl Send for AppSettings
impl Sync for AppSettings
impl Unpin for AppSettings
impl UnsafeUnpin for AppSettings
impl UnwindSafe for AppSettings
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.