# Maintainer: David Heinemeier Hansson # T3 Code ships its Linux desktop as an AppImage, so Omarchy unpacks it and # keeps only the Electron tree. AppRun, the compatibility libraries bundled for # distributions that do not ship their own, and the AppImage's icon shims are all # dead weight here. The upstream watch tracks only nightly release tags and # updates the version and architecture-specific checksums together. pkgname=t3code-nightly-bin pkgver=0.0.46_nightly.20261010.2908 _upstream_version=${pkgver/_/-} pkgrel=1 pkgdesc="Open-source control plane for coding agents (nightly)" arch=('x86_64' 'aarch64') url="https://t3.codes" license=('MIT') makedepends=('7zip') depends=( 'alsa-lib' 'at-spi2-core' 'cairo' 'dbus' 'expat' 'gcc-libs' 'glib2' 'glibc' 'gtk3' 'hicolor-icon-theme' 'libcups' 'libnotify' 'libx11' 'libxcb' 'libxcomposite' 'libxdamage' 'libxext' 'libxfixes' 'libxkbcommon' 'libxrandr' 'mesa' 'nspr' 'nss' 'pango' 'systemd-libs' 'xdg-utils' ) optdepends=( 'claude-code: drive Claude Code from the app' 'cursor-cli: drive Cursor from the app' 'github-copilot-cli: drive Copilot from the app' 'openai-codex: drive Codex from the app' ) provides=("t3code-nightly=${pkgver}") conflicts=('t3code-nightly') options=('!debug' '!strip') _appimage_x86_64="T3-Code-${_upstream_version}-x86_64.AppImage" _appimage_aarch64="T3-Code-${_upstream_version}-arm64.AppImage" source=('t3code-launcher.sh' 't3-launcher.sh' 'LICENSE') source_x86_64=("https://github.com/pingdotgg/t3code/releases/download/v${_upstream_version}/${_appimage_x86_64}") source_aarch64=("https://github.com/pingdotgg/t3code/releases/download/v${_upstream_version}/${_appimage_aarch64}") noextract=("${_appimage_x86_64}" "${_appimage_aarch64}") sha256sums=('55e9aca82941ba21daff12e67f5b6c8a2ecbd30eb0ff9fc6c6a625dfc5aacd51' '85572a955d917fc92da30f6d0ea515370c97950aefc8e12eb25c3673aa4cca6e' '935d8f2af0c703f9c39517ee57cc4930b19d02d533be930b63f0e82f93614b43') sha256sums_x86_64=('37da600d750bb704e52d5a7449a925e1f8ca0ef925560a6cda1d126b63e7d90d') sha256sums_aarch64=('7ca1dad19e4170e944ea9e1490d20e807bba6361c98dd42e61c7c1cd7473d857') prepare() { local _appimage case "$CARCH" in x86_64) _appimage="${_appimage_x86_64}" ;; aarch64) _appimage="${_appimage_aarch64}" ;; esac rm -rf "${srcdir}/squashfs-root" # Extract without executing the runtime: AppImage's ELF magic does not match # QEMU's binfmt registration when building ARM packages on an x86_64 host. 7z x "${srcdir}/${_appimage}" -o"${srcdir}/squashfs-root" >/dev/null } package() { cd "${srcdir}/squashfs-root" # The AppImage's usr/ tree is compatibility libraries for distributions that # lack them, and Arch is not one; its icons are the only part worth keeping. # A release that starts shipping something else there stops the build rather # than having it deleted quietly on the way past. The same six libraries # under their full versioned names (libXss.so.1.0.0) or their GTK 3 names # (libappindicator3, libindicator3) are not something else. local unexpected unexpected=$(find usr \( -type f -o -type l \) | grep -vE \ '^usr/share/icons/hicolor/[0-9]+x[0-9]+/apps/t3code\.png$|^usr/lib/lib(Xss\.so\.1|Xtst\.so\.6|appindicator3?\.so\.1|gconf-2\.so\.4|indicator3?\.so\.7|notify\.so\.4)(\.[0-9]+)*$' || true) if [[ -n "${unexpected}" ]]; then echo "Unexpected files in the AppImage's usr/ tree:" >&2 echo "${unexpected}" >&2 return 1 fi local icon size for icon in usr/share/icons/hicolor/*/apps/t3code.png; do size="${icon#usr/share/icons/hicolor/}" install -Dm644 "${icon}" "${pkgdir}/usr/share/icons/hicolor/${size%%/*}/apps/t3code-nightly.png" done # Upstream's own entry rather than a hand-written one: it carries the # t3code:// scheme handlers that make the app's deep links resolve. # Separate desktop and icon names allow installation alongside stable. # Application state and URL schemes retain upstream's shared-channel behavior. sed -e 's|^Exec=.*|Exec=t3code-nightly %U|' -e 's|^Name=.*|Name=T3 Code (Nightly)|' \ -e 's|^Icon=.*|Icon=t3code-nightly|' -e '/^X-AppImage-Version=/d' t3code.desktop \ > "${srcdir}/t3code.desktop.arch" install -Dm644 "${srcdir}/t3code.desktop.arch" \ "${pkgdir}/usr/share/applications/t3code-nightly.desktop" rm -rf AppRun .DirIcon usr t3code.desktop t3code.png install -d "${pkgdir}/usr/lib/t3code-nightly" cp -a . "${pkgdir}/usr/lib/t3code-nightly/" chmod -R a+rX "${pkgdir}/usr/lib/t3code-nightly" # Arch ships Chromium's and Electron's own sandbox helper setuid, which is # what keeps the sandbox up on a kernel that denies unprivileged user # namespaces -- linux-hardened, mainly -- instead of aborting the app. chmod 4755 "${pkgdir}/usr/lib/t3code-nightly/chrome-sandbox" install -Dm755 "${srcdir}/t3code-launcher.sh" "${pkgdir}/usr/bin/t3code-nightly" # The server CLI, run through the bundled Electron as Node. Same entrypoint # npm's `t3` package runs, so `t3 serve`, `t3 pair`, and the rest work # without a separate install. install -Dm755 "${srcdir}/t3-launcher.sh" "${pkgdir}/usr/bin/t3-nightly" install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" }