t3code-patched-bin: T3 Code with the environment-theme patches

Built from the environment-theme branch of ryanrhughes/t3code (tag
v0.0.35-omarchy.1) until upstream ships it: the app follows themes the
machine publishes into its state directory -- Omarchy retints it live --
and t3 theme set works. Same packaging as t3code-bin, conflicts with it,
and the next upstream release supersedes it after a rebase.
This commit is contained in:
Ryan Hughes
2026-08-27 23:55:15 -04:00
parent 273dd810da
commit 0fb1c09041
5 changed files with 188 additions and 0 deletions
@@ -0,0 +1,3 @@
{
"source": "local"
}
+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.
+123
View File
@@ -0,0 +1,123 @@
# Maintainer: Ryan Hughes <ryan@heyoodle.com>
# 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. Rebase: rebase the branch on the upstream release,
# `pnpm dist:desktop:linux` with the release's version, retag, update pkgver,
# _patchtag, and checksums, and reset pkgrel.
pkgname=t3code-patched-bin
pkgver=0.0.35
pkgrel=1
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.1"
_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=('67d28ce705b9efe8ff496733a46fefc42d298505cb07c83b36890368625e182f')
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"
}
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
# The T3 Code server CLI (`t3`) ships inside the app bundle; upstream only
# distributes it separately through npm. The bundled Electron doubles as the
# Node runtime for it, so the desktop package can put the CLI on PATH without
# shipping a second runtime. Electron's fs layer reads app.asar transparently
# in this mode.
set -euo pipefail
export ELECTRON_RUN_AS_NODE=1
exec /usr/lib/t3code/t3code /usr/lib/t3code/resources/app.asar/apps/server/dist/bin.mjs "$@"
@@ -0,0 +1,31 @@
#!/bin/bash
set -euo pipefail
user_flags=()
config_home="${XDG_CONFIG_HOME:-}"
[[ -n "$config_home" || -z "${HOME:-}" ]] || config_home="$HOME/.config"
flags_file="${config_home:+$config_home/t3code-flags.conf}"
if [[ -n "$flags_file" && -f "$flags_file" && -r "$flags_file" ]]; then
while IFS= read -r line || [[ -n "$line" ]]; do
line="${line%%#*}"
[[ -n "${line//[[:space:]]/}" ]] || continue
read -r -a flags <<<"$line"
user_flags+=("${flags[@]}")
done <"$flags_file"
fi
# Chromium's own Ozone detection falls back to XWayland often enough to matter,
# and the result is a blurry window on every scaled display.
platform_flags=()
if [[ -n "${WAYLAND_DISPLAY:-}" || "${XDG_SESSION_TYPE:-}" == wayland ]]; then
platform_flags=(--ozone-platform=wayland)
for flag in "${user_flags[@]}" "$@"; do
case "$flag" in
--ozone-platform=* | --ozone-platform-hint=*) platform_flags=() ;;
esac
done
fi
exec /usr/lib/t3code/t3code "${platform_flags[@]}" "${user_flags[@]}" "$@"