nova-client-bin
LOW
maintainer Pakrohk
0 votes
scanned 2026-11-02 20:03:06.122793
Why flagged
Package builds from a prebuilt binary release by the project's official GitHub, which is normal for Flutter/Go applications; the source is trustworthy and no remote code execution or malicious behavior is present.
Triggered rules
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
Low
AI review
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is LOW (confidence 95%): Package builds from a prebuilt binary release by the project's official GitHub, which is normal for Flutter/Go applications; the source is trustworthy and no remote code execution or malicious behavior is present.
PKGBUILD
1
# Maintainer: Pakrohk <https://github.com/pakrohk>
2
3
pkgname=nova-client-bin
4
_pkgname=nova-client
5
_appid=online.novaproxy.nova_client
6
# Use the distribution's Xray instead of the bundled copy. The bundled binary is
7
# stock Xray-core and Nova only runs it for xhttp. Set to 0 to ship the bundled one.
8
_system_xray=1
9
pkgver=1.34.1
10
pkgrel=1
11
pkgdesc='Nova Client, a Flutter proxy/VPN client built on sing-box, Xray, Psiphon, MasterDNS and WARP'
12
arch=('x86_64')
13
url='https://github.com/IRNova/Nova-Client'
14
# Nova itself: MIT. psiphon-linux-amd64: GPL-3.0 (license file ships in the tarball).
15
# MasterDNS: MIT. The tarball ships no license file for sing-box or Xray; review before submitting.
16
license=('MIT' 'GPL-3.0-only')
17
# Everything the GUI links against comes from the Arch repos, and every library
18
# it links directly is listed (namcap: "implicitly satisfied"). What stays
19
# bundled has no Arch package or is tied to this exact build: the Flutter engine
20
# and plugins, libaether, libcronet, the Nova fork of sing-box, psiphon, masterdns.
21
depends=('glibc' 'libgcc' 'libstdc++'
22
'gtk3' 'glib2' 'cairo' 'pango' 'harfbuzz' 'fontconfig' 'libepoxy'
23
'at-spi2-core' 'gdk-pixbuf2' 'hicolor-icon-theme'
24
'libsecret'
25
'libayatana-appindicator' 'libayatana-indicator' 'ayatana-ido' 'libdbusmenu-glib')
26
if (( _system_xray )); then
27
depends+=('xray')
28
fi
29
optdepends=('polkit: full-device (TUN) mode, started through pkexec'
30
'gnome-shell-extension-appindicator: system tray icon on GNOME')
31
provides=("$_pkgname")
32
conflicts=("$_pkgname")
33
makedepends=('patchelf')
34
# Prebuilt Go/Rust/Flutter binaries: automatic stripping stays off (it could break
35
# the Dart snapshot); the few files that ship with symbols are stripped by hand.
36
options=('!strip' '!debug')
37
noextract=("$_pkgname-$pkgver.tar.gz")
38
source=("$_pkgname-$pkgver.tar.gz::$url/releases/download/v$pkgver/Nova-Linux.tar.gz"
39
"$_pkgname-$pkgver-LICENSE::https://raw.githubusercontent.com/IRNova/Nova-Client/v$pkgver/LICENSE"
40
"$_appid.desktop")
41
sha256sums=('8be86aee572020f669abe01abfcaa54df30de4acacf26ace85515fc6c9bbebc3'
42
'c99c6d75494458d52a049db0898c204eaa525346da1a8e13b260fb369f344ad0'
43
'0b2ccf4d89dcad6cd8fed4b0fcbae24975933449e6944a79f166601252dae890')
44
45
package() {
46
# The app finds its cores and libaether.so next to its own executable and
47
# resolves everything relative to it, so the tree stays together in one
48
# private directory under /usr/lib.
49
install -dm755 "$pkgdir/usr/lib/$_pkgname"
50
bsdtar -xf "$srcdir/$_pkgname-$pkgver.tar.gz" -C "$pkgdir/usr/lib/$_pkgname" --no-same-owner
51
52
# Upstream CI leaked its build directory into the plugins' RUNPATH (namcap:
53
# "Insecure RUNPATH"). The plugins only need libflutter_linux_gtk.so, which
54
# sits next to them, so point RUNPATH at their own directory.
55
local f rpath
56
for f in "$pkgdir/usr/lib/$_pkgname"/lib/*.so; do
57
rpath=$(patchelf --print-rpath "$f") # fails loudly if patchelf is missing
58
case "$rpath" in
59
/home/*) patchelf --set-rpath '$ORIGIN' "$f" ;;
60
esac
61
done
62
63
# namcap: "unstripped" ELF files. Strip only what upstream shipped with
64
# symbols; libapp.so (Dart AOT snapshot) and the Flutter engine stay untouched.
65
strip --strip-unneeded \
66
"$pkgdir/usr/lib/$_pkgname"/lib/lib*_plugin.so \
67
"$pkgdir/usr/lib/$_pkgname/lib/libdartjni.so" \
68
"$pkgdir/usr/lib/$_pkgname/libcronet.so"
69
strip --strip-all "$pkgdir/usr/lib/$_pkgname/nova_client"
70
71
# The app looks for xray-linux-amd64 next to itself; point that name at the
72
# packaged Xray so it is updated through pacman.
73
if (( _system_xray )); then
74
ln -sf /usr/bin/xray "$pkgdir/usr/lib/$_pkgname/xray-linux-amd64"
75
fi
76
77
install -dm755 "$pkgdir/usr/bin"
78
ln -s "/usr/lib/$_pkgname/nova_client" "$pkgdir/usr/bin/$_pkgname"
79
80
# Desktop file is named after the GTK application id so Wayland compositors match it.
81
install -Dm644 "$srcdir/$_appid.desktop" "$pkgdir/usr/share/applications/$_appid.desktop"
82
install -Dm644 "$pkgdir/usr/lib/$_pkgname/data/flutter_assets/assets/brand/nova-logo-tile.svg" \
83
"$pkgdir/usr/share/icons/hicolor/scalable/apps/$_pkgname.svg"
84
85
install -Dm644 "$srcdir/$_pkgname-$pkgver-LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
86
install -Dm644 "$pkgdir/usr/lib/$_pkgname/LICENSE-psiphon.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE-psiphon.txt"
87
install -Dm644 "$pkgdir/usr/lib/$_pkgname/LICENSE-masterdns.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE-masterdns.txt"
88
}
89
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-02 20:03:06 | Low | 2 |