Problem
The Linux Tauri artifacts (deb/rpm/AppImage, built via cargo tauri bundle in the activitywatch bundle repo) contain only the aw-tauri binary. tauri.conf.json configures no bundle.resources or externalBin, so unlike the other platforms, a fresh Linux install launches the tray + embedded aw-server + web UI but records nothing — there are no watchers and no aw-sync inside.
Platform comparison (from the v0.14.0b2 draft-release audit):
| Platform |
Tauri artifact |
Self-contained? |
| macOS |
DMG via build_app_tauri.sh |
✅ modules copied into Contents/Resources/ |
| Windows |
setup.exe via aw-tauri.iss |
✅ dist/activitywatch/* packed alongside aw-tauri.exe |
| Linux |
deb/rpm/AppImage via cargo tauri bundle |
❌ binary only (13–14MB deb vs 128MB Qt deb) |
The current workaround is the separate ~170MB activitywatch-tauri-vX-linux-<arch>.zip module pack + move-to-aw-modules.sh, which copies watchers into ~/aw-modules/ for discovery. That's an extra manual step most users won't know about, and the zip is easily mistaken for an alternative app bundle.
Proposal: all-Rust self-contained Linux bundles
Bundle awatcher + aw-sync (both Rust, a few MB each) into the Linux artifacts rather than the PyInstaller module trees:
- awatcher covers window+afk watching on both Wayland and X11, so it replaces both Python watchers;
move-to-aw-modules.sh already treats it as the watcher of choice on Wayland
- keeps bundles small (~20–30MB instead of ~200MB with PyInstaller trees)
- no Python runtime inside the deb/rpm/AppImage at all
Implementation sketch:
- Add awatcher + aw-sync via
bundle.resources (or externalBin sidecars) in tauri.conf.json — the bundle repo already builds both on Linux before cargo tauri bundle runs
- Extend
dirs.rs::get_discovery_paths() with the installed-resource locations on Linux (deb/rpm install path under /usr/lib/, and $APPDIR for AppImage) — mirroring the existing macOS Resources/modules branch
- Keep
~/aw-modules/ discovery as-is so power users can still add/override modules (incl. the Python watchers from the zip, which remains available)
Alternative considered: bundling the full PyInstaller trees via bundle.resources (matches macOS/Windows content exactly) — works but inflates every Linux artifact by ~170MB and drags a Python runtime into otherwise-pure-Rust bundles.
Context: found while auditing the v0.14.0b2 draft release assets in the bundle repo (all four macOS DMGs + Windows setup are self-contained; Linux is the odd one out).
Problem
The Linux Tauri artifacts (deb/rpm/AppImage, built via
cargo tauri bundlein the activitywatch bundle repo) contain only the aw-tauri binary.tauri.conf.jsonconfigures nobundle.resourcesorexternalBin, so unlike the other platforms, a fresh Linux install launches the tray + embedded aw-server + web UI but records nothing — there are no watchers and no aw-sync inside.Platform comparison (from the v0.14.0b2 draft-release audit):
build_app_tauri.shContents/Resources/aw-tauri.issdist/activitywatch/*packed alongsideaw-tauri.execargo tauri bundleThe current workaround is the separate ~170MB
activitywatch-tauri-vX-linux-<arch>.zipmodule pack +move-to-aw-modules.sh, which copies watchers into~/aw-modules/for discovery. That's an extra manual step most users won't know about, and the zip is easily mistaken for an alternative app bundle.Proposal: all-Rust self-contained Linux bundles
Bundle awatcher + aw-sync (both Rust, a few MB each) into the Linux artifacts rather than the PyInstaller module trees:
move-to-aw-modules.shalready treats it as the watcher of choice on WaylandImplementation sketch:
bundle.resources(orexternalBinsidecars) intauri.conf.json— the bundle repo already builds both on Linux beforecargo tauri bundlerunsdirs.rs::get_discovery_paths()with the installed-resource locations on Linux (deb/rpm install path under/usr/lib/, and$APPDIRfor AppImage) — mirroring the existing macOSResources/modulesbranch~/aw-modules/discovery as-is so power users can still add/override modules (incl. the Python watchers from the zip, which remains available)Alternative considered: bundling the full PyInstaller trees via
bundle.resources(matches macOS/Windows content exactly) — works but inflates every Linux artifact by ~170MB and drags a Python runtime into otherwise-pure-Rust bundles.Context: found while auditing the v0.14.0b2 draft release assets in the bundle repo (all four macOS DMGs + Windows setup are self-contained; Linux is the odd one out).