Compare commits

...

42 Commits

Author SHA1 Message Date
Brooke Kuhlmann
ecd5ed49a4 Added version release notes 2024-09-03 07:20:29 -06:00
Brooke Kuhlmann
d9df365afb Updated to Ruby 3.3.5
See link:https://www.ruby-lang.org/en/news/2024/09/03/3-3-5-released[details].

Milestone: patch
2024-09-03 07:19:38 -06:00
Brooke Kuhlmann
b176823378 Added README Developer Certificate of Origin documentation
Necessary to document what is expected of contributions in terms of legalities, licensing, and attribution.

Milestone: patch
2024-08-18 15:34:17 -06:00
Brooke Kuhlmann
5f7bd0d925 Added version release notes 2024-08-17 15:14:43 -06:00
Brooke Kuhlmann
6f7e47cdeb Updated to Ruby 3.3.4
See link:https://www.ruby-lang.org/en/news/2024/07/09/ruby-3-3-4-released/[details].

Milestone: patch
2024-07-09 07:21:26 -06:00
Brooke Kuhlmann
4bb16b5b7c Added version release notes 2024-07-08 17:24:00 -06:00
Brooke Kuhlmann
95297426aa Updated to Git Lint 8.0.0
See link:https://alchemists.io/projects/git-lint/versions[details]. Even though this is a major upgrade, I'm marking this as a _patch_ because none of the Git Lint changes effect this project.

Milestone: patch
2024-07-06 15:08:03 -06:00
Brooke Kuhlmann
494bd26be9 Updated to Ruby 3.3.3
See link:https://www.ruby-lang.org/en/news/2024/06/12/ruby-3-3-3-released[details].

Milestone: patch
2024-06-12 07:09:06 -06:00
Brooke Kuhlmann
c85015f116 Updated to Caliber 0.58.0
See link:https://alchemists.io/projects/caliber/versions[details].

Milestone: minor
2024-06-11 13:09:13 -06:00
Brooke Kuhlmann
31a3d3be86 Added version release notes 2024-06-01 11:07:13 -06:00
Brooke Kuhlmann
f76086bbf0 Updated to Ruby 3.3.2
See link:https://www.ruby-lang.org/en/news/2024/05/30/ruby-3-3-2-released/[details].

Milestone: patch
2024-05-30 07:52:04 -06:00
Brooke Kuhlmann
f4f803296e Updated citation URLs
Necessary to add the home page URL via the `url` key and update the `repository-code` key sto point to the source code repository. link:https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md#url[Details].

Milestone: patch
2024-05-27 17:00:01 -06:00
Brooke Kuhlmann
f393d8181f Added version release notes 2024-05-02 13:30:36 -06:00
Brooke Kuhlmann
a7b479f716 Updated to Ruby 3.3.1
See link:https://www.ruby-lang.org/en/news/2024/04/23/ruby-3-3-1-released[details].

Milestone: patch
2024-04-23 06:55:56 -06:00
Brooke Kuhlmann
4f37a67353 Added version release notes 2024-04-21 09:57:48 -06:00
Brooke Kuhlmann
0c5e66b605 Updated to Git Lint 7.3.0
See link:https://alchemists.io/projects/git-lint/versions[details].

Milestone: minor
2024-04-21 09:09:06 -06:00
Brooke Kuhlmann
fd112d373e Updated to Rake 13.2.0
See link:https://github.com/ruby/rake/releases/tag/v13.2.0[details].

Milestone: minor
2024-04-21 09:02:33 -06:00
Brooke Kuhlmann
1da7437342 Updated to Git Lint 7.1.0
See link:https://alchemists.io/projects/git-lint/versions[details].

Milestone: minor
2024-03-03 10:08:17 -07:00
Brooke Kuhlmann
91df57a36b Updated to Caliber 0.51.0
See link:https://alchemists.io/projects/caliber/versions[version release notes].

Milestone: patch
2024-03-02 10:38:55 -07:00
Brooke Kuhlmann
982663a9ee Updated RuboCop to use XDG local configuration
Necessary to leverage the new XDG local configuration support added in Version 1.61.0.

Milestone: patch
2024-03-02 10:25:17 -07:00
Brooke Kuhlmann
dd8d7f7de5 Added version release notes 2024-02-25 09:19:36 -07:00
Brooke Kuhlmann
76b193dede Refactored bin script printing
Necessary to have consistent use of `printf` especially with formatting strings and new lines.

Milestone: patch
2024-02-25 08:41:48 -07:00
Brooke Kuhlmann
75d2c93e89 Refactored library functions
Minor cleanup to documentation, syntax, and consistency in general.

Milestone: patch
2024-02-25 08:41:40 -07:00
Brooke Kuhlmann
b4faa2e919 Updated to Caliber 0.50.0
See link:https://alchemists.io/projects/caliber/versions[release notes] for details.

Milestone: minor
2024-01-28 07:23:54 -07:00
Brooke Kuhlmann
920b111ef4 Fixed version release notes
Forgot to publish on the first when these updates were first made so am fixing this now with dates updated accordingly.

Milestone: patch
2024-01-06 12:24:03 -07:00
Brooke Kuhlmann
6553f9be6d Added version release notes 2024-01-01 14:09:49 -07:00
Brooke Kuhlmann
24fe1edefd Updated gem dependencies
Necessary to update all dependencies to latest versions now that we are using Ruby 3.3.0. Details:

* link:https://alchemists.io/projects/caliber[Caliber].
* link:https://github.com/ruby/debug[Debug].
* link:https://alchemists.io/projects/git-lint[Git Lint]: Temporarily disabled until next major release.

Milestone: major
2024-01-01 14:08:37 -07:00
Brooke Kuhlmann
9933eee1cd Updated to Ruby 3.3.0
Details [here](https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released).

Milestone: major
2023-12-27 16:46:39 -07:00
Brooke Kuhlmann
4fa7380216 Updated Circle CI step names
Necessary to be consistent with link:https://alchemists.io/projects/rubysmith[Rubysmith].

Milestone: patch
2023-12-27 16:46:39 -07:00
Brooke Kuhlmann
179b4f05a3 Added Rakefile quality task
Necessary to be consistent with other projects so it is always possible to run code quality checks.

Milestone: minor
2023-11-24 13:47:31 -07:00
Brooke Kuhlmann
91acff4756 Updated to Caliber 0.42.0
Necessary to update to recent code quality changes. link:https://alchemists.io/projects/caliber/versions[Details].

Milestone: patch
2023-10-15 11:40:21 -06:00
Brooke Kuhlmann
b0b4d51e2c Refactored Gemfile to use ruby file syntax
Necessary to leverage syntax first provided in Bundler 2.4.19 and reduce the need for a custom implementation.

Milestone: patch
2023-10-09 17:34:35 -06:00
Brooke Kuhlmann
c17a132408 Updated GitHub issue template with simplified sections
Necessary to simplify and streamline the process.
2023-09-30 18:58:31 -06:00
Brooke Kuhlmann
33fe1c7003 Added version release notes 2023-09-28 19:49:27 -06:00
Brooke Kuhlmann
605b1e4c3f Updated to macOS Sonoma
Necessary to install and make use of the latest Apple Operating System.

Milestone: major
2023-09-28 19:42:25 -06:00
Brooke Kuhlmann
2170941383 Added Debug gem
Necessary for debugging purposes but also for running global health scripts across all projects (including this one).
2023-06-22 09:49:02 -06:00
Brooke Kuhlmann
63ef52185b Added version release notes 2023-06-19 16:59:56 -06:00
Brooke Kuhlmann
74da03bc07 Updated to Caliber 0.35.0
[Caliber](https://alchemists.io/projects/caliber/versions).
2023-06-16 14:58:38 -06:00
Brooke Kuhlmann
ada1b73c13 Updated to Git Lint 6.0.0
[Details](https://alchemists.io/projects/git-lint/versions).
2023-06-16 13:06:42 -06:00
Brooke Kuhlmann
d196d18641 Updated to Refinements 11.0.0
[Details](https://alchemists.io/projects/refinements/versions).
2023-06-13 10:00:14 -06:00
Brooke Kuhlmann
a360bf535a Added version release notes 2023-05-18 08:22:37 -05:00
Brooke Kuhlmann
f5c6b6d40e Updated to Caliber 0.30.0
[Details](https://alchemists.io/projects/caliber/versions).
2023-04-12 06:40:26 -06:00
29 changed files with 392 additions and 251 deletions

View File

@@ -8,24 +8,24 @@ jobs:
- checkout
- restore_cache:
name: Bundler Restore
name: Gems Restore
keys:
- gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
- gem-cache-
- run:
name: Bundler Install
name: Gems Install
command: |
gem update --system
bundle config set path "vendor/bundle"
bundle install
- save_cache:
name: Bundler Store
name: Gems Store
key: gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
paths:
- vendor/bundle
- run:
name: Build
name: Rake
command: bundle exec rake

View File

@@ -1,11 +1,8 @@
## Overview
<!-- Required. Describe, briefly, the behavior experienced and desired. -->
## Why
<!-- Required. Describe, briefly, why this issue is important. -->
## Screenshots/Screencasts
<!-- Optional. Attach screenshot(s) and/or screencast(s) that demo the behavior. -->
## How
<!-- Optional. List exact steps (numbered) to implement or reproduce behavior. Screen shots/casts are welcome. -->
## Steps to Recreate
<!-- Required. List exact steps (numbered list) to reproduce errant behavior. -->
## Environment
<!-- Required. What is your operating system, software version(s), etc. -->
## Notes
<!-- Optional. Provide additional details (i.e operating system, software version(s), stack dump, etc.) -->

View File

@@ -1 +1 @@
3.2.2
3.3.5

View File

@@ -1,10 +1,10 @@
cff-version: 1.2.0
message: Please use the following metadata when citing this project in your work.
title: macOS
abstract: Provides a shell based framework for automating the setup of a macOS machine.
version: 16.0.2
abstract: Shell scripts for automated macOS machine setup.
version: 18.3.2
license: Hippocratic-2.1
date-released: 2023-04-02
date-released: 2024-09-03
authors:
- family-names: Kuhlmann
given-names: Brooke
@@ -17,5 +17,6 @@ keywords:
- automation
- setup
- recovery
repository-code: https://alchemists.io/projects/mac_os
repository-code: https://github.com/bkuhlmann/mac_os
repository-artifact: https://alchemists.io/projects/mac_os
url: https://alchemists.io/projects/mac_os

View File

@@ -1,9 +1,10 @@
# frozen_string_literal: true
ruby File.read(".ruby-version").strip
ruby file: ".ruby-version"
source "https://rubygems.org"
gem "caliber", "~> 0.25"
gem "git-lint", "~> 5.0"
gem "rake", "~> 13.0"
gem "caliber", "~> 0.58"
gem "debug", "~> 1.9"
gem "git-lint", "~> 8.0"
gem "rake", "~> 13.2"

View File

@@ -38,14 +38,9 @@ toc::[]
* Configures installed software.
* Supports restoration of machine backups.
== Screencast
[link=https://alchemists.io/screencasts/mac_os]
image::https://alchemists.io/images/screencasts/mac_os/cover.svg[Screencast,600,240,role=focal_point]
== Requirements
. link:https://www.apple.com/macos/ventura[macOS Ventura]
. link:https://www.apple.com/macos/sonoma[macOS Sonoma]
. link:https://developer.apple.com/xcode[Xcode]
== Setup
@@ -56,7 +51,7 @@ To install, run:
----
git clone https://github.com/bkuhlmann/mac_os.git
cd mac_os
git checkout 16.0.2
git checkout 18.3.2
----
== Usage
@@ -224,6 +219,8 @@ cd mac_os
== link:https://alchemists.io/policies/contributions[Contributions]
== link:https://alchemists.io/policies/developer_certificate_of_origin[Developer Certificate of Origin]
== link:https://alchemists.io/projects/mac_os/versions[Versions]
== link:https://alchemists.io/community[Community]

View File

@@ -6,4 +6,7 @@ require "rubocop/rake_task"
Git::Lint::Rake::Register.call
RuboCop::RakeTask.new
task default: %i[git_lint rubocop]
desc "Run code quality checks"
task quality: %i[git_lint rubocop]
task default: :quality

View File

@@ -1,5 +1,68 @@
= Versions
== 18.3.2 (2024-09-03)
* 🟢 Added README Developer Certificate of Origin documentation - Brooke Kuhlmann
* 🔼 Updated to Ruby 3.3.5 - Brooke Kuhlmann
== 18.3.1 (2024-08-17)
* 🔼 Updated to Ruby 3.3.4 - Brooke Kuhlmann
== 18.3.0 (2024-07-08)
* 🔼 Updated to Caliber 0.58.0 - Brooke Kuhlmann
* 🔼 Updated to Git Lint 8.0.0 - Brooke Kuhlmann
* 🔼 Updated to Ruby 3.3.3 - Brooke Kuhlmann
== 18.2.2 (2024-06-01)
* 🔼 Updated citation URLs - Brooke Kuhlmann
* 🔼 Updated to Ruby 3.3.2 - Brooke Kuhlmann
== 18.2.1 (2024-05-02)
* 🔼 Updated to Ruby 3.3.1 - Brooke Kuhlmann
== 18.2.0 (2024-04-21)
* 🔼 Updated RuboCop to use XDG local configuration - Brooke Kuhlmann
* 🔼 Updated to Caliber 0.51.0 - Brooke Kuhlmann
* 🔼 Updated to Git Lint 7.1.0 - Brooke Kuhlmann
* 🔼 Updated to Git Lint 7.3.0 - Brooke Kuhlmann
* 🔼 Updated to Rake 13.2.0 - Brooke Kuhlmann
== 18.1.0 (2024-02-25)
* 🔼 Updated to Caliber 0.50.0 - Brooke Kuhlmann
* 🔁 Refactored bin script printing - Brooke Kuhlmann
* 🔁 Refactored library functions - Brooke Kuhlmann
== 18.0.0 (2024-01-06)
* Added Rakefile quality task - Brooke Kuhlmann
* Updated Circle CI step names - Brooke Kuhlmann
* Updated GitHub issue template with simplified sections - Brooke Kuhlmann
* Updated gem dependencies - Brooke Kuhlmann
* Updated to Caliber 0.42.0 - Brooke Kuhlmann
* Updated to Ruby 3.3.0 - Brooke Kuhlmann
* Refactored Gemfile to use ruby file syntax - Brooke Kuhlmann
== 17.0.0 (2023-09-28)
* Added Debug gem - Brooke Kuhlmann
* Updated to macOS Sonoma - Brooke Kuhlmann
== 16.0.4 (2023-06-19)
* Updated to Caliber 0.35.0 - Brooke Kuhlmann
* Updated to Git Lint 6.0.0 - Brooke Kuhlmann
* Updated to Refinements 11.0.0 - Brooke Kuhlmann
== 16.0.3 (2023-05-18)
* Updated to Caliber 0.30.0 - Brooke Kuhlmann
== 16.0.2 (2023-04-02)
* Fixed programs without extensions to install to user directory - Brooke Kuhlmann

View File

@@ -2,33 +2,33 @@
# Creates macOS boot disk.
printf "macOS Boot Disk Tips\n"
printf " - Use a USB drive (8GB or higher).\n"
printf " - Use Disk Utility to format the USB drive as \"APSF\".\n"
printf " - Use Disk Utility to label the USB drive as \"Untitled\".\n"
printf "\nmacOS Boot Disk Usage:\n"
printf " 1. Insert the USB boot disk into the machine to be upgraded.\n"
printf " 2. Reboot the machine.\n"
printf " 3. Press and hold the POWER key before the Apple logo appears.\n"
printf " 4. Select the USB boot disk from the menu.\n"
printf " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.\n"
printf " 6. Use Disk Utility to create a single \"APFS\" drive.\n"
printf " 7. Install the new operating system.\n"
printf "\nmacOS Boot Disk Recovery:\n"
printf " 1. Start/restart the machine.\n"
printf " 2. Press and hold the POWER key before the Apple logo appears.\n"
printf " 3. Wait for the macOS installer to load from the recovery partition.\n"
printf " 4. Use the dialog options to launch Disk Utility, reinstall the system, etc.\n"
printf "%s\n" "macOS Boot Disk Tips"
printf "%s\n" " - Use a USB drive (8GB or higher)."
printf "%s\n" " - Use Disk Utility to format the USB drive as \"APSF\"."
printf "%s\n" " - Use Disk Utility to label the USB drive as \"Untitled\"."
printf "\n%s\n" "macOS Boot Disk Usage:"
printf "%s\n" " 1. Insert the USB boot disk into the machine to be upgraded."
printf "%s\n" " 2. Reboot the machine."
printf "%s\n" " 3. Press and hold the POWER key before the Apple logssssso appears."
printf "%s\n" " 4. Select the USB boot disk from the menu."
printf "%s\n" " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions."
printf "%s\n" " 6. Use Disk Utility to create a single \"APFS\" drive."
printf "%s\n" " 7. Install the new operating system."
printf "\n%s\n" "macOS Boot Disk Recovery:"
printf "%s\n" " 1. Start/restart the machine."
printf "%s\n" " 2. Press and hold the POWER key before the Apple logo appears."
printf "%s\n" " 3. Wait for the macOS installer to load from the recovery partition."
printf "%s\n" " 4. Use the dialog options to launch Disk Utility, reinstall the system, etc."
printf "\nCreating macOS boot disk...\n"
printf "\n%s\n" "Creating macOS boot disk..."
if [[ ! -e "$MAC_OS_BOOT_DISK_CREATOR" ]]; then
printf "ERROR: macOS installer does not exist: $MAC_OS_BOOT_DISK_CREATOR. Use System Preferences → Software Update to download.\n"
printf "%s\n" "ERROR: macOS installer does not exist: $MAC_OS_BOOT_DISK_CREATOR. Use System Preferences → Software Update to download."
exit 1
fi
if [[ ! -d "$MAC_OS_BOOT_DISK_PATH" ]]; then
printf "ERROR: Boot disk must be mounted at: $MAC_OS_BOOT_DISK_PATH.\n"
printf "%s\n" "ERROR: Boot disk must be mounted at: $MAC_OS_BOOT_DISK_PATH."
exit 1
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
check_mas_install
"$SCRIPT_PATH"
else
printf "WARNING: App Store install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: App Store install script does not exist or is not executable."
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_applications"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Applications install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Applications install script does not exist or is not executable."
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_basics"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Basic settings script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Basic settings script does not exist or is not executable."
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_defaults"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Default settings script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Default settings script does not exist or is not executable."
fi

View File

@@ -1,14 +1,14 @@
#! /usr/bin/env bash
Installs development tooling requirements.
# Installs development tooling requirements.
printf "Installing Xcode CLI tools...\n"
printf "%s\n" "Installing Xcode CLI tools..."
xcode-select --install
printf "%s\n" "💡 ALT+TAB to view and accept Xcode license window."
read -p "Have you completed the Xcode CLI tools install (y/n)? " xcode_response
if [[ "$xcode_response" != "y" ]]; then
printf "ERROR: Xcode CLI tools must be installed before proceeding.\n"
printf "%s\n" "ERROR: Xcode CLI tools must be installed before proceeding."
exit 1
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_extensions"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Application extensions install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Application extensions install script does not exist or is not executable."
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
install_homebrew
"$SCRIPT_PATH"
else
printf "WARNING: Homebrew Casks install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Homebrew Casks install script does not exist or is not executable."
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
install_homebrew
"$SCRIPT_PATH"
else
printf "WARNING: Homebrew Formulas install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Homebrew Formulas install script does not exist or is not executable."
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
install_node
"$SCRIPT_PATH"
else
printf "WARNING: Node packages install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Node packages install script does not exist or is not executable."
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
install_ruby
"$SCRIPT_PATH"
else
printf "WARNING: Ruby gems install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Ruby gems install script does not exist or is not executable."
fi

View File

@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
install_rust
"$SCRIPT_PATH"
else
printf "WARNING: Rust crates install script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Rust crates install script does not exist or is not executable."
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_shell"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Shell script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Shell script does not exist or is not executable."
fi

View File

@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/restore_backup"
if [[ -x "$SCRIPT_PATH" ]]; then
"$SCRIPT_PATH"
else
printf "WARNING: Restore backup script does not exist or is not executable.\n"
printf "%s\n" "WARNING: Restore backup script does not exist or is not executable."
fi

70
bin/run
View File

@@ -11,13 +11,13 @@ source lib/verifiers.sh
if [[ -e "$MAC_OS_CONFIG_PATH" ]]; then
source "$MAC_OS_CONFIG_PATH/lib/settings.sh"
else
printf "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH.\n\n"
printf "Please check the following before continuing:\n"
printf " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config.\n"
printf " • Customize as necessary for your setup or fork the project and make your own configuration.\n"
printf " • When finished, your folder structure should look like this:\n"
printf " • <root path>/mac_os:\n"
printf " • <root path>/mac_os-config:\n"
printf "%s\n\n" "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH."
printf "%s\n" "Please check the following before continuing:"
printf "%s\n" " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config."
printf "%s\n" " • Customize as necessary for your setup or fork the project and make your own configuration."
printf "%s\n" " • When finished, your folder structure should look like this:"
printf "%s\n" " • <root path>/mac_os:"
printf "%s\n" " • <root path>/mac_os-config:"
exit 1
fi
@@ -25,37 +25,37 @@ configure_environment
while true; do
if [[ $# == 0 ]]; then
printf "\nUsage: run OPTION\n"
printf "\nOSX Options:\n"
printf " Boot:\n"
printf " B: Create boot disk.\n"
printf " Install:\n"
printf " b: Install basics.\n"
printf " t: Install development tools.\n"
printf " hf: Install Homebrew Formulas.\n"
printf " hc: Install Homebrew Casks.\n"
printf " m: Install Mac App Store software.\n"
printf " a: Install application software.\n"
printf " x: Install application software extensions.\n"
printf " d: Install defaults.\n"
printf " s: Install shell.\n"
printf " r: Restore backups.\n"
printf " i: Install all (i.e. executes all of the above steps in order listed).\n"
printf " Libraries:\n"
printf " np: Install Node packages.\n"
printf " rg: Install Ruby gems.\n"
printf " rc: Install Rust crates.\n"
printf " l: Install libraries (i.e. executes all of the above steps in order listed).\n"
printf " Manage:\n"
printf " c: Check status of managed software.\n"
printf " C: Caffeinate machine.\n"
printf " w: Clean work (temp) directory.\n"
printf " q: Quit/Exit.\n\n"
printf "\n%s\n" "Usage: run OPTION"
printf "\n%s\n" "OSX Options:"
printf "%s\n" " Boot:"
printf "%s\n" " B: Create boot disk."
printf "%s\n" " Install:"
printf "%s\n" " b: Install basics."
printf "%s\n" " t: Install development tools."
printf "%s\n" " hf: Install Homebrew Formulas."
printf "%s\n" " hc: Install Homebrew Casks."
printf "%s\n" " m: Install Mac App Store software."
printf "%s\n" " a: Install application software."
printf "%s\n" " x: Install application software extensions."
printf "%s\n" " d: Install defaults."
printf "%s\n" " s: Install shell."
printf "%s\n" " r: Restore backups."
printf "%s\n" " i: Install all (i.e. executes all of the above steps in order listed)."
printf "%s\n" " Libraries:"
printf "%s\n" " np: Install Node packages."
printf "%s\n" " rg: Install Ruby gems."
printf "%s\n" " rc: Install Rust crates."
printf "%s\n" " l: Install libraries (i.e. executes all of the above steps in order listed)."
printf "%s\n" " Manage:"
printf "%s\n" " c: Check status of managed software."
printf "%s\n" " C: Caffeinate machine."
printf "%s\n" " w: Clean work (temp) directory."
printf "%s\n\n" " q: Quit/Exit."
read -p "Enter selection: " response
printf "\n"
process_option $response
process_option "$response"
else
process_option $1
process_option "$1"
fi
break

View File

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

View File

@@ -2,8 +2,10 @@
# 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() {
case $1 in
'B')

View File

@@ -5,7 +5,7 @@ set -o errexit
set -o pipefail
IFS=$'\n\t'
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Ventura.app/Contents/Resources/createinstallmedia"
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Sonoma.app/Contents/Resources/createinstallmedia"
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
export MAC_OS_WORK_PATH=/tmp/downloads
export MAC_OS_CONFIG_PATH="../mac_os-config"

View File

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

View File

@@ -2,57 +2,65 @@
# 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() {
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
if [[ "$line" == "mas install"* ]]; then
local application=$(printf "$line" | awk '{print $3}')
application=$(printf "$line" | awk '{print $3}')
verify_listed_application "$application" "${applications[*]}"
fi
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
# Verifies application exists.
# Parameters: $1 (required) - The file name.
# Label: Verify Application
# Description: Verify application exists.
# Parameters: $1 (required): File name.
verify_application() {
local file_name="$1"
local install_path=$(get_install_path "$file_name")
if [[ ! -e "$install_path" ]]; then
printf " - Missing: $file_name\n"
if [[ ! -e "$(get_install_path "$file_name")" ]]; then
printf "%s\n" " - Missing: $file_name"
fi
}
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() {
printf "\nChecking application software...\n"
local file_names=""
printf "\n%s\n" "Checking application software..."
# 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 name in $file_names; do
verify_application "${!name}"
done
printf "Application software check complete.\n"
printf "%s\n" "Application software check complete."
}
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() {
printf "\nChecking application extensions...\n"
local extensions=""
printf "\n%s\n" "Checking application extensions..."
# 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 extension in $extensions; do
@@ -60,36 +68,42 @@ verify_extensions() {
verify_path "${!extension}"
done
printf "Application extension check complete.\n"
printf "%s\n" "Application extension check complete."
}
export -f verify_extensions
# Checks for missing Homebrew casks.
# Label: Verify Homebrew Casks
# Description: Check for missing Homebrew casks.
verify_homebrew_casks() {
local applications=""
printf "\nChecking Homebrew casks...\n"
local applications="$(brew list --casks)"
applications="$(brew list --casks)"
while read line; do
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[*]}"
fi
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
# Checks for missing Homebrew formulas.
# Label: Verify Homebrew Formulas
# Description: Check for missing Homebrew formulas.
verify_homebrew_formulas() {
local applications=""
printf "Checking Homebrew formulas...\n"
local applications="$(brew list --formulae)"
applications="$(brew list --formulae)"
while read line; do
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".
if [[ "$application" == "gpg" ]]; then
@@ -100,80 +114,89 @@ verify_homebrew_formulas() {
fi
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
# Verifies listed application exists.
# Parameters: $1 (required) - The current application, $2 (required) - The application list.
# Label: Verify Listed Application
# Description: Verify listed application exists.
# Parameters: $1 (required): Current application, $2 (required): Application list.
verify_listed_application() {
local application="$1"
local applications="$2"
if [[ "${applications[*]}" != *"$application"* ]]; then
printf " - Missing: $application\n"
printf "%s\n" " - Missing: $application"
fi
}
export -f verify_listed_application
# Verifies path exists.
# Parameters: $1 (required) - The path.
# Label: Verify Path
# Description: Verify path exists.
# Parameters: $1 (required): Path.
verify_path() {
local path="$1"
if [[ ! -e "$path" ]]; then
printf " - Missing: $path\n"
printf "%s\n" " - Missing: $path"
fi
}
export -f verify_path
# Checks for missing Node packages.
# Label: Verify Node Packages
# Description: Check for missing Node packages.
verify_node_packages() {
printf "\nChecking Node packages...\n"
printf "\n%s\n" "Checking Node packages..."
while read line; do
if [[ "$line" == "npm "* ]]; then
local package=$(printf "$line" | awk '{print $4}')
local packages=($(npm list --global --depth=0 | grep "$package"))
package=$(printf "$line" | awk '{print $4}')
packages=($(npm list --global --depth=0 | grep "$package"))
verify_listed_application "$package" "${packages[*]}"
fi
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
# Checks for missing Ruby gems.
# Label: Verify Ruby Gems
# Description: Check for missing 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
if [[ "$line" == "gem install"* ]]; then
local gem=$(printf "$line" | awk '{print $3}')
gem=$(printf "%s" "$line" | awk '{print $3}')
verify_listed_application "$gem" "${gems[*]}"
fi
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
# Checks for missing Rust crates.
# Label: Verify Rust Crates
# Description: Check for missing 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
if [[ "$line" == "cargo install"* ]]; then
local crate=$(printf "$line" | awk '{print $3}')
crate=$(printf "%s" "$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"
printf "%s\n" "Rust crates check complete."
}
export -f verify_rust_crates