#
# Rust environment setup.
#

# ==============================================================================
# aliases
# ==============================================================================

alias c="cargo"

if command-exists exa; then
  alias ll="exa -lagHS --color-scale --icons --git"
  alias llt="ll --tree"
fi

if command-exists bat; then
  alias cat="bat -P"
fi

# ==============================================================================
# completions
# ==============================================================================

if command-exists rustup; then
  _rustup() {
    unset -f _rustup
    eval "$(rustup completions zsh)"
  }
  compctl -K _rustup rustup

  if command-exists cargo; then
    _cargo() {
      unset -f _cargo
      eval "$(rustup completions zsh cargo)"
    }
    compctl -K _cargo cargo
  fi
fi

# ==============================================================================
# global rust packages
# ==============================================================================

install_rust_global_packages() {
  (
    set -e

    if ! command-exists rustup; then
      read -q "REPLY?Rustup was not found. Install it? [y/N] " &&
        echo &&
        curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    fi

    if ! command-exists rustup; then
      echo "Rustup was not found. Aborting."
      return 1
    fi

    rustup component add \
      clippy \
      rust-analyzer \
      rust-src \
      rustfmt

    # Install or update cargo-binstall
    if ! command-exists cargo-binstall; then
      RUSTC_WRAPPER="${commands[sccache]}" cargo install cargo-binstall
    fi

    # Install sccache before the rest of the packages.
    if ! command-exists sccache; then
      RUSTC_WRAPPER="" cargo binstall sccache
    fi

    RUSTC_WRAPPER=sccache cargo binstall cargo-quickinstall

    RUSTC_WRAPPER=sccache cargo quickinstall \
      cargo-audit \
      cargo-info

    RUSTC_WRAPPER=sccache cargo binstall \
      cargo-update \
      cargo-edit \
      bacon \
      dirstat-rs
  )
}
