diff --git a/bin/install_rust_crates b/bin/install_rust_crates new file mode 100755 index 0000000..6600cdd --- /dev/null +++ b/bin/install_rust_crates @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +# Installs Rust crates. + +set -o nounset +set -o errexit +set -o pipefail +IFS=$'\n\t' + +SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_rust_crates" + +if [[ -x "$SCRIPT_PATH" ]]; then + install_rust + "$SCRIPT_PATH" +else + printf "WARNING: Rust crates install script does not exist or is not executable.\n" +fi diff --git a/bin/run b/bin/run index 9bb1fa4..a11e2ff 100755 --- a/bin/run +++ b/bin/run @@ -39,6 +39,7 @@ while true; do printf " m: Install Mac App Store software.\n" printf " a: Install application software.\n" printf " x: Install application software extensions.\n" + printf " rc: Install Rust crates.\n" printf " d: Apply default settings.\n" printf " s: Setup installed software.\n" printf " i: Install everything (i.e. executes all install options).\n" diff --git a/lib/installers.sh b/lib/installers.sh index 594abf6..3dff5e6 100644 --- a/lib/installers.sh +++ b/lib/installers.sh @@ -171,6 +171,15 @@ install_program() { } export -f install_program +# Installs Rust. +# Parameters: None. +install_rust() { + if ! command -v cargo > /dev/null; then + curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh + fi +} +export -f install_rust + # Installs an application via a tar file. # Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options. install_tar_app() { diff --git a/lib/options.sh b/lib/options.sh index 7218ef0..bc6c073 100644 --- a/lib/options.sh +++ b/lib/options.sh @@ -22,6 +22,8 @@ process_option() { bin/install_applications;; 'x') bin/install_extensions;; + 'rc') + bin/install_rust_crates;; 'd') bin/apply_default_settings;; 's') @@ -35,6 +37,7 @@ process_option() { bin/install_app_store bin/install_applications bin/install_extensions + bin/install_rust_crates bin/apply_default_settings bin/setup_software clean_work_path;; @@ -46,7 +49,8 @@ process_option() { verify_homebrew_casks verify_app_store_applications verify_applications - verify_extensions;; + verify_extensions + verify_rust_crates;; 'C') caffeinate_machine;; 'ua') diff --git a/lib/verifiers.sh b/lib/verifiers.sh index 0e608c1..45dcd5b 100644 --- a/lib/verifiers.sh +++ b/lib/verifiers.sh @@ -126,3 +126,20 @@ verify_path() { fi } export -f verify_path + +# Checks for missing Rust crates. +verify_rust_crates() { + printf "\nChecking Rust crates...\n" + + local crates="$(ls -A1 $HOME/.cargo/bin)" + + while read line; do + if [[ "$line" == "cargo install"* ]]; then + local crate=$(printf "$line" | awk '{print $3}') + verify_listed_application "$crate" "${crates[*]}" + fi + done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates" + + printf "Rust crates check complete.\n" +} +export -f verify_rust_crates