#!/usr/bin/env bash
# Install cargo/rust packages.
#
# shellcheck source=shared.sh
source "$HOME/.dotfiles/config/exports"
source "$HOME/.dotfiles/config/alias"
source "$HOME/.dotfiles/config/functions"
source "$HOME/.dotfiles/scripts/shared.sh"

msg "Starting to install rust/cargo packages"

! x-have cargo && {
  msg "cargo could not be found. installing cargo with rustup.rs"
  curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --no-modify-path -y
}

source "$CARGO_HOME/env"

! x-have rustup && {
  msg_err "rustup could not be found. Aborting..."
  exit 1
}

rustup default system

packages=(
  "cargo-cache"
  # starship.rs
  # "starship"
  # An incremental parsing system for programming tools
  "tree-sitter-cli"
  # a subprocess caching utility
  "bkt"
  # a structural diff that understands syntax
  "difftastic"
  # a modern replacement for ls.
  "eza"
  # A simple, fast and user-friendly alternative to 'find'
  "fd-find"
  # A cargo subcommand for checking and applying
  # updates to installed executables
  "cargo-update"
  # recursively searches directories for a
  # regex pattern while respecting your gitignore
  "ripgrep"
  # A version manager for neovim
  "bob-nvim"
  "bottom"
)

for pkg in "${packages[@]}"; do
  # Trim spaces
  pkg=${pkg// /}
  # Skip comments
  if [[ ${pkg:0:1} == "#" ]]; then continue; fi

  msg_run "Installing cargo package $pkg"
  cargo install "$pkg"

  echo ""
done

msg_done "Installed cargo packages!"

msg_run "Now doing the next steps for cargo packages"

# use bob to install nvim
x-have bob && {
  bob use stable && x-path-append "$XDG_DATA_HOME/bob/nvim-bin"
}

msg_run "Removing cargo cache"
cargo cache --autoclean
