72 lines
1.8 KiB
Bash
Executable File
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
|