nvm-desktop-git
The package builds from source using project-owned repositories and installs only the resulting binaries; the use of cargo install for toml-cli is a build-time helper, not an external payload, and mirrors are used for availability, not untrusted code injection.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The package builds from source using project-owned repositories and installs only the resulting binaries; the use of cargo install for toml-cli is a build-time helper, not an external payload, and mirrors are used for availability, not untrusted code injection.
1 higher static finding superseded - not the current verdict (shown for transparency)
alt_pkg_manager_install
A non-pip/npm package manager (pipx, uv, poetry, cargo install, go install, gem, conda…) fetches and builds an external package at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:83
cargo install toml-cli
PKGBUILD
1 offending line(s) highlighted# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
pkgname=nvm-desktop-git
_pkgname='NVM Desktop'
pkgver=4.4.0.r0.g0eeff7a
_nodeversion=24
pkgrel=1
pkgdesc="A version management desktop client for the Nodejs."
arch=('any')
url="https://github.com/1111mp/nvm-desktop"
_nvmdurl="https://github.com/1111mp/nvmd-command"
license=('MIT')
conflicts=("${pkgname%-git}")
provides=("${pkgname%-git}=${pkgver%.r*}")
depends=(
'webkit2gtk-4.1'
'gtk3'
)
makedepends=(
'gendesk'
'npm'
'nvm'
'pnpm'
'curl'
'git'
'rust'
'librsvg'
'patchelf'
)
source=(
"${pkgname%-git}.git::git+${url}"
"nvmd.git::git+${_nvmdurl}"
)
sha256sums=('SKIP'
'SKIP')
pkgver() {
cd "${srcdir}/${pkgname%-git}.git"
set -o pipefail
git describe --long --tags --abbrev=7 | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/v//g' ||
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short=7 HEAD)"
}
_set_build_env() {
export HOME="${srcdir}/.electron-gyp"
export CARGO_HOME="${srcdir}/.cargo"
{
export PNPM_LINK_WORKSPACE_PACKAGES=true
export PNPM_FETCH_RETRY_MAXTIMEOUT=10000
export PNPM_CACHE_DIR="${srcdir}/.pnpm_cache"
export PNPM_STORE_DIR="${srcdir}/.pnpm_store"
export PNPM_VIRTUAL_STORE_DIR="${srcdir}/.pnpm_store"
export PNPM_SHAMEFULLY_HOIST=true
export PNPM_VIRTUAL_STORE_DIR_MAX_LENGTH=80
export PNPM_NODE_LINKER=hoisted
export PNPM_NETWORK_CONCURRENCY=32
}
if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then
{
export pnpm_config_registry="https://registry.npmmirror.com"
export npm_config_registry="https://registry.npmmirror.com"
export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
export RUSTUP_DIST_SERVER="https://mirrors.aliyun.com/rustup"
export RUSTUP_UPDATE_ROOT="https://mirrors.aliyun.com/rustup/rustup"
}
fi
}
_ensure_local_nvm() {
local NVM_DIR="${srcdir}/.nvm"
source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
nvm install "${_nodeversion}"
nvm use "${_nodeversion}"
}
prepare() {
gendesk -f -n -q \
--pkgname="${pkgname%-git}" \
--pkgdesc="${pkgdesc}" \
--categories="Development" \
--name="${pkgname%-git}" \
--exec="${pkgname%-git} %U"
_set_build_env
_ensure_local_nvm
rustup default stable
# build nvmd
cd "${srcdir}/nvmd.git"
cargo install toml-cli
cargo build --release
# build nvm-desktop
cd "${srcdir}/${pkgname%-git}.git"
install -Dm755 "${srcdir}/nvmd.git/target/release/nvmd" -t "${srcdir}/${pkgname%-git}.git/src-tauri/resources"
sed -i "s/\"active\"\: true\,/\"active\"\: false\,/g" src-tauri/tauri.conf.json
cp "src-tauri/icons/128x128@2x.png" "src-tauri/icons/256x256.png"
NODE_ENV=development pnpm install
}
build() {
cd "${srcdir}/${pkgname%-git}.git"
_set_build_env
_ensure_local_nvm
NODE_ENV=production pnpm run build
}
package() {
install -Dm755 "${srcdir}/${pkgname%-git}.git/src-tauri/target/release/${pkgname%-git}" -t "${pkgdir}/usr/bin"
install -Dm755 "${srcdir}/nvmd.git/target/release/nvmd" -t "${pkgdir}/usr/lib/${_pkgname//-/ }/resources"
install -Dm644 "${srcdir}/${pkgname%-git}.desktop" -t "${pkgdir}/usr/share/applications"
_icon_sizes=(32x32 64x64 128x128 256x256)
for _icons in "${_icon_sizes[@]}";do
install -Dm644 "${srcdir}/${pkgname%-git}.git/src-tauri/icons/${_icons}.png" \
"${pkgdir}/usr/share/icons/hicolor/${_icons}/apps/${pkgname%-git}.png"
done
install -Dm644 "${srcdir}/${pkgname%-git}.git/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
}
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 |