blob: 12f591c7cf11f80e9219d2c084d2276ac2fca225 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# Maintainer: Yakov Till <yakov.till@gmail.com>
pkgname=opencode-desktop-bin
pkgver=1.18.10
pkgrel=1
pkgdesc="OpenCode desktop client"
arch=('x86_64' 'aarch64')
url="https://opencode.ai"
license=('MIT')
provides=('opencode-desktop')
conflicts=('opencode-desktop')
# Arch Linux ARM ships no electron package at all (which is also why official
# code is absent there), so only x86_64 can run on a system runtime.
_electron=electron42
depends=('ripgrep')
depends_x86_64=("${_electron}")
depends_aarch64=('gtk3' 'nss' 'libxss' 'libxtst' 'alsa-lib' 'libsecret' 'libnotify' 'xdg-utils')
optdepends=('libappindicator-gtk3: tray icon support')
options=('!debug')
latestver() {
gh api --paginate repos/anomalyco/opencode/releases --jq \
'.[] | select(.prerelease == false and .draft == false and any(.assets[]; .name == "opencode-desktop-linux-amd64.deb") and any(.assets[]; .name == "opencode-desktop-linux-arm64.deb")) | .tag_name' |
head -1 | sed -E 's/^v//'
}
source=("LICENSE::https://raw.githubusercontent.com/anomalyco/opencode/v${pkgver}/LICENSE")
source_x86_64=("opencode-desktop-${pkgver}-linux-amd64.deb::https://github.com/anomalyco/opencode/releases/download/v${pkgver}/opencode-desktop-linux-amd64.deb")
source_aarch64=("opencode-desktop-${pkgver}-linux-arm64.deb::https://github.com/anomalyco/opencode/releases/download/v${pkgver}/opencode-desktop-linux-arm64.deb")
sha256sums=('625f0f619133f89bbbb2abe37369613dfa1885eba1e50d02170deb62bb42cb6b')
sha256sums_x86_64=('ebc1f7650eb132ee8cb3cfc29bd2ae4d64d9d69ec85b799201602417c31e3f00')
sha256sums_aarch64=('d7ee7a8c28989c858e2beffcf32cedc12610500fbfb72aa419436e1682475ce1')
package() {
local _debarch=amd64
[[ "${CARCH}" == aarch64 ]] && _debarch=arm64
bsdtar -xf "${srcdir}/opencode-desktop-${pkgver}-linux-${_debarch}.deb" data.tar.xz
bsdtar -xf data.tar.xz -C "${pkgdir}"
local _appdir _exec
if [[ "${CARCH}" == x86_64 ]]; then
# The app only has to work on the Electron it was built against, so refuse
# to package a runtime pairing upstream never shipped.
local _bundled
_bundled=$(grep -aoP 'Electron/\K[0-9]+' "${pkgdir}/opt/OpenCode/ai.opencode.desktop" | head -1)
if [[ "electron${_bundled}" != "${_electron}" ]]; then
echo "Upstream now bundles Electron ${_bundled:-<undetected>}; set _electron=electron${_bundled}" >&2
exit 1
fi
# Keep the app payload only; the bundled Chromium/Node runtime is replaced
# by the system electron, which ships its own sandbox, codecs and ICU data.
_appdir="${pkgdir}/usr/lib/opencode-desktop"
install -d "${_appdir}"
mv "${pkgdir}/opt/OpenCode/resources/"* "${_appdir}/"
rm -rf "${pkgdir}/opt"
_exec="${_electron} /usr/lib/opencode-desktop/app.asar"
else
_appdir="${pkgdir}/opt/OpenCode/resources"
_exec="/opt/OpenCode/ai.opencode.desktop"
fi
# Prune Debian/Ubuntu-specific and dead files
rm -rf "${pkgdir}/usr/share/doc"
rm -f "${_appdir}/apparmor-profile"
rm -f "${_appdir}/app-update.yml"
# Prune musl native modules (useless on glibc Arch)
find "${_appdir}" -name '*.musl.node' -delete
find "${_appdir}" -depth -type d -name '*-musl' -exec rm -rf {} +
# Launcher script (supports user flags and Wayland)
install -Dm755 /dev/stdin "${pkgdir}/usr/bin/opencode-desktop" <<'EOF'
#!/bin/bash
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
if [[ -f "$XDG_CONFIG_HOME/opencode-desktop-flags.conf" ]]; then
OPENCODE_USER_FLAGS="$(grep -v '^#' "$XDG_CONFIG_HOME/opencode-desktop-flags.conf")"
fi
exec @EXEC@ $OPENCODE_USER_FLAGS "$@"
EOF
sed -i "s|@EXEC@|${_exec}|" "${pkgdir}/usr/bin/opencode-desktop"
# Point desktop files at the wrapper (icons/StartupWMClass already match upstream names)
sed -i 's|Exec=/opt/OpenCode/ai\.opencode\.desktop|Exec=opencode-desktop|' \
"${pkgdir}"/usr/share/applications/*.desktop
install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
|