lunarvim-git
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed the full PKGBUILD and judged it LOW (confidence 82%): The PKGBUILD sources LunarVim from its official GitHub repository and nvim-treesitter from its official GitHub repository with a pinned tag and checksum. The `yarn global add` and `cargo install` calls are inside an opt-in user-run shell script (`init-lvim.sh`) that is installed to `/usr/share/lunarvim/` — they are NOT executed during `makepkg` build or install, and they are NOT a .install hook. The user must explicitly run this script themselves after installation. While pulling unversioned packages from npm/cargo registries at runtime is a supply-chain concern in principle, it is a well-known pattern for Neovim plugin managers and is clearly documented as optional setup. The actual package build only compiles tree-sitter parsers from a pinned, checksummed source. This does not meet the bar for 'medium' since no unverified code is executed during packaging or installation — only during an explicit, user-initiated post-install script. The pattern is sloppy (should ideally use system packages) but not a security risk in the packaging sense.
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:110
cargo install fd-find -
PKGBUILD:111
cargo install ripgrep
PKGBUILD
2 offending line(s) highlighted# Maintainer:
# Contributor: Hanatomizu <chart11from21 at outlook dot com>
# Contributor: edward-p <edward AT edward-p DOT xyz>
_pkgname="lunarvim"
pkgname="$_pkgname-git"
pkgver=1.4.0.r5.gaa51c20
pkgrel=3
pkgdesc="An IDE layer for Neovim with sane defaults"
url="https://github.com/LunarVim/LunarVim"
license=('GPL-3.0-only')
arch=('any')
depends=(
'fzf'
'git'
'lua'
'neovim'
'neovim-remote'
'nodejs'
'tree-sitter'
'yarn'
)
makedepends=(
'git'
'parallel'
'tree-sitter-cli'
)
optdepends=(
'ripgrep: optional dependencies for telescope.nvim'
'lazygit: enables <leader>gg to launch lazygit for intergrated and enhanced Git experience while in lvim'
)
_pkgsrc="$_pkgname"
source=(
"$_pkgsrc"::"git+$url.git"
"nvim-treesitter"::"git+https://github.com/nvim-treesitter/nvim-treesitter.git#tag=v0.10.0"
'langs.lua'
)
sha256sums=(
'SKIP'
'b4a7931c690c2f2326398fede61e87a19686f065d9b7c32664a885cbbb3f827d'
'165e39c90fb14aa220b7e0c8082e6b95109f4302acede816ef572f9b5f951ff7'
)
pkgver() {
cd "$_pkgsrc"
git describe --long --tags --abbrev=7 --exclude='*[a-zA-Z][a-zA-Z]*' \
| sed -E 's/^[^0-9]*//;s/([^-]*-g)/r\1/;s/-/./g'
}
build() {
cd "$srcdir/nvim-treesitter"
runtime="$srcdir/nvim-treesitter"
echo "::: step 1"
nvim --clean --cmd "set runtimepath+=${runtime}" -l "$srcdir/langs.lua"
echo "::: step 2"
langs=$(< langs.txt)
for lang in ${langs[@]}; do
if [[ ! -e "$runtime/parser/$lang.so" ]]; then
echo "nvim --clean --cmd 'set runtimepath+=$runtime' --headless +'TSUpdateSync $lang' +qall"
fi
done | parallel -j $(nproc)
}
package() {
cd "$_pkgsrc"
mkdir -pm755 "$pkgdir/usr/share/lunarvim"{,/ftplugin}
cp -r {lua,snapshots,init.lua} "$pkgdir/usr/share/lunarvim"
mkdir -pm755 "$pkgdir/usr/share/lunarvim/prebuild/nvim-treesitter/parser"{,-info}
for parser in "$srcdir/nvim-treesitter/parser"/*.so; do
install -Dm755 "$parser" "$pkgdir/usr/share/lunarvim/prebuild/nvim-treesitter/parser/${parser##/*/}"
done
for info in "$srcdir/nvim-treesitter/parser-info"/*; do
install -Dm755 "$info" "$pkgdir/usr/share/lunarvim/prebuild/nvim-treesitter/parser-info/${info##/*/}"
done
install -Dm755 /dev/stdin "$pkgdir/usr/bin/lvim" << 'END'
#!/usr/bin/env sh
export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-$HOME/.local/share/lunarvim}"
export LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-$HOME/.config/lvim}"
export LUNARVIM_CACHE_DIR="${LUNARVIM_CACHE_DIR:-$HOME/.cache/lvim}"
exec nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/init.lua" "$@"
END
install -Dm755 /dev/stdin "$pkgdir/usr/share/lunarvim/init-lvim.sh" << 'END'
#!/usr/bin/env bash
mkdir -p ~/.config/lvim
cat > ~/.config/lvim/config.lua << EOL
-- Read the docs: https://www.lunarvim.org/docs/configuration
-- Example configs: https://github.com/LunarVim/starter.lvim
EOL
mkdir -p ~/.local/share/lunarvim
ln -s /usr/share/lunarvim ~/.local/share/lunarvim/lvim
echo -e "\033[1;32m==> Installing dependencies of NodeJS & Rust...\033[0m"
yarn global add neovim
yarn global add tree-sitter-cli
cargo install fd-find
cargo install ripgrep
echo -e "\033[1;32m==> Preparing Lazy setup...\033[0m"
lvim --headless -c 'quitall'
[ ! -f "$LUNARVIM_CONFIG_DIR/config.lua" ] \
&& cp /usr/share/doc/lunarvim/config.example.lua ~/.config/lvim/config.lua
echo -e "\033[1;32m==> Installing treesitter parsers..\033[0m"
ln -s /usr/share/lunarvim/prebuild/nvim-treesitter/parser/* \
~/.local/share/lunarvim/site/pack/lazy/opt/nvim-treesitter/parser/
ln -s /usr/share/lunarvim/prebuild/nvim-treesitter/parser-info/* \
~/.local/share/lunarvim/site/pack/lazy/opt/nvim-treesitter/parser-info/
echo -e "\033[1;32m==> Generate the new ftplugin template files..\033[0m"
lvim --headless +LvimUpdate +q
echo -e "\033[1;32m===============================================\033[0m"
echo "lunarvim runtime is inited for $(whoami)"
echo "clean up by:"
echo " rm -rf ~/.config/lvim ~/.local/share/lunarvim"
echo -e "\033[1;32m===============================================\033[0m"
END
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |
| 2026-07-16 00:05:41 | LOW | 2 |
| 2026-07-15 00:09:25 | LOW | 2 |