feat(t3code-bin): add T3 Code desktop from the AUR

T3 Code is an open-source control plane for coding agents — Claude Code, Codex, OpenCode, Cursor and Grok driven from one desktop app, on the user's own subscriptions. Upstream ships a Linux x86_64 AppImage only, and the AUR's t3code-bin already tracks it, so this syncs from there in the fast ring.

One Omarchy patch: the AUR launcher runs Electron with --no-sandbox. Chromium falls back to a user-namespace sandbox when it finds no setuid helper, which is what happens on Arch, so the flag only turns the sandbox off. Verified both ways against the built package — sandboxed it reaches display setup, and only with namespaces restricted does it abort on the setuid helper.

🤖 Generated by Opus 5 in Claude Code.
This commit is contained in:
Omabot
2026-08-19 02:28:30 -07:00
parent c2b3796ad9
commit ab154a00dd
6 changed files with 167 additions and 0 deletions
@@ -0,0 +1,5 @@
{
"source": "aur",
"release_ring": "fast",
"upstream_commit": "4f0b415dccf7e3b0b85e2289e8c3a7c8603e9fb4"
}
@@ -0,0 +1,13 @@
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -96,7 +96,9 @@
extra_flags+=(--ozone-platform-hint=auto)
fi
-exec "$appdir/t3code" --no-sandbox "${extra_flags[@]}" "$@"
+# Omarchy: Chromium sandboxes itself with a user namespace when it cannot find a
+# setuid helper, which is the case on Arch, so --no-sandbox buys nothing here.
+exec "$appdir/t3code" "${extra_flags[@]}" "$@"
EOF
ln -s t3code "$pkgdir/usr/bin/t3-code-desktop"
+1
View File
@@ -0,0 +1 @@
9942a9412013f0429f551a1b3f6a2700fac6ed58
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 T3 Tools Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+127
View File
@@ -0,0 +1,127 @@
# Maintainer: anon
pkgname=t3code-bin
pkgver=0.0.33
pkgrel=1.1
pkgdesc='T3 Code desktop app packaged from the upstream AppImage'
arch=('x86_64')
_upstream_tag='v0.0.33'
_upstream_version='0.0.33'
_appimage_name="T3-Code-${_upstream_version}-x86_64.AppImage"
url='https://t3.codes'
license=('MIT')
depends=(
'alsa-lib'
'at-spi2-core'
'cairo'
'dbus'
'expat'
'gcc-libs'
'gdk-pixbuf2'
'glib2'
'gtk3'
'hicolor-icon-theme'
'libcups'
'libdrm'
'libx11'
'libxcb'
'libxcomposite'
'libxdamage'
'libxext'
'libxfixes'
'libxkbcommon'
'libxrandr'
'mesa'
'nspr'
'nss'
'pango'
'systemd-libs'
'xdg-utils'
'zlib'
)
optdepends=(
'openai-codex: use the system-installed Codex CLI'
)
provides=("t3code=${pkgver}")
conflicts=('t3code')
options=('!debug' '!emptydirs' '!strip')
source=(
"${_appimage_name}::https://github.com/pingdotgg/t3code/releases/download/${_upstream_tag}/${_appimage_name}"
't3code-icon.png'
'LICENSE'
)
sha256sums=(
'415c8648f43c3d22d572f27f2c50fdc8c310ea7fcde9537b903e1e2f1c8775a1'
'52c86008b11f90f36b8a8f4cc43b1352d5fda9084c6e5691b806f5bca1a968b6'
'935d8f2af0c703f9c39517ee57cc4930b19d02d533be930b63f0e82f93614b43'
)
prepare() {
chmod +x "$srcdir/$_appimage_name"
rm -rf "$srcdir/squashfs-root"
"$srcdir/$_appimage_name" --appimage-extract >/dev/null
if [[ ! -d "$srcdir/squashfs-root" ]]; then
echo "Failed to extract AppImage payload." >&2
return 1
fi
}
package() {
install -d "$pkgdir/opt/$pkgname"
cp -a "$srcdir/squashfs-root/." "$pkgdir/opt/$pkgname/"
# Preserve upstream execute bits while ensuring the payload stays readable.
chmod -R a+rX "$pkgdir/opt/$pkgname"
install -Dm755 /dev/stdin "$pkgdir/usr/bin/t3code" << 'EOF'
#!/usr/bin/env bash
set -euo pipefail
appdir='/opt/t3code-bin'
export APPDIR="$appdir"
if [[ -z "${CODEX_CLI_PATH-}" ]] && command -v codex >/dev/null 2>&1; then
export CODEX_CLI_PATH="$(command -v codex)"
fi
export PATH="$appdir:$appdir/usr/bin:$appdir/usr/sbin:$PATH"
export XDG_DATA_DIRS="$appdir/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}"
export GSETTINGS_SCHEMA_DIR="$appdir/usr/share/glib-2.0/schemas${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}"
extra_flags=()
if [[ -n "${WAYLAND_DISPLAY-}" || "${XDG_SESSION_TYPE-}" == "wayland" ]]; then
extra_flags+=(--enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=wayland)
else
extra_flags+=(--ozone-platform-hint=auto)
fi
# Omarchy: Chromium sandboxes itself with a user namespace when it cannot find a
# setuid helper, which is the case on Arch, so --no-sandbox buys nothing here.
exec "$appdir/t3code" "${extra_flags[@]}" "$@"
EOF
ln -s t3code "$pkgdir/usr/bin/t3-code-desktop"
install -Dm644 "$srcdir/t3code-icon.png" \
"$pkgdir/usr/share/icons/hicolor/1024x1024/apps/t3code.png"
ln -s t3code.png \
"$pkgdir/usr/share/icons/hicolor/1024x1024/apps/t3-code-desktop.png"
install -Dm644 "$srcdir/t3code-icon.png" \
"$pkgdir/usr/share/pixmaps/t3code.png"
ln -s t3code.png "$pkgdir/usr/share/pixmaps/t3-code-desktop.png"
install -Dm644 /dev/stdin "$pkgdir/usr/share/applications/t3code.desktop" << 'EOF'
[Desktop Entry]
Name=T3 Code
Comment=T3 Code desktop build
Exec=t3code %U
Terminal=false
Type=Application
Icon=t3code
StartupWMClass=t3code
Categories=Development;
EOF
install -Dm644 "$srcdir/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB