Files
thoughtsync/desktop/packaging/arch
bvandeusenandClaude Opus 5 0a7480cf9b
Desktop (Tauri) / Tauri desktop (Linux) (push) Failing after 48s
Desktop (Tauri) / Windows installer (cross-compiled) (push) Successful in 1m50s
Desktop (Tauri) / Update manifest (push) Skipped
core: extract the store and sync engine into a shared crate (M12 step 1)
Android becomes a native Kotlin client over this same code (Scribe note 2730), so
the local store and sync engine stop being modules of the desktop app and become
`thoughtsync-core`, a crate with no UI framework in it at all.

This is a move, not a rewrite, and the measurement is why: every file in local/
and sync/ already carried ZERO Tauri references — 4,980 of 6,372 lines. The
coupling was 473 lines of command shim, which stays behind in the desktop crate
as src/commands/. Kept as git renames so history follows the files.

The desktop imports them under their old names (`use thoughtsync_core::{local,
sync}`) so every call site reads exactly as before. What moved is where they
live, not what they are.

Two things a workspace changes that are easy to miss, both caught before pushing:

[profile.release] now lives at the workspace ROOT. Cargo silently ignores
profiles declared by a non-root member — leaving it in the desktop crate would
have dropped lto/strip/opt-level from every release build with only a warning.

And a workspace shares ONE target dir, so the bundles moved from
desktop/src-tauri/target to target/. Thirteen references across publish-release,
debundle-graphics, verify.sh, package-prebuilt and the workflow now point there.
Pinning target-dir back would have been the smaller diff, but the Android lane
also produces Rust artifacts and they do not belong under desktop/.

Also retires the Tauri Android lane in the same push rather than leaving a path
that is being replaced: gen/android, android.yml and docs/android-dev.md are
gone, the mobile_entry_point attribute with them, and the lib drops to rlib —
staticlib/cdylib existed for Tauri mobile, and the .so Android loads will be
built from the core crate instead. Rule 22, no parallel path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 23:12:26 -04:00
..

ThoughtSync desktop — Arch package

A prebuilt native pacman package, published as an asset on every ThoughtSync release. Nothing to compile, no toolchain to install.

Installing natively on Arch matters for more than tidiness: pacman pulls webkit2gtk-4.1 itself and the app runs against your system's graphics stack, which is what keeps the bundled-library EGL_BAD_PARAMETER black window (issue 2021) from coming back. It also means the app is package-manager tracked and uninstalls cleanly.

Install

Easiest — the one-command installer picks this package automatically on any pacman system:

curl -fsSL https://git.fabledsword.com/bvandeusen/thoughtsync/raw/branch/dev/desktop/packaging/install.sh | sh

That installs the newest tagged release. To follow the rolling development channel instead, pass the flag through the pipe:

curl -fsSL https://git.fabledsword.com/bvandeusen/thoughtsync/raw/branch/dev/desktop/packaging/install.sh | sh -s -- --channel dev

Or grab the .pkg.tar.* from the releases page and install it directly:

sudo pacman -U thoughtsync-*-x86_64.pkg.tar.*

The compression suffix depends on what the build image provides — .zst when zstd is installed, otherwise .xz (today's builds are .xz). pacman reads all of them; only the filename differs.

Either way you get:

  • /usr/bin/thoughtsync — the app
  • /usr/share/applications/thoughtsync.desktop — the menu entry
  • /usr/share/icons/hicolor/*/apps/thoughtsync.png — themed icons

Launch ThoughtSync from your app menu, or run thoughtsync.

Uninstall: sudo pacman -R thoughtsync.

The package was called thoughtsync-desktop before; it declares replaces/ conflicts on that name, so an upgrade from it is a normal pacman -U and leaves nothing behind.

How the package is built

package-prebuilt.sh runs in CI (.forgejo/workflows/desktop.yml) and wraps the binary the Linux build already produced into a pacman package — it does not compile anything a second time.

Packaging a Debian-compiled binary for Arch is safe here because the binary bundles nothing: it resolves libwebkit2gtk-4.1.so.0, libgtk-3.so.0 and libsoup-3.0.so.0 by SONAME at runtime and those are identical on both distros, SQLite is compiled in (rusqlite "bundled"), and glibc's forward compatibility means building on Debian's older glibc and running on Arch's newer one is the safe direction.

CI is Debian and has no pacman, so it cannot install-test the result. The build step instead logs the package's .PKGINFO and complete file listing, so the package is auditable from the run log; a real pacman -U is the final proof.

Previously

This directory used to hold a source-build PKGBUILD requiring makepkg -si with rust + nodejs + npm installed. It was removed once prebuilt packages shipped — asking every user to install a compiler toolchain isn't distribution.