ghastty-git
The package builds from a legitimate project source on GitHub and uses a pinned Zig toolchain from the official ziglang.org domain; the non-whitelisted host is for a build tool (Zig) that is checksum-verified, and the main payload is a local build of the project's own code, posing no remote code execution or supply-chain risk.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-07-25) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package builds from a legitimate project source on GitHub and uses a pinned Zig toolchain from the official ziglang.org domain; the non-whitelisted host is for a build tool (Zig) that is checksum-verified, and the main payload is a local build of the project's own code, posing no remote code execution or supply-chain risk.
1 higher static finding superseded - not the current verdict (shown for transparency)
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:44
"https://ziglang.org/download/${_zigver}/${_zig}.tar.xz"
PKGBUILD
1 offending line(s) highlighted# Maintainer: Nathan <nate0001@gmail.com>
pkgname=ghastty-git
pkgver=1.3.2.r16705.g33613783f
pkgrel=3
pkgdesc="A Qt6 frontend for Ghostty that embeds libghostty (Wayland-only)"
arch=('x86_64')
url="https://github.com/fuddlesworth/ghastty"
license=('MIT')
depends=(
'ghostty-terminfo' # xterm-ghostty terminfo (TERM=xterm-ghostty)
'ghostty-shell-integration' # /usr/share/ghostty/shell-integration scripts
# libghostty climbs /usr/bin/ghastty -> /usr/share
# to find them, exporting GHOSTTY_RESOURCES_DIR/
# TERMINFO to the shell (resourcesdir.zig/Exec.zig)
'qt6-base'
'qt6-multimedia'
'qt6-svg'
'qt6-wayland'
'layer-shell-qt'
'wayland'
'libxkbcommon'
'libglvnd' # libEGL / libGL (OpenGL render path)
'vulkan-icd-loader' # libvulkan (runtime renderer selection)
)
makedepends=(
'git'
'cmake'
'pkgconf'
'vulkan-headers'
)
provides=('ghastty')
conflicts=('ghastty')
# !lto: the C++ frontend links a Zig-built libghostty.so; skip LTO to
# avoid mixing makepkg's LTO flags across the two toolchains.
# !debug: the Zig artifact isn't part of cmake's debug-split, so no -debug
# package is produced.
options=('!lto' '!debug')
_zigver=0.15.2
_zig="zig-x86_64-linux-${_zigver}"
source=(
"$pkgname::git+https://github.com/fuddlesworth/ghastty.git#branch=main"
"https://ziglang.org/download/${_zigver}/${_zig}.tar.xz"
)
sha256sums=(
'SKIP'
'02aa270f183da276e5b5920b1dac44a63f1a49e55050ebde3aecc9eb82f93239'
)
pkgver() {
cd "$srcdir/$pkgname"
local _ver
_ver="$(sed -n 's/.*\.version = "\([^"-]*\).*/\1/p' build.zig.zon | head -1)"
printf '%s.r%s.g%s' "${_ver:-0}" \
"$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "$srcdir/$pkgname"
# Pinned toolchain: this tree requires Zig 0.15.2 (build.zig.zon
# minimum_zig_version), but Arch's `zig` tracks 0.16+, which does not
# compile it. Use the bundled 0.15.2 from the source array and keep
# Zig's package cache inside the build dir.
export PATH="$srcdir/$_zig:$PATH"
export ZIG_GLOBAL_CACHE_DIR="$srcdir/.zig-cache"
# 1. libghostty — ReleaseFast, both renderers (Linux app-runtime=none).
# Produces zig-out/lib/ghostty-internal.so, which the Qt CMake links.
# Fetches Zig dependencies from deps.files.ghostty.org (needs network).
zig build -Dapp-runtime=none -Doptimize=ReleaseFast
# 2. Qt6 frontend. CMAKE_INSTALL_LIBDIR=lib/ghastty keeps the private
# libghostty.so out of the top-level /usr/lib; the CMakeLists derives
# INSTALL_RPATH from the same variable, so the binary still resolves
# it at $ORIGIN/../lib/ghastty.
cmake -S qt -B qt/build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib/ghastty \
-Wno-dev
cmake --build qt/build
}
package() {
cd "$srcdir/$pkgname"
DESTDIR="$pkgdir" cmake --install qt/build
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |