# Maintainer: Ryan Hughes # T3 Code built from the environment-theme branch of ryanrhughes/t3code, until # upstream ships it: the desktop follows the machine's published themes # (Omarchy retints it live) and `t3 theme set` works. Packaging matches # t3code-bin exactly, so this installs in its place and the AppImage is # unpacked the same way. # # Shipping a new artifact, every time: # 1. The t3code worktree needs a repo-root .env carrying the public T3 # Connect config (relay URL, Clerk publishable key, CLI OAuth client id) # or Connect ships broken -- the 0.0.35-2 mistake. The values are public # and recoverable from the published npm `t3` package if lost. # 2. Build: `pnpm dist:desktop:linux` with --build-version . # 3. Tag the built commit v-omarchy., create a GitHub release on # the fork with the AppImage as its asset. # 4. Update _patchtag and sha256sums_x86_64 here, and bump pkgrel (or, on a # rebase to a new upstream release, bump pkgver and reset pkgrel) -- the # version change is what makes the build server rebuild at all; a new # release asset with an untouched PKGBUILD is invisible to it. pkgname=t3code-patched-bin pkgver=0.0.35 pkgrel=5 pkgdesc="Open-source control plane for coding agents, with Omarchy environment-theme patches" arch=('x86_64') url="https://t3.codes" license=('MIT') 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=${pkgver}") conflicts=('t3code' 't3code-bin') options=('!debug' '!strip') _patchtag="v${pkgver}-omarchy.5" _appimage="T3-Code-${pkgver}-x86_64.AppImage" source=('t3code-launcher.sh' 't3-launcher.sh' 'LICENSE') source_x86_64=("${_appimage}::https://github.com/ryanrhughes/t3code/releases/download/${_patchtag}/${_appimage}") noextract=("${_appimage}") sha256sums=('cb905ff341372ef2ef6e402cf485959f8bd1df8f0efebee4cda1afdd5e6abc0a' 'c5b3f2a9f0b14b12cfd973b79319f0f018b7ae49a1d43d8ca346100c3f7de28f' '935d8f2af0c703f9c39517ee57cc4930b19d02d533be930b63f0e82f93614b43') sha256sums_x86_64=('6f58306d54525ca695c7b902aac610d111f85a1f3ba8a9bf04e6e1950337b1f6') prepare() { chmod +x "${srcdir}/${_appimage}" rm -rf "${srcdir}/squashfs-root" "${srcdir}/${_appimage}" --appimage-extract >/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. 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|appindicator\.so\.1|gconf-2\.so\.4|indicator\.so\.7|notify\.so\.4)$' || 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.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. # The name drops the "(Alpha)" upstream's electron-builder still appends; the # app itself now calls that string legacy and keeps its data under t3code. sed -e 's|^Exec=.*|Exec=t3code %U|' -e 's|^Name=.*|Name=T3 Code|' \ -e '/^X-AppImage-Version=/d' t3code.desktop \ > "${srcdir}/t3code.desktop.arch" install -Dm644 "${srcdir}/t3code.desktop.arch" \ "${pkgdir}/usr/share/applications/t3code.desktop" rm -rf AppRun .DirIcon usr t3code.desktop t3code.png install -d "${pkgdir}/usr/lib/t3code" cp -a . "${pkgdir}/usr/lib/t3code/" chmod -R a+rX "${pkgdir}/usr/lib/t3code" # 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/chrome-sandbox" install -Dm755 "${srcdir}/t3code-launcher.sh" "${pkgdir}/usr/bin/t3code" # 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" install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" }