From 35663cf8b3e9e748b57b2ff3347e3918d083d7b6 Mon Sep 17 00:00:00 2001 From: Brooke Kuhlmann Date: Sun, 14 Mar 2021 10:35:58 -0600 Subject: [PATCH] Added Rust crates script Necessary to implement the installation of Rust and associated crates which can be used by downstream configurations. This functionality was originally part of the macOS Configuration project but has been moved here to provide a common foundation in which to build upon. --- bin/install_rust_crates | 17 +++++++++++++++++ bin/run | 1 + lib/installers.sh | 9 +++++++++ lib/options.sh | 6 +++++- lib/verifiers.sh | 17 +++++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100755 bin/install_rust_crates 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