Install this version:
emerge -a =dev-util/bash-language-server-5.8.1
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =dev-util/bash-language-server-5.8.1
Or alternatively:
emerge --autounmask-write -a =dev-util/bash-language-server-5.8.1
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit optfeature
# The npm tarball carries only the compiled server. Its runtime dependencies
# are resolved by npm at install time, which the Portage sandbox forbids, so
# they ship as a second distfile generated offline from this exact release.
# Upstream publishes no npm-shrinkwrap.json; --before is what pins the
# transitive tree (keep it at least 7 days in the past), and the resolved tree
# is recorded in node_modules/.package-lock.json inside the tarball:
# tar xzf ${P}.tgz && cd package
# npm pkg delete devDependencies scripts
# npm install --omit=dev --ignore-scripts --no-audit --no-fund \
# --before=2026-09-20
# tar --sort=name --mtime='2026-09-20 00:00:00Z' --owner=0 --group=0 \
# --numeric-owner --format=gnu -cf - node_modules \
# | xz -T1 -9e > ${PN}-node_modules-${PV}.tar.xz
# Every bump must regenerate and upload this tarball, and redo the LICENSE
# survey below from node_modules/.package-lock.json.
NODE_MODULES="${PN}-node_modules-${PV}.tar.xz"
DESCRIPTION="Language server for Bash"
HOMEPAGE="https://github.com/bash-lsp/bash-language-server"
SRC_URI="
https://registry.npmjs.org/${PN}/-/${P}.tgz
https://distfiles.obentoo.org/${NODE_MODULES}
"
S="${WORKDIR}/package"
# MIT: the server, tree-sitter-bash.wasm and most of node_modules.
# Vendored: ISC (fastq, fuzzy-search, glob-parent, semver),
# BSD-2 (@mixmark-io/domino), BlueOak-1.0.0 (minimatch).
LICENSE="MIT BSD-2 BlueOak-1.0.0 ISC"
SLOT="0"
# Pure JavaScript plus WebAssembly (tree-sitter), no install scripts and no
# native addons in the vendored tree, so nothing here is arch-specific.
KEYWORDS="~amd64 ~arm64"
RDEPEND=">=net-libs/nodejs-20:*"
src_install() {
insinto /usr/share/${PN}
doins -r out package.json tree-sitter-bash.wasm
# npm's .bin shims are symlinks to helper CLIs nothing here runs.
rm -r "${WORKDIR}"/node_modules/.bin || die
doins -r "${WORKDIR}"/node_modules
# server.js spawns this script directly for option completion, so it
# must keep the exec bit that doins drops.
fperms +x /usr/share/${PN}/out/get-options.sh
# package.json points bin at out/cli.js, meant to be reached through
# node_modules/.bin; the launcher uses an absolute path instead.
cat > "${T}"/${PN} <<-EOF || die
#!/bin/sh
exec node /usr/share/${PN}/out/cli.js "\$@"
EOF
dobin "${T}"/${PN}
dodoc README.md CHANGELOG.md
}
pkg_postinst() {
optfeature "diagnostics (linting)" dev-util/shellcheck dev-util/shellcheck-bin
optfeature "document formatting" dev-util/shfmt
optfeature "completion of command options" app-shells/bash-completion
optfeature "man page documentation on hover" virtual/man
}
| Type | File | Size | Source URLs |
|---|---|---|---|
| DIST | bash-language-server-5.8.1.tgz | 390314 bytes | https://registry.npmjs.org/bash-language-server/-/bash-language-server-5.8.1.tgz |
| DIST | bash-language-server-node_modules-5.8.1.tar.xz | 2015328 bytes | https://distfiles.obentoo.org/bash-language-server-node_modules-5.8.1.tar.xz |