Files
nvim/install.sh
T
2026-05-18 01:16:33 +02:00

72 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
packagefile="packages.txt"
# Ensure we are in the correct directory
pushd "$(dirname "$(realpath "$0")")" &> /dev/null
# Read packages.txt and install packages on system using yay
function install_packages {
local install
for pkg in $(sed -E -e 's/\s*#.*$//g' -e 's/^\s+//g' "$packagefile" | sed -E ':a;N;$!ba;s/\s+/\n/g'); do
# check if package is installed
local installed
yay -Q "$(echo "$pkg")" &> /dev/null && installed=1 || installed=0
if [ $installed -eq 0 ]; then
# needs to be installed
install="$install"$'\n'"$pkg"
fi
done
[ -z "$install" ] || {
echo "Packages to be installed: "
echo "$install"
yay -S $install
}
}
# Try to install the language given in arguments
# - arg1 language name
# - arg2 github repository
function install_treesitter_language {
local language="$1"
local repository="$2"
local directory=$(basename "$repository")
# Clone the repository or update it
if [ ! -d "tree-sitter-source" ]; then
mkdir tree-sitter-source
fi
if [ ! -d "tree-sitter-source/$directory" ]; then
git clone --depth=1 "$repository" "tree-sitter-source/$directory"
fi
pushd "tree-sitter-source/$directory" &> /dev/null
git reset --hard
git clean -dfqx
git pull --ff-only
popd &> /dev/null
# Copy queries
if [ ! -d "queries/$language" ]; then
mkdir -p "queries/$language"
fi
find "tree-sitter-source/$directory" -iname '*.scm' -exec cp "{}" "queries/$language/" \;
# Make the parser
pushd "tree-sitter-source/$directory" &> /dev/null
tree-sitter build
popd &> /dev/null
# Copy parser
if [ ! -d "parser" ]; then
mkdir "parser"
fi
find "tree-sitter-source/$directory" -iname '*.so' -exec cp "{}" "parser/" \;
}
install_packages
install_treesitter_language "bash" "https://github.com/tree-sitter/tree-sitter-bash"
popd &> /dev/null