ActivityWatch / ActivityWatch/aw-tauri
Linux bundles are not self-contained — bundle awatcher + aw-sync so deb/rpm/AppImage work out of the box
- Dominant language
- Rust
- Stars
- 67
- Forks
- 25
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 13
Description
## 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-.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:
1. 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
2. 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
3. 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).
Contributor guide
Assessment
This issue has not been assessed yet.