Files
dotfiles/scripts/install-cargo-packages.sh

75 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# @description Install cargo/rust packages.
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/config/shared.sh"
msgr run "Starting to install rust/cargo packages"
source "$CARGO_HOME/env"
# If we have cargo install-update, use it first
if command -v cargo-install-update &> /dev/null; then
msgr run "Updating cargo packages with cargo install-update"
cargo install-update -a
msgr run_done "Done with cargo install-update"
fi
[[ -z "$ASDF_CRATE_DEFAULT_PACKAGES_FILE" ]] && \
ASDF_CRATE_DEFAULT_PACKAGES_FILE="$DOTFILES/config/asdf/cargo-packages"
# Packages are defined in $DOTFILES/config/asdf/cargo-packages, one per line
# Skip comments and empty lines
packages=()
while IFS= read -r line; do
# Skip comments
if [[ ${line:0:1} == "#" ]]; then continue; fi
if [[ ${line:0:1} == "/" ]]; then continue; fi
# Skip empty lines
if [[ -z "$line" ]]; then continue; fi
packages+=("$line")
done < "$ASDF_CRATE_DEFAULT_PACKAGES_FILE"
# Number of jobs to run in parallel, this helps to keep the system responsive
BUILD_JOBS=$(nproc --ignore=2)
# Function to install cargo packages
install_packages()
{
for pkg in "${packages[@]}"; do
# Trim spaces
pkg=${pkg// /}
# Skip comments
if [[ ${pkg:0:1} == "#" ]]; then continue; fi
msgr run "Installing cargo package $pkg"
cargo install --jobs $BUILD_JOBS "$pkg"
msgr run_done "Done installing $pkg"
echo ""
done
}
# Function to perform additional steps for installed cargo packages
post_install_steps()
{
msgr run "Now doing the next steps for cargo packages"
# use bob to install latest stable nvim
if command -v bob &> /dev/null; then
bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
fi
msgr run "Removing cargo cache"
cargo cache --autoclean
msg_done "Done removing cargo cache"
}
main()
{
install_packages
msg_done "Installed cargo packages!"
post_install_steps
}
main "$@"