Refactored library functions

Minor cleanup to documentation, syntax, and consistency in general.

Milestone: patch
This commit is contained in:
Brooke Kuhlmann
2024-02-24 14:04:55 -07:00
parent b4faa2e919
commit 75d2c93e89
4 changed files with 229 additions and 150 deletions

View File

@@ -2,8 +2,9 @@
# Defines software installer functions. # Defines software installer functions.
# Downloads remote file to local disk. # Label: Download File
# Parameters: $1 (required) - URL, $2 (required) - File name, $3 (optional) - HTTP header. # Description: Download remote file to local disk.
# Parameters: $1 (required): URL, $2 (required): File name, $3 (optional): HTTP header.
download_file() { download_file() {
local url="$1" local url="$1"
local file_name="$2" local file_name="$2"
@@ -24,38 +25,47 @@ download_file() {
} }
export -f download_file export -f download_file
# Installs an application. # Label: Install Application
# Parameters: $1 (required) - Application source path, $2 (required) - Application name. # Description: Install an application.
# Parameters: $1 (required): Install path, $2 (required): Name.
install_app() { install_app() {
local install_root=$(get_install_root "$2") local install_path="$1"
local file_extension=$(get_extension "$2") local name="$2"
local install_root=""
local file_extension=""
printf "Installing: $install_root/$2...\n" install_root=$(get_install_root "$name")
file_extension=$(get_extension "$name")
printf "%s\n" "Installing: $install_root/$name..."
case $file_extension in case $file_extension in
'') '')
cp -a "$1/$2" "$install_root";; cp -a "$install_path/$name" "$install_root";;
'app') 'app')
cp -a "$1/$2" "$install_root";; cp -a "$install_path/$name" "$install_root";;
'prefPane') 'prefPane')
sudo cp -pR "$1/$2" "$install_root";; sudo cp -pR "$install_path/$name" "$install_root";;
'qlgenerator') 'qlgenerator')
sudo cp -pR "$1/$2" "$install_root" && qlmanage -r;; sudo cp -pR "$install_path/$name" "$install_root" && qlmanage -r;;
*) *)
printf "ERROR: Unknown file extension: $file_extension.\n" printf "%s\n" "ERROR: Unknown file extension: $file_extension."
esac esac
} }
export -f install_app export -f install_app
# Installs an application via a DMG file. # Label: Install DMG Application
# Parameters: $1 (required) - URL, $2 (required) - Mount path, $3 (required) - Application name. # Description: Install DMG application.
# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name.
install_dmg_app() { install_dmg_app() {
local url="$1" local url="$1"
local mount_point="/Volumes/$2" local mount_point="/Volumes/$2"
local app_name="$3" local app_name="$3"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="download.dmg" local work_file="download.dmg"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
mount_image "$MAC_OS_WORK_PATH/$work_file" mount_image "$MAC_OS_WORK_PATH/$work_file"
@@ -66,66 +76,76 @@ install_dmg_app() {
} }
export -f install_dmg_app export -f install_dmg_app
# Installs a package via a DMG file. # Label: Install DMG Package
# Parameters: $1 (required) - URL, $2 (required) - Mount path, $3 (required) - Application name. # Description: Install DMG application via a package file.
# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name.
install_dmg_pkg() { install_dmg_pkg() {
local url="$1" local url="$1"
local mount_point="/Volumes/$2" local mount_point="/Volumes/$2"
local app_name="$3" local app_name="$3"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="download.dmg" local work_file="download.dmg"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
mount_image "$MAC_OS_WORK_PATH/$work_file" mount_image "$MAC_OS_WORK_PATH/$work_file"
install_pkg "$mount_point" "$app_name" install_pkg "$mount_point" "$app_name"
unmount_image "$mount_point" unmount_image "$mount_point"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_application "$app_name" verify_application "$app_name"
fi fi
} }
export -f install_dmg_pkg export -f install_dmg_pkg
# Installs a single file. # Label: Install File
# Parameters: $1 (required) - URL, $2 (required) - Install path. # Description: Install a single file.
# Parameters: $1 (required): URL, $2 (required): Install path.
install_file() { install_file() {
local file_url="$1" local file_url="$1"
local file_name=$(get_basename "$1") local file_name=""
local install_path="$2" local install_path="$2"
file_name=$(get_basename "$1")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$file_url" "$file_name" download_file "$file_url" "$file_name"
mkdir -p $(dirname "$install_path") mkdir -p $(dirname "$install_path")
mv "$MAC_OS_WORK_PATH/$file_name" "$install_path" mv "$MAC_OS_WORK_PATH/$file_name" "$install_path"
printf "Installed: $file_name.\n" printf "%s\n" "Installed: $file_name."
verify_path "$install_path" verify_path "$install_path"
fi fi
} }
export -f install_file export -f install_file
# Installs application code from a Git repository. # Label: Install Git Application
# Parameters: $1 (required) - Repository URL, $2 (required) - Install path, $3 (optional) - Git clone options. # Description: Install application from a Git repository.
# Parameters: $1 (required): URL, $2 (required): Install path, $3 (optional): Git clone options.
install_git_app() { install_git_app() {
local repository_url="$1" local url="$1"
local app_name=$(get_basename "$2")
local install_path="$2" local install_path="$2"
local app_name=""
local options="--quiet" local options="--quiet"
app_name="$(get_basename "$2")"
if [[ -n "$3" ]]; then if [[ -n "$3" ]]; then
local options="$options $3" local options="$options $3"
fi fi
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
printf "Installing: $install_path/$app_name...\n" printf "%s\n" "Installing: $install_path..."
git clone $options "$repository_url" "$install_path" git clone $options "$url" "$install_path"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_path "$install_path" verify_path "$install_path"
fi fi
} }
export -f install_git_app export -f install_git_app
# Installs settings from a Git repository. # Label: Install Git Project
# Parameters: $1 (required) - Repository URL, $2 (required) - Repository version, $3 (required) - Project directory, $4 (required) - Script to run (including any arguments). # Description: Install Git project.
# Parameters: $1 (required): URL, $2 (required): Version, $3 (required): Project directory, $4 (required): Script to run (including any arguments).
install_git_project() { install_git_project() {
local repo_url="$1" local repo_url="$1"
local repo_version="$2" local repo_version="$2"
@@ -142,64 +162,76 @@ install_git_project() {
} }
export -f install_git_project export -f install_git_project
# Installs Homebrew. # Label: Install Homebrew
# Parameters: None. # Description: Install and setup Homebrew.
install_homebrew() { install_homebrew() {
if ! command -v brew > /dev/null; then if ! command -v brew > /dev/null; then
/bin/bash -c "$(curl --location --fail --silent --show-error https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /bin/bash -c "$(curl --location --fail --silent --show-error https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo "eval \"($(get_homebrew_bin_root)/brew shellenv)\"" > $HOME/.zprofile echo "eval \"($(get_homebrew_bin_root)/brew shellenv)\"" > "$HOME/.zprofile"
eval "$($(get_homebrew_bin_root)/brew shellenv)" eval "$($(get_homebrew_bin_root)/brew shellenv)"
fi fi
} }
export -f install_homebrew export -f install_homebrew
# Installs a package via a zip file. # Label: Install Bare Package
# Parameters: $1 (required) - URL, $2 (required) - Application name. # Description: Install a bare package.
# Parameters: $1 (required): URL, $2 (required): Application name.
install_bare_pkg() { install_bare_pkg() {
local url="$1" local url="$1"
local app_name="$2" local app_name="$2"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="$app_name.pkg" local work_file="$app_name.pkg"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
install_pkg "$MAC_OS_WORK_PATH" "$app_name" install_pkg "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_application "$app_name" verify_application "$app_name"
fi fi
} }
export -f install_bare_pkg export -f install_bare_pkg
# Installs a package. # Label: Install Package
# Parameters: $1 (required) - Package source path, $2 (required) - Application name. # Description: Install local package.
# Parameters: $1 (required): Package source path, $2 (required): Application name.
install_pkg() { install_pkg() {
local install_root=$(get_install_root "$2") local source_path="$1"
local name="$2"
local install_root=""
local package=""
printf "Installing: $install_root/$2...\n" install_root=$(get_install_root "$name")
local package=$(sudo find "$1" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg") package=$(sudo find "$source_path" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg")
printf "%s\n" "Installing: $install_root/$name..."
sudo installer -pkg "$package" -target / sudo installer -pkg "$package" -target /
} }
export -f install_pkg export -f install_pkg
# Installs program (single file). # Label: Install Program
# Parameters: $1 (required) - URL, $2 (required) - Program name. # Description: Installs program without any packaging.
# Parameters: $1 (required): URL, $2 (required): Name.
install_program() { install_program() {
local url="$1" local url="$1"
local program_name="$2" local program_name="$2"
local install_path=$(get_install_path "$program_name") local install_path=""
install_path=$(get_install_path "$program_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$program_name" download_file "$url" "$program_name"
mv "$MAC_OS_WORK_PATH/$program_name" "$install_path" mv "$MAC_OS_WORK_PATH/$program_name" "$install_path"
chmod 755 "$install_path" chmod 755 "$install_path"
printf "Installed: $program_name.\n" printf "%s\n" "Installed: $program_name."
verify_application "$program_name" verify_application "$program_name"
fi fi
} }
export -f install_program export -f install_program
# Installs Node. # Label: Install Node
# Parameters: None. # Description: Install and setup Node for local development.
install_node() { install_node() {
if [[ ! -x "$(command -v node)" ]]; then if [[ ! -x "$(command -v node)" ]]; then
"$(get_homebrew_bin_root)/fnm" install --latest "$(get_homebrew_bin_root)/fnm" install --latest
@@ -207,10 +239,12 @@ install_node() {
} }
export -f install_node export -f install_node
# Installs Ruby. # Label: Install Ruby
# Parameters: None. # Description: Install and setup Ruby for local development.
install_ruby() { install_ruby() {
local version="$(cat $HOME/.ruby-version | tr -d '\n')" local version=""
version="$(cat $HOME/.ruby-version | tr -d '\n')"
if [[ ! -x "$(command -v ruby)" && -n $(ruby --version | grep --quiet "$version") ]]; then if [[ ! -x "$(command -v ruby)" && -n $(ruby --version | grep --quiet "$version") ]]; then
"$(get_homebrew_bin_root)"/frum install "$version" \ "$(get_homebrew_bin_root)"/frum install "$version" \
@@ -222,8 +256,8 @@ install_ruby() {
} }
export -f install_ruby export -f install_ruby
# Installs Rust. # Label: Install Rust
# Parameters: None. # Description: Install and setup Rust for local development.
install_rust() { install_rust() {
if ! command -v cargo > /dev/null; then if ! command -v cargo > /dev/null; then
curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh
@@ -231,15 +265,18 @@ install_rust() {
} }
export -f install_rust export -f install_rust
# Installs an application via a tar file. # Label: Install Tar Application
# Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options. # Description: Install application from tar file.
# Parameters: $1 (required): URL, $2 (required): Name, $3 (required): Decompress options.
install_tar_app() { install_tar_app() {
local url="$1" local url="$1"
local app_name="$2" local app_name="$2"
local options="$3" local options="$3"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="download.tar" local work_file="download.tar"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
@@ -250,20 +287,23 @@ install_tar_app() {
) )
install_app "$MAC_OS_WORK_PATH" "$app_name" install_app "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_application "$app_name" verify_application "$app_name"
fi fi
} }
export -f install_tar_app export -f install_tar_app
# Installs an application via a zip file. # Label: Install Zip Application
# Parameters: $1 (required) - URL, $2 (required) - Application name. # Description: Install application from zip file.
# Parameters: $1 (required): URL, $2 (required): Name.
install_zip_app() { install_zip_app() {
local url="$1" local url="$1"
local app_name="$2" local app_name="$2"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="download.zip" local work_file="download.zip"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
@@ -275,20 +315,23 @@ install_zip_app() {
) )
install_app "$MAC_OS_WORK_PATH" "$app_name" install_app "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_application "$app_name" verify_application "$app_name"
fi fi
} }
export -f install_zip_app export -f install_zip_app
# Installs a package via a zip file. # Label: Install Zip Package
# Parameters: $1 (required) - URL, $2 (required) - Application name. # Description: Install application from a package within a zip file.
# Parameters: $1 (required): URL, $2 (required): Application name.
install_zip_pkg() { install_zip_pkg() {
local url="$1" local url="$1"
local app_name="$2" local app_name="$2"
local install_path=$(get_install_path "$app_name") local install_path=""
local work_file="download.zip" local work_file="download.zip"
install_path=$(get_install_path "$app_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$install_path" ]]; then
download_file "$url" "$work_file" download_file "$url" "$work_file"
@@ -299,24 +342,26 @@ install_zip_pkg() {
) )
install_pkg "$MAC_OS_WORK_PATH" "$app_name" install_pkg "$MAC_OS_WORK_PATH" "$app_name"
printf "Installed: $app_name.\n" printf "%s\n" "Installed: $app_name."
verify_application "$app_name" verify_application "$app_name"
fi fi
} }
export -f install_zip_pkg export -f install_zip_pkg
# Mounts a disk image. # Label: Mount Image
# Parameters: $1 (required) - Image path. # Description: Mount disk image.
# Parameters: $1 (required): Path.
mount_image() { mount_image() {
printf "Mounting image...\n" printf "%s\n" "Mounting image..."
hdiutil attach -quiet -nobrowse -noautoopen "$1" hdiutil attach -quiet -nobrowse -noautoopen "$1"
} }
export -f mount_image export -f mount_image
# Unmounts a disk image. # Label: Unmount Image
# Parameters: $1 (required) - Mount path. # Description: Unmount disk image.
# Parameters: $1 (required): Path.
unmount_image() { unmount_image() {
printf "Unmounting image...\n" printf "%s\n" "Unmounting image..."
hdiutil detach -force "$1" hdiutil detach -force "$1"
} }
export -f unmount_image export -f unmount_image

View File

@@ -2,8 +2,10 @@
# Defines command line prompt options. # Defines command line prompt options.
# Process option selection.
# Parameters: $1 (required) - The option to process. # Label: Process Option
# Description: Run script based on selection.
# Parameters: $1 (required): The option to process.
process_option() { process_option() {
case $1 in case $1 in
'B') 'B')

View File

@@ -2,11 +2,10 @@
# Defines general utility functions. # Defines general utility functions.
# Caffeinate machine. # Label: Caffeinate Machine
# Description: Keep machine running for a very long time.
caffeinate_machine() { caffeinate_machine() {
local pid=$(pgrep -x caffeinate) if [[ -n "$(pgrep -x caffeinate)" ]]; then
if [[ -n "$pid" ]]; then
printf "Machine is already caffeinated!\n" printf "Machine is already caffeinated!\n"
else else
caffeinate -s -u -d -i -t 3153600000 > /dev/null & caffeinate -s -u -d -i -t 3153600000 > /dev/null &
@@ -15,35 +14,40 @@ caffeinate_machine() {
} }
export -f caffeinate_machine export -f caffeinate_machine
# Cleans work path for temporary processing of installs. # Label: Clean Work Path
# Description: Clean work path of artifacts.
clean_work_path() { clean_work_path() {
rm -rf "$MAC_OS_WORK_PATH" rm -rf "$MAC_OS_WORK_PATH"
} }
export -f clean_work_path export -f clean_work_path
# Answers the file or directory basename. # Label: Get Basename
# Parameters: $1 (required) - The file path. # Description: Answer file or directory basename.
# Parameters: $1 (required): Path.
get_basename() { get_basename() {
printf "${1##*/}" # Answers file or directory name. printf "%s" "${1##*/}"
} }
export -f get_basename export -f get_basename
# Answers the file extension. # Label: Get Extension
# Parameters: $1 (required) - The file name. # Description: Answer file extension without dot prefix.
# Parameters: $1 (required): Path.
get_extension() { get_extension() {
local name=$(get_basename "$1") local name=""
local extension="${1##*.}" # Excludes dot. local extension="${1##*.}"
name=$(get_basename "$1")
if [[ "$name" == "$extension" ]]; then if [[ "$name" == "$extension" ]]; then
printf '' printf ''
else else
printf "$extension" printf "%s" "$extension"
fi fi
} }
export -f get_extension export -f get_extension
# Answers Homebrew root path. # Label: Get Homebrew Root
# Parameters: None. # Description: Answer Homebrew root path.
get_homebrew_root() { get_homebrew_root() {
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
printf "%s" "/opt/homebrew" printf "%s" "/opt/homebrew"
@@ -53,8 +57,8 @@ get_homebrew_root() {
} }
export -f get_homebrew_root export -f get_homebrew_root
# Answers Homebrew binary root path. # Label: Get Homebrew Bin Root
# Parameters: None. # Description: Answer Homebrew binary root path.
get_homebrew_bin_root() { get_homebrew_bin_root() {
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
printf "%s" "/opt/homebrew/bin" printf "%s" "/opt/homebrew/bin"
@@ -64,17 +68,22 @@ get_homebrew_bin_root() {
} }
export -f get_homebrew_bin_root export -f get_homebrew_bin_root
# Answers the full install path (including file name) for file name. # Label: Get Install Path
# Parameters: $1 (required) - The file name. # Description: Answer full install path (including file name).
# Parameters: $1 (required): Path.
get_install_path() { get_install_path() {
local file_name="$1" local file_name="$1"
local install_path=$(get_install_root "$file_name") local install_path=""
printf "$install_path/$file_name"
install_path=$(get_install_root "$file_name")
printf "%s" "$install_path/$file_name"
} }
export -f get_install_path export -f get_install_path
# Answers the root install path for file name. # Label: Get Install Root
# Parameters: $1 (required) - The file name. # Description: Answer root install path.
# Parameters: $1 (required): Path.
get_install_root() { get_install_root() {
local file_name="$1" local file_name="$1"
@@ -93,19 +102,19 @@ get_install_root() {
} }
export -f get_install_root export -f get_install_root
# Checks Mac App Store (mas) CLI has been installed and exits if otherwise. # Label: Check Mac App Store Install
# Parameters: None. # Description: Check Mac App Store (mas) CLI has been installed.
check_mas_install() { check_mas_install() {
if ! command -v mas > /dev/null; then if ! command -v mas > /dev/null; then
printf "%s\n" "ERROR: Mac App Store (mas) CLI can't be found." printf "%s\n" "ERROR: Mac App Store (mas) CLI can't be found."
printf "%s\n" " Please ensure Homebrew and mas (i.e. brew install mas) have been installed." printf "%s\n" " Please ensure mas (i.e. brew install mas) is installed."
exit 1 exit 1
fi fi
} }
export -f check_mas_install export -f check_mas_install
# Configures shell for new machines and ensures PATH is properly configured for running scripts. # Label: Configure Environment
# Parameters: None. # Description: Configure shell and ensure PATH is properly configured.
configure_environment() { configure_environment() {
if [[ ! -s "$HOME/.bash_profile" ]]; then if [[ ! -s "$HOME/.bash_profile" ]]; then
printf "%s\n" "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" > "$HOME/.bash_profile" printf "%s\n" "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" > "$HOME/.bash_profile"

View File

@@ -2,57 +2,65 @@
# Defines verification/validation functions. # Defines verification/validation functions.
# Checks for missing App Store applications. # Label: Verify App Store Applications
# Description: Check for missing App Store applications.
verify_app_store_applications() { verify_app_store_applications() {
printf "\nChecking App Store applications...\n" local applications=""
local applications="$(mas list)" printf "\n%s\n" "Checking App Store applications..."
applications="$(mas list)"
while read line; do while read line; do
if [[ "$line" == "mas install"* ]]; then if [[ "$line" == "mas install"* ]]; then
local application=$(printf "$line" | awk '{print $3}') application=$(printf "$line" | awk '{print $3}')
verify_listed_application "$application" "${applications[*]}" verify_listed_application "$application" "${applications[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_app_store" done < "$MAC_OS_CONFIG_PATH/bin/install_app_store"
printf "App Store check complete.\n" printf "%s\n" "App Store check complete."
} }
export -f verify_app_store_applications export -f verify_app_store_applications
# Verifies application exists. # Label: Verify Application
# Parameters: $1 (required) - The file name. # Description: Verify application exists.
# Parameters: $1 (required): File name.
verify_application() { verify_application() {
local file_name="$1" local file_name="$1"
local install_path=$(get_install_path "$file_name")
if [[ ! -e "$install_path" ]]; then if [[ ! -e "$(get_install_path "$file_name")" ]]; then
printf " - Missing: $file_name\n" printf "%s\n" " - Missing: $file_name"
fi fi
} }
export -f verify_application export -f verify_application
# Checks for missing applications suffixed by "APP_NAME" as defined in settings.sh. # Label: Verify Applications
# Description: Check for missing applications suffixed by "APP_NAME" as defined in settings.
verify_applications() { verify_applications() {
printf "\nChecking application software...\n" local file_names=""
printf "\n%s\n" "Checking application software..."
# Only use environment keys that end with "APP_NAME". # Only use environment keys that end with "APP_NAME".
local file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME") file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME")
# For each application name, check to see if the application is installed. Otherwise, skip. # For each application name, check to see if the application is installed. Otherwise, skip.
for name in $file_names; do for name in $file_names; do
verify_application "${!name}" verify_application "${!name}"
done done
printf "Application software check complete.\n" printf "%s\n" "Application software check complete."
} }
export -f verify_applications export -f verify_applications
# Checks for missing extensions suffixed by "EXTENSION_PATH" as defined in settings.sh. # Label: Verify Extensions
# Description: Check for missing extensions suffixed by "EXTENSION_PATH" as defined in settings.
verify_extensions() { verify_extensions() {
printf "\nChecking application extensions...\n" local extensions=""
printf "\n%s\n" "Checking application extensions..."
# Only use environment keys that end with "EXTENSION_PATH". # Only use environment keys that end with "EXTENSION_PATH".
local extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH") extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH")
# For each extension, check to see if the extension is installed. Otherwise, skip. # For each extension, check to see if the extension is installed. Otherwise, skip.
for extension in $extensions; do for extension in $extensions; do
@@ -60,36 +68,42 @@ verify_extensions() {
verify_path "${!extension}" verify_path "${!extension}"
done done
printf "Application extension check complete.\n" printf "%s\n" "Application extension check complete."
} }
export -f verify_extensions export -f verify_extensions
# Checks for missing Homebrew casks. # Label: Verify Homebrew Casks
# Description: Check for missing Homebrew casks.
verify_homebrew_casks() { verify_homebrew_casks() {
local applications=""
printf "\nChecking Homebrew casks...\n" printf "\nChecking Homebrew casks...\n"
local applications="$(brew list --casks)" applications="$(brew list --casks)"
while read line; do while read line; do
if [[ "$line" == "brew cask install"* ]]; then if [[ "$line" == "brew cask install"* ]]; then
local application=$(printf "$line" | awk '{print $4}') application=$(printf "%s" "$line" | awk '{print $4}')
verify_listed_application "$application" "${applications[*]}" verify_listed_application "$application" "${applications[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks" done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
printf "Homebrew cask check complete.\n" printf "%s\n" "Homebrew cask check complete."
} }
export -f verify_homebrew_casks export -f verify_homebrew_casks
# Checks for missing Homebrew formulas. # Label: Verify Homebrew Formulas
# Description: Check for missing Homebrew formulas.
verify_homebrew_formulas() { verify_homebrew_formulas() {
local applications=""
printf "Checking Homebrew formulas...\n" printf "Checking Homebrew formulas...\n"
local applications="$(brew list --formulae)" applications="$(brew list --formulae)"
while read line; do while read line; do
if [[ "$line" == "brew install"* ]]; then if [[ "$line" == "brew install"* ]]; then
local application=$(printf "$line" | awk '{print $3}') application=$(printf "%s" "$line" | awk '{print $3}')
# Exception: "gpg" is the binary but is listed as "gnugp". # Exception: "gpg" is the binary but is listed as "gnugp".
if [[ "$application" == "gpg" ]]; then if [[ "$application" == "gpg" ]]; then
@@ -100,80 +114,89 @@ verify_homebrew_formulas() {
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas" done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
printf "Homebrew formula check complete.\n" printf "%s\n" "Homebrew formula check complete."
} }
export -f verify_homebrew_formulas export -f verify_homebrew_formulas
# Verifies listed application exists. # Label: Verify Listed Application
# Parameters: $1 (required) - The current application, $2 (required) - The application list. # Description: Verify listed application exists.
# Parameters: $1 (required): Current application, $2 (required): Application list.
verify_listed_application() { verify_listed_application() {
local application="$1" local application="$1"
local applications="$2" local applications="$2"
if [[ "${applications[*]}" != *"$application"* ]]; then if [[ "${applications[*]}" != *"$application"* ]]; then
printf " - Missing: $application\n" printf "%s\n" " - Missing: $application"
fi fi
} }
export -f verify_listed_application export -f verify_listed_application
# Verifies path exists. # Label: Verify Path
# Parameters: $1 (required) - The path. # Description: Verify path exists.
# Parameters: $1 (required): Path.
verify_path() { verify_path() {
local path="$1" local path="$1"
if [[ ! -e "$path" ]]; then if [[ ! -e "$path" ]]; then
printf " - Missing: $path\n" printf "%s\n" " - Missing: $path"
fi fi
} }
export -f verify_path export -f verify_path
# Checks for missing Node packages. # Label: Verify Node Packages
# Description: Check for missing Node packages.
verify_node_packages() { verify_node_packages() {
printf "\nChecking Node packages...\n" printf "\n%s\n" "Checking Node packages..."
while read line; do while read line; do
if [[ "$line" == "npm "* ]]; then if [[ "$line" == "npm "* ]]; then
local package=$(printf "$line" | awk '{print $4}') package=$(printf "$line" | awk '{print $4}')
local packages=($(npm list --global --depth=0 | grep "$package")) packages=($(npm list --global --depth=0 | grep "$package"))
verify_listed_application "$package" "${packages[*]}" verify_listed_application "$package" "${packages[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_node_packages" done < "$MAC_OS_CONFIG_PATH/bin/install_node_packages"
printf "Node packages check complete.\n" printf "%s\n" "Node packages check complete."
} }
export -f verify_node_packages export -f verify_node_packages
# Checks for missing Ruby gems. # Label: Verify Ruby Gems
# Description: Check for missing Ruby gems.
verify_ruby_gems() { verify_ruby_gems() {
local gems="$(gem list --no-versions)" local gems=""
printf "\nChecking Ruby gems...\n" printf "\n%s\n" "Checking Ruby gems..."
gems="$(gem list --no-versions)"
while read line; do while read line; do
if [[ "$line" == "gem install"* ]]; then if [[ "$line" == "gem install"* ]]; then
local gem=$(printf "$line" | awk '{print $3}') gem=$(printf "%s" "$line" | awk '{print $3}')
verify_listed_application "$gem" "${gems[*]}" verify_listed_application "$gem" "${gems[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_ruby_gems" done < "$MAC_OS_CONFIG_PATH/bin/install_ruby_gems"
printf "Ruby gems check complete.\n" printf "%s\n" "Ruby gems check complete."
} }
export -f verify_ruby_gems export -f verify_ruby_gems
# Checks for missing Rust crates. # Label: Verify Rust Crates
# Description: Check for missing Rust crates.
verify_rust_crates() { verify_rust_crates() {
printf "\nChecking Rust crates...\n" local crates=""
local crates="$(ls -A1 $HOME/.cargo/bin)" printf "\n%s\n" "Checking Rust crates..."
crates="$(ls -A1 $HOME/.cargo/bin)"
while read line; do while read line; do
if [[ "$line" == "cargo install"* ]]; then if [[ "$line" == "cargo install"* ]]; then
local crate=$(printf "$line" | awk '{print $3}') crate=$(printf "%s" "$line" | awk '{print $3}')
verify_listed_application "$crate" "${crates[*]}" verify_listed_application "$crate" "${crates[*]}"
fi fi
done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates" done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates"
printf "Rust crates check complete.\n" printf "%s\n" "Rust crates check complete."
} }
export -f verify_rust_crates export -f verify_rust_crates