otter-desktop supplies desktop integration through leaf modules grouped under otter_desktop.dbus, .apps, .sys, and .pam.
Services own their handles and receive environment/I/O explicitly when needed. Callers process readiness and observe state rather than storing callback/userdata pointers into movable application structs.
Package boundaries
otter_desktop: D-Bus, XDG applications/icons, system state, optional PAM.otter_desktop_pipewire(otr/pipewire/): audio client, playback, capture, video sources.otter_desktop_lua(otr/lua/): host-registered Lua desktop modules.
pipewire=system. Applications not using audio avoid that dependency. D-Bus uses vendored basu; PAM remains option-gated.
Lua modules expose specific reads and capability-gated actions. A plugin cannot infer permission to launch, change audio, or power off from permission to inspect public state.
Reference pages
Source reference
otr/otr.toml, otr/ in the component repository.
