Kwybars
Development

Internals

Crate layout, config parsing modules, and packaging notes.

Workspace Layout

CrateResponsibility
crates/commonShared config model and spectrum frame types
crates/daemonAudio-activity daemon and overlay process lifecycle
crates/engineVisualizer frame source contracts and runtime backend
crates/overlayGTK4 and layer-shell overlay UI and renderer
crates/controlkwybarsctl CLI commands and diagnostics

Common Config Modules

FilePurpose
crates/common/src/config/model.rsConfig enums, structs, defaults, and error types
crates/common/src/config/parse.rsFile loading and config parsing helpers
crates/common/src/config/tests.rsParser and default regression tests
crates/common/src/config/mod.rsStable public exports

Overlay Rendering Modules

FilePurpose
crates/overlay/src/ui/draw/linear.rsLine, frame, and mirror placement helpers
crates/overlay/src/ui/draw/wave.rsWave geometry and curve paths
crates/overlay/src/ui/draw/centered.rsRadial and polygon geometry
crates/overlay/src/ui/draw/particles.rsParticle and floating-particle placement
crates/overlay/src/ui/draw/path.rsCairo path builders
crates/overlay/src/ui/draw/tests.rsDraw regression tests

Runtime Behavior Notes

  • overlay and daemon both debounce config reloads
  • visual-only changes do not restart the audio probe unnecessarily
  • daemon-launched overlays subscribe to the daemon frame socket, avoiding duplicate Cava or PipeWire helper processes in the normal workflow
  • monitor selection changes rebuild the window set
  • theme file changes are hot reloaded
  • invalid config reloads leave the current runtime config active

If [daemon].overlay_command or overlay_args changes during a hot switch, the daemon restarts the overlay so the new command takes effect immediately.

Packaging Notes

  • AUR VCS packaging lives under aur/kwybars-git
  • binary packaging lives under aur/kwybars-bin
  • example config should install to /usr/share/doc/kwybars/examples/config.toml
  • built-in themes should install to /usr/share/kwybars/themes
  • the user unit should install to /usr/lib/systemd/user/kwybars-daemon.service

kwybars-bin uses the GitHub release tarball named kwybars-version-x86_64-linux.tar.gz.

On this page