# Maintainer: David Heinemeier Hansson <david@hey.com>

# 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.20261004.2644
_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=('7521793d4dc87f2b985f88b48b070bedf33a1f590cca34a96c9e7ca0b1fe298b')
sha256sums_aarch64=('784939b3fc0aec185df9148893c22b0ae10abb6e32d03905474c5a43ba511508')

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.
  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-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"
}
