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:
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"source": "local"
|
||||||
|
}
|
||||||
@@ -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.
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
Executable
+10
@@ -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[@]}" "$@"
|
||||||
Reference in New Issue
Block a user