Compare commits
98 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19002faa1b | ||
|
|
6d02b9a2f5 | ||
|
|
105d381b11 | ||
|
|
d557b2a7f7 | ||
|
|
3b85ceba85 | ||
|
|
6598ff4584 | ||
|
|
e6db4a2270 | ||
|
|
8ce6c3fc2d | ||
|
|
3b8adb89c1 | ||
|
|
f0fded3d1e | ||
|
|
ee28395f66 | ||
|
|
4c01cfa323 | ||
|
|
d4ff286f90 | ||
|
|
def1e57fad | ||
|
|
bf9bed3fdf | ||
|
|
780c225c1f | ||
|
|
fb5f547e00 | ||
|
|
50bf6178b9 | ||
|
|
53bdca4fc9 | ||
|
|
005ea19d1c | ||
|
|
ecd5ed49a4 | ||
|
|
d9df365afb | ||
|
|
b176823378 | ||
|
|
5f7bd0d925 | ||
|
|
6f7e47cdeb | ||
|
|
4bb16b5b7c | ||
|
|
95297426aa | ||
|
|
494bd26be9 | ||
|
|
c85015f116 | ||
|
|
31a3d3be86 | ||
|
|
f76086bbf0 | ||
|
|
f4f803296e | ||
|
|
f393d8181f | ||
|
|
a7b479f716 | ||
|
|
4f37a67353 | ||
|
|
0c5e66b605 | ||
|
|
fd112d373e | ||
|
|
1da7437342 | ||
|
|
91df57a36b | ||
|
|
982663a9ee | ||
|
|
dd8d7f7de5 | ||
|
|
76b193dede | ||
|
|
75d2c93e89 | ||
|
|
b4faa2e919 | ||
|
|
920b111ef4 | ||
|
|
6553f9be6d | ||
|
|
24fe1edefd | ||
|
|
9933eee1cd | ||
|
|
4fa7380216 | ||
|
|
179b4f05a3 | ||
|
|
91acff4756 | ||
|
|
b0b4d51e2c | ||
|
|
c17a132408 | ||
|
|
33fe1c7003 | ||
|
|
605b1e4c3f | ||
|
|
2170941383 | ||
|
|
63ef52185b | ||
|
|
74da03bc07 | ||
|
|
ada1b73c13 | ||
|
|
d196d18641 | ||
|
|
a360bf535a | ||
|
|
f5c6b6d40e | ||
|
|
bd3caab3fc | ||
|
|
2f0fa77831 | ||
|
|
017f79442b | ||
|
|
cf648adae7 | ||
|
|
af7aa4d0d0 | ||
|
|
0bafd0ea25 | ||
|
|
045a254219 | ||
|
|
113f3b88f5 | ||
|
|
4b77ecefd5 | ||
|
|
fc2cca07cf | ||
|
|
24bf3a7e62 | ||
|
|
4159fbce71 | ||
|
|
1ef42c9040 | ||
|
|
a6e170cead | ||
|
|
691d87d0f1 | ||
|
|
5e5ad4100e | ||
|
|
93151ac7d2 | ||
|
|
966b1596be | ||
|
|
5991bd6da6 | ||
|
|
b3f799acfc | ||
|
|
ea4027714a | ||
|
|
4f599099a1 | ||
|
|
c161493c32 | ||
|
|
387241227a | ||
|
|
ecf85b4526 | ||
|
|
06f6302b9a | ||
|
|
7a9bb00877 | ||
|
|
2a01bac2b0 | ||
|
|
b2b4d49c52 | ||
|
|
0945809dc4 | ||
|
|
b270852fb5 | ||
|
|
4dc5f3d363 | ||
|
|
6169e0566e | ||
|
|
1686b0c98f | ||
|
|
3aa3ea59e7 | ||
|
|
ae40574cd7 |
@@ -8,24 +8,24 @@ jobs:
|
|||||||
- checkout
|
- checkout
|
||||||
|
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
name: Bundler Restore
|
name: Gems Restore
|
||||||
keys:
|
keys:
|
||||||
- gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
- gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
||||||
- gem-cache-
|
- gem-cache-
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Bundler Install
|
name: Gems Install
|
||||||
command: |
|
command: |
|
||||||
gem update --system
|
gem update --system
|
||||||
bundle config set path "vendor/bundle"
|
bundle config set path "vendor/bundle"
|
||||||
bundle install
|
bundle install
|
||||||
|
|
||||||
- save_cache:
|
- save_cache:
|
||||||
name: Bundler Store
|
name: Gems Store
|
||||||
key: gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
key: gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
||||||
paths:
|
paths:
|
||||||
- vendor/bundle
|
- vendor/bundle
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: Build
|
name: Rake
|
||||||
command: bundle exec rake
|
command: bundle exec rake
|
||||||
|
|||||||
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: [bkuhlmann]
|
||||||
15
.github/ISSUE_TEMPLATE.md
vendored
15
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,11 +1,8 @@
|
|||||||
## Overview
|
## Why
|
||||||
<!-- Required. Describe, briefly, the behavior experienced and desired. -->
|
<!-- Required. Describe, briefly, why this issue is important. -->
|
||||||
|
|
||||||
## Screenshots/Screencasts
|
## How
|
||||||
<!-- Optional. Attach screenshot(s) and/or screencast(s) that demo the behavior. -->
|
<!-- Optional. List exact steps (numbered) to implement or reproduce behavior. Screen shots/casts are welcome. -->
|
||||||
|
|
||||||
## Steps to Recreate
|
## Notes
|
||||||
<!-- Required. List exact steps (numbered list) to reproduce errant behavior. -->
|
<!-- Optional. Provide additional details (i.e operating system, software version(s), stack dump, etc.) -->
|
||||||
|
|
||||||
## Environment
|
|
||||||
<!-- Required. What is your operating system, software version(s), etc. -->
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.1.1
|
3.4.2
|
||||||
|
|||||||
11
CITATION.cff
11
CITATION.cff
@@ -1,10 +1,10 @@
|
|||||||
cff-version: 1.2.0
|
cff-version: 1.2.0
|
||||||
message: Please use the following metadata when citing this project in your work.
|
message: Please use the following metadata when citing this project in your work.
|
||||||
title: macOS
|
title: macOS
|
||||||
abstract: Provides a shell based framework for automating the setup of a macOS machine.
|
abstract: Shell scripts for automated macOS machine setup.
|
||||||
version: 15.0.3
|
version: 20.1.0
|
||||||
license: Hippocratic-2.1
|
license: Hippocratic-2.1
|
||||||
date-released: 2022-03-16
|
date-released: 2025-02-22
|
||||||
authors:
|
authors:
|
||||||
- family-names: Kuhlmann
|
- family-names: Kuhlmann
|
||||||
given-names: Brooke
|
given-names: Brooke
|
||||||
@@ -17,5 +17,6 @@ keywords:
|
|||||||
- automation
|
- automation
|
||||||
- setup
|
- setup
|
||||||
- recovery
|
- recovery
|
||||||
repository-code: https://www.alchemists.io/projects/mac_os
|
repository-code: https://github.com/bkuhlmann/mac_os
|
||||||
repository-artifact: https://www.alchemists.io/projects/mac_os
|
repository-artifact: https://alchemists.io/projects/mac_os
|
||||||
|
url: https://alchemists.io/projects/mac_os
|
||||||
|
|||||||
9
Gemfile
9
Gemfile
@@ -1,9 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
ruby File.read(".ruby-version").strip
|
ruby file: ".ruby-version"
|
||||||
|
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "caliber", "~> 0.2"
|
gem "caliber", "~> 0.74"
|
||||||
gem "git-lint", "~> 3.2"
|
gem "debug", "~> 1.10"
|
||||||
gem "rake", "~> 13.0"
|
gem "git-lint", "~> 9.0"
|
||||||
|
gem "rake", "~> 13.2"
|
||||||
|
|||||||
60
README.adoc
60
README.adoc
@@ -2,19 +2,21 @@
|
|||||||
:toclevels: 5
|
:toclevels: 5
|
||||||
:figure-caption!:
|
:figure-caption!:
|
||||||
|
|
||||||
|
:mac_os_defaults_link: link:https://macos-defaults.com[macOS Defaults]
|
||||||
|
|
||||||
= macOS
|
= macOS
|
||||||
|
|
||||||
Shell scripts for automated macOS machine setup.
|
Shell scripts for automated macOS machine setup.
|
||||||
|
|
||||||
This project is a framework for automating the setup of a macOS machine. In order to illustrate the
|
This project is a framework for automating the setup of a macOS machine. In order to illustrate the
|
||||||
potential of what this project can do, please see the companion
|
potential of what this project can do, please see the companion
|
||||||
link:https://www.alchemists.io/projects/mac_os-config[macOS Config] project for details. The _macOS
|
link:https://alchemists.io/projects/mac_os-config[macOS Config] project for details. The _macOS
|
||||||
Config_ project is an opinionated configuration which meets the needs of my development environment
|
Config_ project is an opinionated configuration which meets the needs of my development environment
|
||||||
but is also meant to serve as an example and guide for building your own personalized setup. Here is
|
but is also meant to serve as an example and guide for building your own personalized setup. Here is
|
||||||
how the two projects are meant to be used:
|
how the two projects are meant to be used:
|
||||||
|
|
||||||
* *macOS* (this project) - The foundational framework for building custom macOS machine setups.
|
* *macOS* (this project) - The foundational framework for building custom macOS machine setups.
|
||||||
* *link:https://www.alchemists.io/projects/mac_os-config[macOS Configuration]* - The layer on top of
|
* *link:https://alchemists.io/projects/mac_os-config[macOS Configuration]* - The layer on top of
|
||||||
this _macOS_ project which defines a custom machine implementation. The project is meant to be
|
this _macOS_ project which defines a custom machine implementation. The project is meant to be
|
||||||
forked for as many custom machine setups as needed.
|
forked for as many custom machine setups as needed.
|
||||||
|
|
||||||
@@ -34,18 +36,13 @@ toc::[]
|
|||||||
* Installs link:https://nodejs.org[Node] link:https://www.npmjs.com[packages].
|
* Installs link:https://nodejs.org[Node] link:https://www.npmjs.com[packages].
|
||||||
* Installs link:https://www.ruby-lang.org[Ruby] link:https://rubygems.org[gems].
|
* Installs link:https://www.ruby-lang.org[Ruby] link:https://rubygems.org[gems].
|
||||||
* Installs link:https://www.rust-lang.org[Rust] link:https://crates.io[crates].
|
* Installs link:https://www.rust-lang.org[Rust] link:https://crates.io[crates].
|
||||||
* Applies basic default software settings.
|
* Applies {mac_os_defaults_link}.
|
||||||
* Configures installed software.
|
* Configures installed software.
|
||||||
* Supports restoration of machine backups.
|
* Supports restoration of machine backups.
|
||||||
|
|
||||||
== Screencast
|
|
||||||
|
|
||||||
[link=https://www.alchemists.io/screencasts/mac_os]
|
|
||||||
image::https://www.alchemists.io/images/screencasts/mac_os/cover.svg[Screencast,600,240,role=focal_point]
|
|
||||||
|
|
||||||
== Requirements
|
== Requirements
|
||||||
|
|
||||||
. link:https://www.apple.com/macos/monterey[macOS Monterey]
|
. link:https://www.apple.com/macos/macos-sequoia[macOS 15.0.0 (Sequoia)]
|
||||||
. link:https://developer.apple.com/xcode[Xcode]
|
. link:https://developer.apple.com/xcode[Xcode]
|
||||||
|
|
||||||
== Setup
|
== Setup
|
||||||
@@ -56,7 +53,7 @@ To install, run:
|
|||||||
----
|
----
|
||||||
git clone https://github.com/bkuhlmann/mac_os.git
|
git clone https://github.com/bkuhlmann/mac_os.git
|
||||||
cd mac_os
|
cd mac_os
|
||||||
git checkout 15.0.3
|
git checkout 20.1.0
|
||||||
----
|
----
|
||||||
|
|
||||||
== Usage
|
== Usage
|
||||||
@@ -121,23 +118,25 @@ When attempting to create a boot disk via `bin/run B`, you’ll be presented wit
|
|||||||
documentation (provided here for reference):
|
documentation (provided here for reference):
|
||||||
|
|
||||||
....
|
....
|
||||||
macOS Boot Disk Tips
|
macOS Boot Disk Setup
|
||||||
- Use a USB drive (8GB or higher).
|
1. Insert a USB drive (8GB or higher).
|
||||||
- Use Disk Utility to format the USB drive as "Mac OS Extended (Journaled)".
|
2. Use Disk Utility to format as "Mac OS Extended (Journaled)".
|
||||||
- Use Disk Utility to label the USB drive as "Untitled".
|
3. Use Disk Utility to set the schema, if available, as "GUID Partition Map".
|
||||||
|
4. Use Disk Utility to label as "Untitled".
|
||||||
|
5. Run this script to install the OS and create a bootable USB drive.
|
||||||
|
|
||||||
macOS Boot Disk Usage:
|
macOS Boot Disk Usage:
|
||||||
1. Insert the USB boot disk into the machine to be upgraded.
|
1. Insert the USB drive, created above, into the machine to be upgraded.
|
||||||
2. Reboot the machine.
|
2. Reboot the machine.
|
||||||
3. Hold the POWER (Silicon) or OPTION (Intel) key before the Apple logo appears.
|
3. Press and hold the POWER key before the Apple logo appears.
|
||||||
4. Select the USB boot disk from the menu.
|
4. Select the USB boot disk from the menu.
|
||||||
5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.
|
5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.
|
||||||
6. Use Disk Utility to create a single "APFS" drive as a "GUID Partition Table".
|
6. Use Disk Utility to create a single "APFS" drive.
|
||||||
7. Install the new operating system.
|
7. Install the new operating system.
|
||||||
|
|
||||||
macOS Boot Disk Recovery:
|
macOS Boot Disk Recovery:
|
||||||
1. Start/restart the machine.
|
1. Start/restart the machine.
|
||||||
2. Hold the POWER (Silicon) or COMMAND+R (Intel) keys before the Apple logo appears.
|
2. Press and hold the POWER key before the Apple logo appears.
|
||||||
3. Wait for the macOS installer to load from the recovery partition.
|
3. Wait for the macOS installer to load from the recovery partition.
|
||||||
4. Use the dialog options to launch Disk Utility, reinstall the system, etc.
|
4. Use the dialog options to launch Disk Utility, reinstall the system, etc.
|
||||||
....
|
....
|
||||||
@@ -148,8 +147,7 @@ All executable scripts can be found in the `bin` folder:
|
|||||||
|
|
||||||
* `bin/apply_basic_settings` (optional, customizable): Applies basic and initial settings for
|
* `bin/apply_basic_settings` (optional, customizable): Applies basic and initial settings for
|
||||||
setting up a machine.
|
setting up a machine.
|
||||||
* `bin/apply_default_settings` (optional, customizable): Applies bare minimum system and application
|
* `bin/apply_default_settings` (optional, customizable): Applies {mac_os_defaults_link}.
|
||||||
defaults.
|
|
||||||
* `bin/configure_software` (optional, customizable): Configures installed software as part of the
|
* `bin/configure_software` (optional, customizable): Configures installed software as part of the
|
||||||
post install process.
|
post install process.
|
||||||
* `bin/create_boot_disk` (optional): Creates a macOS boot disk.
|
* `bin/create_boot_disk` (optional): Creates a macOS boot disk.
|
||||||
@@ -172,13 +170,13 @@ All executable scripts can be found in the `bin` folder:
|
|||||||
* `bin/run` (required): The main script and interface for macOS setup.
|
* `bin/run` (required): The main script and interface for macOS setup.
|
||||||
|
|
||||||
The `lib` folder provides the base framework for installing, re-installing, and uninstalling
|
The `lib` folder provides the base framework for installing, re-installing, and uninstalling
|
||||||
software. Everything provided via the link:https://www.alchemists.io/projects/mac_os-config[macOS
|
software. Everything provided via the link:https://alchemists.io/projects/mac_os-config[macOS
|
||||||
Config] project is built upon the functions found in the `lib` folder. See the
|
Config] project is built upon the functions found in the `lib` folder. See the
|
||||||
link:https://www.alchemists.io/projects/mac_os-config[macOS Config] project for further details.
|
link:https://alchemists.io/projects/mac_os-config[macOS Config] project for further details.
|
||||||
|
|
||||||
* `lib/settings.sh`: Defines global settings for software applications, extensions, etc.
|
* `lib/settings.sh`: Defines global settings for software applications, extensions, etc.
|
||||||
|
|
||||||
== Troubleshooting
|
=== Troubleshooting
|
||||||
|
|
||||||
* *Pi-hole*: When using link:https://pi-hole.net[Pi-hole], you might need to temporarily disable
|
* *Pi-hole*: When using link:https://pi-hole.net[Pi-hole], you might need to temporarily disable
|
||||||
prior to upgrading as you might experience various errors with Apple not being able to detect an
|
prior to upgrading as you might experience various errors with Apple not being able to detect an
|
||||||
@@ -216,18 +214,20 @@ git clone https://github.com/bkuhlmann/mac_os.git
|
|||||||
cd mac_os
|
cd mac_os
|
||||||
----
|
----
|
||||||
|
|
||||||
== link:https://www.alchemists.io/policies/license[License]
|
== link:https://alchemists.io/policies/license[License]
|
||||||
|
|
||||||
== link:https://www.alchemists.io/policies/security[Security]
|
== link:https://alchemists.io/policies/security[Security]
|
||||||
|
|
||||||
== link:https://www.alchemists.io/policies/code_of_conduct[Code of Conduct]
|
== link:https://alchemists.io/policies/code_of_conduct[Code of Conduct]
|
||||||
|
|
||||||
== link:https://www.alchemists.io/policies/contributions[Contributions]
|
== link:https://alchemists.io/policies/contributions[Contributions]
|
||||||
|
|
||||||
== link:https://www.alchemists.io/projects/mac_os/versions[Versions]
|
== link:https://alchemists.io/policies/developer_certificate_of_origin[Developer Certificate of Origin]
|
||||||
|
|
||||||
== link:https://www.alchemists.io/community[Community]
|
== link:https://alchemists.io/projects/mac_os/versions[Versions]
|
||||||
|
|
||||||
|
== link:https://alchemists.io/community[Community]
|
||||||
|
|
||||||
== Credits
|
== Credits
|
||||||
|
|
||||||
Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
Engineered by link:https://alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||||
|
|||||||
8
Rakefile
8
Rakefile
@@ -1,8 +1,12 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "git/lint/rake/setup"
|
require "git/lint/rake/register"
|
||||||
require "rubocop/rake_task"
|
require "rubocop/rake_task"
|
||||||
|
|
||||||
|
Git::Lint::Rake::Register.call
|
||||||
RuboCop::RakeTask.new
|
RuboCop::RakeTask.new
|
||||||
|
|
||||||
task default: %i[git_lint rubocop]
|
desc "Run code quality checks"
|
||||||
|
task quality: %i[git_lint rubocop]
|
||||||
|
|
||||||
|
task default: :quality
|
||||||
|
|||||||
300
VERSIONS.adoc
300
VERSIONS.adoc
@@ -1,300 +0,0 @@
|
|||||||
= Versions
|
|
||||||
|
|
||||||
== 15.0.3 (2022-03-16)
|
|
||||||
|
|
||||||
* Fixed Homebrew install to initially default to ZSH - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 15.0.2 (2022-03-03)
|
|
||||||
|
|
||||||
* Fixed Hippocratic License to be 2.1.0 version - Brooke Kuhlmann
|
|
||||||
* Added Caliber gem - Brooke Kuhlmann
|
|
||||||
* Added Ruby version to Gemfile - Brooke Kuhlmann
|
|
||||||
* Updated default Rake task to include Git Lint and Rubocop - Brooke Kuhlmann
|
|
||||||
* Updated to Git Lint 3.2.0 - Brooke Kuhlmann
|
|
||||||
* Updated to Ruby 3.1.1 - Brooke Kuhlmann
|
|
||||||
* Removed README badges - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 15.0.1 (2022-01-01)
|
|
||||||
|
|
||||||
* Updated README policy section links - Brooke Kuhlmann
|
|
||||||
* Updated changes as versions documentation - Brooke Kuhlmann
|
|
||||||
* Updated to Git Lint 3.0.0 - Brooke Kuhlmann
|
|
||||||
* Removed code of conduct and contributing files - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 15.0.0 (2021-12-27)
|
|
||||||
|
|
||||||
* Fixed Hippocratic license structure - Brooke Kuhlmann
|
|
||||||
* Fixed README changes and credits sections - Brooke Kuhlmann
|
|
||||||
* Fixed Rubocop Bundler/OrderedGems issue - Brooke Kuhlmann
|
|
||||||
* Fixed contributing documentation - Brooke Kuhlmann
|
|
||||||
* Added README community link - Brooke Kuhlmann
|
|
||||||
* Added README troubleshooting guide for SMC reset - Brooke Kuhlmann
|
|
||||||
* Added project citation information - Brooke Kuhlmann
|
|
||||||
* Updated GitHub issue template - Brooke Kuhlmann
|
|
||||||
* Updated to Hippocratic License 3.0.0 - Brooke Kuhlmann
|
|
||||||
* Updated to Ruby 3.0.3 - Brooke Kuhlmann
|
|
||||||
* Updated to Ruby 3.1.0 - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 14.0.0 (2021-10-25)
|
|
||||||
|
|
||||||
* Updated to macOS Monterey - Brooke Kuhlmann
|
|
||||||
* Removed notes from pull request template - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 13.0.0 (2021-08-01)
|
|
||||||
|
|
||||||
* Added install Node function - Brooke Kuhlmann
|
|
||||||
* Updated Node package install script to use NPM - Brooke Kuhlmann
|
|
||||||
* Updated Ruby installer to use Frum - Brooke Kuhlmann
|
|
||||||
* Updated shell option help text - Brooke Kuhlmann
|
|
||||||
* Removed NPM install check function - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 12.0.1 (2021-07-17)
|
|
||||||
|
|
||||||
* Updated to Ruby 3.0.1 - Brooke Kuhlmann
|
|
||||||
* Updated to Ruby 3.0.2 - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 12.0.0 (2021-03-16)
|
|
||||||
|
|
||||||
* Fixed environment configuration to source Bash resource - Brooke Kuhlmann
|
|
||||||
* Added Homebrew installation to Homebrew sripts - Brooke Kuhlmann
|
|
||||||
* Added Node packages script - Brooke Kuhlmann
|
|
||||||
* Added Ruby gems script - Brooke Kuhlmann
|
|
||||||
* Added Rust crates script - Brooke Kuhlmann
|
|
||||||
* Added bare package installer - Brooke Kuhlmann
|
|
||||||
* Added dotfiles script - Brooke Kuhlmann
|
|
||||||
* Added mas check to App Store install script - Brooke Kuhlmann
|
|
||||||
* Added version release notes - Brooke Kuhlmann
|
|
||||||
* Updated dev tools installer to agree to Rosetta license - Brooke Kuhlmann
|
|
||||||
* Updated install root detection to support Elm - Brooke Kuhlmann
|
|
||||||
* Updated setup software as configure software script - Brooke Kuhlmann
|
|
||||||
* Removed CPU detection in favor of architecture detection - Brooke Kuhlmann
|
|
||||||
* Refactored install scripts to separate script paths - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 11.2.0 (2021-02-27)
|
|
||||||
|
|
||||||
* Added Apple Silicon instructions - Brooke Kuhlmann
|
|
||||||
* Added CPU utility function - Brooke Kuhlmann
|
|
||||||
* Added Homebrew install function - Brooke Kuhlmann
|
|
||||||
* Added Homebrew utility path functions - Brooke Kuhlmann
|
|
||||||
* Added Rosetta to development tools install script - Brooke Kuhlmann
|
|
||||||
* Added environment configuration for scripts - Brooke Kuhlmann
|
|
||||||
* Updated to Circle CI 2.1.0 - Brooke Kuhlmann
|
|
||||||
* Updated to Docker Alpine Ruby image - Brooke Kuhlmann
|
|
||||||
* Refactored installer functions to be alphabetically sorted - Brooke Kuhlmann
|
|
||||||
* Refactored utility functions to be alphabetically sorted - Brooke Kuhlmann
|
|
||||||
* Refactored verifier functions to be alphabetically sorted - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 11.1.1 (2021-01-10)
|
|
||||||
|
|
||||||
* Fixed brew formulae list error - Brooke Kuhlmann
|
|
||||||
* Updated boot disk recovery documentation - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 11.1.0 (2021-01-03)
|
|
||||||
|
|
||||||
* Added caffeination to restore process - Brooke Kuhlmann
|
|
||||||
* Updated boot disk instructions for main disk format - Brooke Kuhlmann
|
|
||||||
* Updated troubleshooting documentation - Brooke Kuhlmann
|
|
||||||
* Removed README Startup Security Utility documentation - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 11.0.0 (2020-12-30)
|
|
||||||
|
|
||||||
* Fixed Circle CI configuration for Bundler config path - Brooke Kuhlmann
|
|
||||||
* Added Circle CI explicit Bundle install configuration - Brooke Kuhlmann
|
|
||||||
* Updated to Git Lint 2.0.0 - Brooke Kuhlmann
|
|
||||||
* Updated to Ruby 3.0.0 - Brooke Kuhlmann
|
|
||||||
|
|
||||||
== 10.0.0 (2020-11-15)
|
|
||||||
|
|
||||||
* Added macOS Big Sur support
|
|
||||||
* Updated project documentation to conform to Rubysmith template
|
|
||||||
* Updated to Git Lint 1.3.0
|
|
||||||
* Updated to Ruby 2.7.2
|
|
||||||
|
|
||||||
== 9.0.0 (2020-09-12)
|
|
||||||
|
|
||||||
* Fixed Homebrew cask verifier deprecation warning
|
|
||||||
* Removed Homebrew Mecurial formula verification check
|
|
||||||
* Removed unnecessary verifier code comments
|
|
||||||
* Refactored utility basename and extension utilities
|
|
||||||
|
|
||||||
== 8.2.0 (2020-07-22)
|
|
||||||
|
|
||||||
* Fixed project requirements
|
|
||||||
* Fixed screencast image URL
|
|
||||||
* Updated GitHub templates
|
|
||||||
* Updated README credit URL
|
|
||||||
* Updated README screencast URL
|
|
||||||
* Updated README screencast cover to SVG format
|
|
||||||
* Updated to Git Lint 1.0.0
|
|
||||||
* Refactored Rakefile requirements
|
|
||||||
|
|
||||||
== 8.1.0 (2020-04-01)
|
|
||||||
|
|
||||||
* Added README production and development setup instructions
|
|
||||||
* Updated Circle CI build label
|
|
||||||
* Updated README screencast to use larger image
|
|
||||||
* Updated documentation to ASCII Doc format
|
|
||||||
* Updated to Code of Conduct 2.0.0
|
|
||||||
* Updated to Git Cop 4.0.0
|
|
||||||
* Updated to Ruby 2.7.1
|
|
||||||
* Removed README images
|
|
||||||
|
|
||||||
== 8.0.1 (2020-01-01)
|
|
||||||
|
|
||||||
* Added Startup Security Utility to README.
|
|
||||||
* Updated README screencast.
|
|
||||||
* Updated to Ruby 2.7.0.
|
|
||||||
* Refactored caffeinate machine function to process grep.
|
|
||||||
|
|
||||||
== 8.0.0 (2019-10-12)
|
|
||||||
|
|
||||||
* Updated to Rake 13.0.0.
|
|
||||||
* Updated to Ruby 2.6.5.
|
|
||||||
* Updated to macOS Catalina.
|
|
||||||
|
|
||||||
== 7.2.1 (2019-09-01)
|
|
||||||
|
|
||||||
* Updated README screencast tutorial.
|
|
||||||
* Updated to Ruby 2.6.4.
|
|
||||||
|
|
||||||
== 7.2.0 (2019-08-01)
|
|
||||||
|
|
||||||
* Added file install function.
|
|
||||||
|
|
||||||
== 7.1.2 (2019-06-01)
|
|
||||||
|
|
||||||
* Updated contributing documentation.
|
|
||||||
* Updated to Git Cop 3.5.0.
|
|
||||||
|
|
||||||
== 7.1.1 (2019-05-01)
|
|
||||||
|
|
||||||
* Added project icon to README.
|
|
||||||
* Updated to Ruby 2.6.3.
|
|
||||||
|
|
||||||
== 7.1.0 (2019-04-01)
|
|
||||||
|
|
||||||
* Added XCode installer fix to troubleshooting section.
|
|
||||||
* Updated to Ruby 2.6.1.
|
|
||||||
* Updated to Ruby 2.6.2.
|
|
||||||
|
|
||||||
== 7.0.0 (2019-01-01)
|
|
||||||
|
|
||||||
* Fixed Circle CI cache for Ruby version.
|
|
||||||
* Fixed installation of apps with no extension.
|
|
||||||
* Fixed program installs.
|
|
||||||
* Added Circle CI Bundler cache.
|
|
||||||
* Added README boot disk documentation.
|
|
||||||
* Added README troubleshooting section.
|
|
||||||
* Updated to Git Cop 3.0.0.
|
|
||||||
* Updated to Ruby 2.6.0.
|
|
||||||
* Removed Java development tools from setup.
|
|
||||||
* Removed download file function.
|
|
||||||
|
|
||||||
== 6.1.0 (2018-11-01)
|
|
||||||
|
|
||||||
* Updated to Java SE Development Kit 11.
|
|
||||||
* Updated to Ruby 2.5.2.
|
|
||||||
* Updated to Ruby 2.5.3.
|
|
||||||
* Removed unnecessary source code comments.
|
|
||||||
|
|
||||||
== 6.0.0 (2018-10-01)
|
|
||||||
|
|
||||||
* Added XCode install tip.
|
|
||||||
* Updated boot disk creation to macOS Mojave.
|
|
||||||
* Updated to Contributor Covenant Code of Conduct 1.4.1.
|
|
||||||
* Updated to Java SE Development Kit 10.
|
|
||||||
|
|
||||||
== 5.0.0 (2018-08-01)
|
|
||||||
|
|
||||||
* Fixed Markdown ordered list numbering.
|
|
||||||
* Fixed verification of Homebrew formulas.
|
|
||||||
* Added App Store application verification.
|
|
||||||
* Added Homebrew cask application verifier.
|
|
||||||
* Updated Git checkout to silence detached head warnings.
|
|
||||||
* Updated README documentation.
|
|
||||||
* Updated Semantic Versioning links to be HTTPS.
|
|
||||||
* Updated boot disk format documentation.
|
|
||||||
* Updated project changes to use semantic versions.
|
|
||||||
* Removed Java install support.
|
|
||||||
* Removed restorer functions.
|
|
||||||
* Refactored function parameter documentation.
|
|
||||||
* Refactored library function order.
|
|
||||||
|
|
||||||
== 4.1.0 (2018-04-01)
|
|
||||||
|
|
||||||
* Updated README license information.
|
|
||||||
* Updated README screencast tutorial.
|
|
||||||
* Updated to Circle CI 2.0.0 configuration.
|
|
||||||
* Updated to Git Cop 2.2.0.
|
|
||||||
* Updated to Ruby 2.5.1.
|
|
||||||
* Removed Patreon badge from README.
|
|
||||||
|
|
||||||
== 4.0.0 (2018-01-01)
|
|
||||||
|
|
||||||
* Added Gemfile.lock to .gitignore.
|
|
||||||
* Updated to Apache 2.0 license.
|
|
||||||
* Updated to Ruby 2.4.3.
|
|
||||||
* Updated to Ruby 2.5.0.
|
|
||||||
|
|
||||||
== 3.1.0 (2017-11-26)
|
|
||||||
|
|
||||||
* Updated Gemfile.lock file.
|
|
||||||
* Updated boot disk documenation to mention APFS.
|
|
||||||
* Updated to Bundler 1.16.0.
|
|
||||||
* Updated to Git Cop 1.7.0.
|
|
||||||
* Updated to Rake 12.3.0.
|
|
||||||
* Updated to Rubocop 0.51.0.
|
|
||||||
|
|
||||||
== 3.0.0 (2017-10-01)
|
|
||||||
|
|
||||||
* Fixed table of contents.
|
|
||||||
* Updated boot disk creation to use macOS High Sierra.
|
|
||||||
* Updated gem dependencies.
|
|
||||||
* Updated to Git Cop 1.6.0.
|
|
||||||
* Updated to Ruby 2.4.2.
|
|
||||||
|
|
||||||
== 2.2.0 (2017-07-16)
|
|
||||||
|
|
||||||
* Added Git Cop support.
|
|
||||||
* Updated CONTRIBUTING documentation.
|
|
||||||
* Updated GitHub templates.
|
|
||||||
* Updated README headers.
|
|
||||||
* Updated gem dependencies.
|
|
||||||
|
|
||||||
== 2.1.0 (2017-04-29)
|
|
||||||
|
|
||||||
* Fixed Java SE Development Kit install.
|
|
||||||
* Fixed install-all command
|
|
||||||
|
|
||||||
== 2.0.0 (2017-04-09)
|
|
||||||
|
|
||||||
* Added Homebrew Casks install script.
|
|
||||||
* Updated README semantic versioning order.
|
|
||||||
* Updated contributing documentation.
|
|
||||||
* Refactored Homebrew software as Homebrew Formulas.
|
|
||||||
|
|
||||||
== 1.3.1 (2017-01-08)
|
|
||||||
|
|
||||||
* Fixed install of zip app downloads with sub-directories.
|
|
||||||
|
|
||||||
== 1.3.0 (2017-01-01)
|
|
||||||
|
|
||||||
* Updated README versioning documentation.
|
|
||||||
* Removed CHANGELOG.md (use CHANGES.md instead).
|
|
||||||
|
|
||||||
== 1.2.0 (2016-10-12)
|
|
||||||
|
|
||||||
* Fixed reinstaller path issues with application and extension scripts.
|
|
||||||
* Added screencast to README.
|
|
||||||
|
|
||||||
== 1.1.0 (2016-10-11)
|
|
||||||
|
|
||||||
* Fixed Bash script header to dynamically load correct environment.
|
|
||||||
* Fixed verification of Homebrew application installs.
|
|
||||||
* Added script hook for App Store software install.
|
|
||||||
* Added script hooks for unfinished custom configurations.
|
|
||||||
* Updated and clarified README documentation.
|
|
||||||
|
|
||||||
== 1.0.0 (2016-10-05)
|
|
||||||
|
|
||||||
* Initial version.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Applies basic system settings.
|
|
||||||
|
|
||||||
set -o nounset
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_basic_settings"
|
|
||||||
|
|
||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
|
||||||
"$SCRIPT_PATH"
|
|
||||||
else
|
|
||||||
printf "WARNING: Basic settings script does not exist or is not executable.\n"
|
|
||||||
fi
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Applies default settings.
|
|
||||||
|
|
||||||
set -o nounset
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_default_settings"
|
|
||||||
|
|
||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
|
||||||
"$SCRIPT_PATH"
|
|
||||||
else
|
|
||||||
printf "WARNING: Default settings script does not exist or is not executable.\n"
|
|
||||||
fi
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Configures installed software.
|
|
||||||
|
|
||||||
set -o nounset
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/configure_software"
|
|
||||||
|
|
||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
|
||||||
"$SCRIPT_PATH"
|
|
||||||
else
|
|
||||||
printf "WARNING: Configure software script does not exist or is not executable.\n"
|
|
||||||
fi
|
|
||||||
@@ -2,33 +2,35 @@
|
|||||||
|
|
||||||
# Creates macOS boot disk.
|
# Creates macOS boot disk.
|
||||||
|
|
||||||
printf "macOS Boot Disk Tips\n"
|
printf "%s\n" "macOS Boot Disk Setup"
|
||||||
printf " - Use a USB drive (8GB or higher).\n"
|
printf "%s\n" " 1. Insert a USB drive (8GB or higher)."
|
||||||
printf " - Use Disk Utility to format the USB drive as \"Mac OS Extended (Journaled)\".\n"
|
printf "%s\n" " 2. Use Disk Utility to format as \"Mac OS Extended (Journaled)\"."
|
||||||
printf " - Use Disk Utility to label the USB drive as \"Untitled\".\n"
|
printf "%s\n" " 3. Use Disk Utility to set the schema, if available, as \"GUID Partition Map\"."
|
||||||
printf "\nmacOS Boot Disk Usage:\n"
|
printf "%s\n" " 4. Use Disk Utility to label as \"Untitled\"."
|
||||||
printf " 1. Insert the USB boot disk into the machine to be upgraded.\n"
|
printf "%s\n" " 5. Run this script to install the OS and create a bootable USB drive."
|
||||||
printf " 2. Reboot the machine.\n"
|
printf "\n%s\n" "macOS Boot Disk Usage:"
|
||||||
printf " 3. Hold the POWER (Silicon) or OPTION (Intel) key before the Apple logo appears.\n"
|
printf "%s\n" " 1. Insert the USB drive, created above, into the machine to be upgraded."
|
||||||
printf " 4. Select the USB boot disk from the menu.\n"
|
printf "%s\n" " 2. Reboot the machine."
|
||||||
printf " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.\n"
|
printf "%s\n" " 3. Press and hold the POWER key before the Apple logo appears."
|
||||||
printf " 6. Use Disk Utility to create a single \"APFS\" drive as a \"GUID Partition Table\".\n"
|
printf "%s\n" " 4. Select the USB boot disk from the menu."
|
||||||
printf " 7. Install the new operating system.\n"
|
printf "%s\n" " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions."
|
||||||
printf "\nmacOS Boot Disk Recovery:\n"
|
printf "%s\n" " 6. Use Disk Utility to create a single \"APFS\" drive."
|
||||||
printf " 1. Start/restart the machine.\n"
|
printf "%s\n" " 7. Install the new operating system."
|
||||||
printf " 2. Hold the POWER (Silicon) or COMMAND+R (Intel) keys before the Apple logo appears.\n"
|
printf "\n%s\n" "macOS Boot Disk Recovery:"
|
||||||
printf " 3. Wait for the macOS installer to load from the recovery partition.\n"
|
printf "%s\n" " 1. Start/restart the machine."
|
||||||
printf " 4. Use the dialog options to launch Disk Utility, reinstall the system, etc.\n"
|
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
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -d "$MAC_OS_BOOT_DISK_PATH" ]]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
check_mas_install
|
check_mas_install
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_applications"
|
|||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
16
bin/install_basics
Executable file
16
bin/install_basics
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
# Installs basic system settings.
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_basics"
|
||||||
|
|
||||||
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
|
"$SCRIPT_PATH"
|
||||||
|
else
|
||||||
|
printf "%s\n" "WARNING: Basic settings script does not exist or is not executable."
|
||||||
|
fi
|
||||||
16
bin/install_defaults
Executable file
16
bin/install_defaults
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
# Installs system and application default settings.
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_defaults"
|
||||||
|
|
||||||
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
|
"$SCRIPT_PATH"
|
||||||
|
else
|
||||||
|
printf "%s\n" "WARNING: Default settings script does not exist or is not executable."
|
||||||
|
fi
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
#! /usr/bin/env bash
|
#! /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
|
xcode-select --install
|
||||||
|
|
||||||
printf "%s\n" "💡 ALT+TAB to view and accept Xcode license window."
|
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
|
read -p "Have you completed the Xcode CLI tools install (y/n)? " xcode_response
|
||||||
if [[ "$xcode_response" != "y" ]]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Installs dotfiles.
|
|
||||||
|
|
||||||
set -o nounset
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_dotfiles"
|
|
||||||
|
|
||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
|
||||||
"$SCRIPT_PATH"
|
|
||||||
else
|
|
||||||
printf "WARNING: Dotfiles install script does not exist or is not executable.\n"
|
|
||||||
fi
|
|
||||||
@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_extensions"
|
|||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
install_homebrew
|
install_homebrew
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
install_homebrew
|
install_homebrew
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
install_node
|
install_node
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
install_ruby
|
install_ruby
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ if [[ -x "$SCRIPT_PATH" ]]; then
|
|||||||
install_rust
|
install_rust
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
16
bin/install_shell
Executable file
16
bin/install_shell
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
# Installs shell.
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o errexit
|
||||||
|
set -o pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_shell"
|
||||||
|
|
||||||
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
|
"$SCRIPT_PATH"
|
||||||
|
else
|
||||||
|
printf "%s\n" "WARNING: Shell script does not exist or is not executable."
|
||||||
|
fi
|
||||||
6
bin/rake
Executable file
6
bin/rake
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#! /usr/bin/env ruby
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "bundler/setup"
|
||||||
|
|
||||||
|
load Gem.bin_path "rake", "rake"
|
||||||
@@ -12,5 +12,5 @@ SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/restore_backup"
|
|||||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||||
"$SCRIPT_PATH"
|
"$SCRIPT_PATH"
|
||||||
else
|
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
|
fi
|
||||||
|
|||||||
76
bin/run
76
bin/run
@@ -4,22 +4,20 @@
|
|||||||
|
|
||||||
source lib/installers.sh
|
source lib/installers.sh
|
||||||
source lib/options.sh
|
source lib/options.sh
|
||||||
source lib/reinstallers.sh
|
|
||||||
source lib/settings.sh
|
source lib/settings.sh
|
||||||
source lib/uninstallers.sh
|
|
||||||
source lib/utilities.sh
|
source lib/utilities.sh
|
||||||
source lib/verifiers.sh
|
source lib/verifiers.sh
|
||||||
|
|
||||||
if [[ -e "$MAC_OS_CONFIG_PATH" ]]; then
|
if [[ -e "$MAC_OS_CONFIG_PATH" ]]; then
|
||||||
source "$MAC_OS_CONFIG_PATH/lib/settings.sh"
|
source "$MAC_OS_CONFIG_PATH/lib/settings.sh"
|
||||||
else
|
else
|
||||||
printf "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH.\n\n"
|
printf "%s\n\n" "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH."
|
||||||
printf "Please check the following before continuing:\n"
|
printf "%s\n" "Please check the following before continuing:"
|
||||||
printf " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config.\n"
|
printf "%s\n" " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config."
|
||||||
printf " • Customize as necessary for your setup or fork the project and make your own configuration.\n"
|
printf "%s\n" " • Customize as necessary for your setup or fork the project and make your own configuration."
|
||||||
printf " • When finished, your folder structure should look like this:\n"
|
printf "%s\n" " • When finished, your folder structure should look like this:"
|
||||||
printf " • <root path>/mac_os:\n"
|
printf "%s\n" " • <root path>/mac_os:"
|
||||||
printf " • <root path>/mac_os-config:\n"
|
printf "%s\n" " • <root path>/mac_os-config:"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -27,41 +25,37 @@ configure_environment
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
if [[ $# == 0 ]]; then
|
if [[ $# == 0 ]]; then
|
||||||
printf "\nUsage: run OPTION\n"
|
printf "\n%s\n" "Usage: run OPTION"
|
||||||
printf "\nOSX Options:\n"
|
printf "\n%s\n" "OSX Options:"
|
||||||
printf " Boot:\n"
|
printf "%s\n" " Boot:"
|
||||||
printf " B: Create boot disk.\n"
|
printf "%s\n" " B: Create boot disk."
|
||||||
printf " Install:\n"
|
printf "%s\n" " Install:"
|
||||||
printf " b: Apply basic settings.\n"
|
printf "%s\n" " b: Install basics."
|
||||||
printf " t: Install development tools.\n"
|
printf "%s\n" " t: Install development tools."
|
||||||
printf " hf: Install Homebrew Formulas.\n"
|
printf "%s\n" " hf: Install Homebrew Formulas."
|
||||||
printf " hc: Install Homebrew Casks.\n"
|
printf "%s\n" " hc: Install Homebrew Casks."
|
||||||
printf " m: Install Mac App Store software.\n"
|
printf "%s\n" " m: Install Mac App Store software."
|
||||||
printf " a: Install application software.\n"
|
printf "%s\n" " a: Install application software."
|
||||||
printf " x: Install application software extensions.\n"
|
printf "%s\n" " x: Install application software extensions."
|
||||||
printf " df: Install dotfiles.\n"
|
printf "%s\n" " d: Install defaults."
|
||||||
printf " np: Install Node packages.\n"
|
printf "%s\n" " s: Install shell."
|
||||||
printf " rg: Install Ruby gems.\n"
|
printf "%s\n" " r: Restore backups."
|
||||||
printf " rc: Install Rust crates.\n"
|
printf "%s\n" " i: Install all (i.e. executes all of the above steps in order listed)."
|
||||||
printf " d: Apply default settings.\n"
|
printf "%s\n" " Libraries:"
|
||||||
printf " cs: Configure installed software.\n"
|
printf "%s\n" " rc: Install Rust crates."
|
||||||
printf " i: Install all (i.e. executes all of the above steps in order listed).\n"
|
printf "%s\n" " rg: Install Ruby gems."
|
||||||
printf " Restore:\n"
|
printf "%s\n" " np: Install Node packages."
|
||||||
printf " R: Restore settings from backup.\n"
|
printf "%s\n" " l: Install libraries (i.e. executes all of the above steps in order listed)."
|
||||||
printf " Manage:\n"
|
printf "%s\n" " Manage:"
|
||||||
printf " c: Check status of managed software.\n"
|
printf "%s\n" " c: Check status of managed software."
|
||||||
printf " C: Caffeinate machine.\n"
|
printf "%s\n" " C: Caffeinate machine."
|
||||||
printf " ua: Uninstall application software.\n"
|
printf "%s\n" " w: Clean work (temp) directory."
|
||||||
printf " ux: Uninstall application software extension.\n"
|
printf "%s\n\n" " q: Quit/Exit."
|
||||||
printf " ra: Reinstall application software.\n"
|
|
||||||
printf " rx: Reinstall application software extension.\n"
|
|
||||||
printf " w: Clean work (temp) directory.\n"
|
|
||||||
printf " q: Quit/Exit.\n\n"
|
|
||||||
read -p "Enter selection: " response
|
read -p "Enter selection: " response
|
||||||
printf "\n"
|
printf "\n"
|
||||||
process_option $response
|
process_option "$response"
|
||||||
else
|
else
|
||||||
process_option $1
|
process_option "$1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -11,43 +12,60 @@ download_file() {
|
|||||||
|
|
||||||
printf "%s\n" "Downloading $1..."
|
printf "%s\n" "Downloading $1..."
|
||||||
clean_work_path
|
clean_work_path
|
||||||
mkdir $MAC_OS_WORK_PATH
|
mkdir "$MAC_OS_WORK_PATH"
|
||||||
curl --header "$http_header" --location --retry 3 --retry-delay 5 --fail --silent --show-error "$url" >> "$MAC_OS_WORK_PATH/$file_name"
|
|
||||||
|
curl --header "$http_header" \
|
||||||
|
--location \
|
||||||
|
--retry 3 \
|
||||||
|
--retry-delay 5 \
|
||||||
|
--fail \
|
||||||
|
--silent \
|
||||||
|
--show-error \
|
||||||
|
"$url" >> "$MAC_OS_WORK_PATH/$file_name"
|
||||||
}
|
}
|
||||||
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"
|
||||||
@@ -58,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"
|
||||||
@@ -134,86 +162,105 @@ 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_root=""
|
||||||
|
local install_path=""
|
||||||
|
|
||||||
|
install_root=$(get_install_root "$program_name")
|
||||||
|
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"
|
||||||
|
mkdir -p "$install_root"
|
||||||
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 ! command -v fnm > /dev/null; then
|
if [[ ! -x "$(command -v node)" ]]; then
|
||||||
$(get_homebrew_bin_root)/fnm install --lts
|
"$(get_homebrew_bin_root)/fnm" install --latest
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
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" \
|
||||||
$(get_homebrew_bin_root)/frum local "$version"
|
--with-openssl-dir="$(brew --prefix openssl)" \
|
||||||
gem update --system && gem update
|
--enable-shared \
|
||||||
|
--disable-silent-rules
|
||||||
|
"$(get_homebrew_bin_root)"/frum local "$version"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
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
|
||||||
@@ -221,15 +268,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"
|
||||||
|
|
||||||
@@ -240,20 +290,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"
|
||||||
|
|
||||||
@@ -265,20 +318,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"
|
||||||
|
|
||||||
@@ -289,24 +345,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
|
||||||
|
|||||||
@@ -2,14 +2,16 @@
|
|||||||
|
|
||||||
# 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')
|
||||||
bin/create_boot_disk;;
|
bin/create_boot_disk;;
|
||||||
'b')
|
'b')
|
||||||
bin/apply_basic_settings;;
|
bin/install_basics;;
|
||||||
't')
|
't')
|
||||||
bin/install_dev_tools;;
|
bin/install_dev_tools;;
|
||||||
'hf')
|
'hf')
|
||||||
@@ -22,37 +24,35 @@ process_option() {
|
|||||||
bin/install_applications;;
|
bin/install_applications;;
|
||||||
'x')
|
'x')
|
||||||
bin/install_extensions;;
|
bin/install_extensions;;
|
||||||
'df')
|
|
||||||
bin/install_dotfiles;;
|
|
||||||
'np')
|
|
||||||
bin/install_node_packages;;
|
|
||||||
'rg')
|
|
||||||
bin/install_ruby_gems;;
|
|
||||||
'rc')
|
|
||||||
bin/install_rust_crates;;
|
|
||||||
'd')
|
'd')
|
||||||
bin/apply_default_settings;;
|
bin/install_defaults;;
|
||||||
'cs')
|
's')
|
||||||
bin/configure_software;;
|
bin/install_shell;;
|
||||||
|
'r')
|
||||||
|
bin/restore_backup;;
|
||||||
'i')
|
'i')
|
||||||
caffeinate_machine
|
caffeinate_machine
|
||||||
bin/apply_basic_settings
|
bin/install_basics
|
||||||
bin/install_dev_tools
|
bin/install_dev_tools
|
||||||
bin/install_homebrew_formulas
|
bin/install_homebrew_formulas
|
||||||
bin/install_homebrew_casks
|
bin/install_homebrew_casks
|
||||||
bin/install_app_store
|
bin/install_app_store
|
||||||
bin/install_applications
|
bin/install_applications
|
||||||
bin/install_extensions
|
bin/install_extensions
|
||||||
bin/install_dotfiles
|
bin/install_defaults
|
||||||
bin/install_node_packages
|
bin/install_shell
|
||||||
bin/install_ruby_gems
|
bin/restore_backup
|
||||||
bin/install_rust_crates
|
|
||||||
bin/apply_default_settings
|
|
||||||
bin/configure_software
|
|
||||||
clean_work_path;;
|
clean_work_path;;
|
||||||
'R')
|
'np')
|
||||||
caffeinate_machine
|
bin/install_node_packages;;
|
||||||
bin/restore_backup;;
|
'rg')
|
||||||
|
bin/install_ruby_gems;;
|
||||||
|
'rc')
|
||||||
|
bin/install_rust_crates;;
|
||||||
|
'l')
|
||||||
|
bin/install_rust_crates
|
||||||
|
bin/install_ruby_gems
|
||||||
|
bin/install_node_packages;;
|
||||||
'c')
|
'c')
|
||||||
verify_homebrew_formulas
|
verify_homebrew_formulas
|
||||||
verify_homebrew_casks
|
verify_homebrew_casks
|
||||||
@@ -64,14 +64,6 @@ process_option() {
|
|||||||
verify_rust_crates;;
|
verify_rust_crates;;
|
||||||
'C')
|
'C')
|
||||||
caffeinate_machine;;
|
caffeinate_machine;;
|
||||||
'ua')
|
|
||||||
uninstall_application;;
|
|
||||||
'ux')
|
|
||||||
uninstall_extension;;
|
|
||||||
'ra')
|
|
||||||
reinstall_application;;
|
|
||||||
'rx')
|
|
||||||
reinstall_extension;;
|
|
||||||
'w')
|
'w')
|
||||||
clean_work_path;;
|
clean_work_path;;
|
||||||
'q');;
|
'q');;
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Defines reinstall functions.
|
|
||||||
|
|
||||||
# Reinstall application.
|
|
||||||
reinstall_application() {
|
|
||||||
uninstall_application
|
|
||||||
bin/install_applications
|
|
||||||
}
|
|
||||||
export -f reinstall_application
|
|
||||||
|
|
||||||
# Reinstall extension.
|
|
||||||
reinstall_extension() {
|
|
||||||
uninstall_extension
|
|
||||||
bin/install_extensions
|
|
||||||
}
|
|
||||||
export -f reinstall_extension
|
|
||||||
@@ -5,7 +5,7 @@ set -o errexit
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
IFS=$'\n\t'
|
IFS=$'\n\t'
|
||||||
|
|
||||||
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Monterey.app/Contents/Resources/createinstallmedia"
|
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Sequoia.app/Contents/Resources/createinstallmedia"
|
||||||
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
|
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
|
||||||
export MAC_OS_WORK_PATH=/tmp/downloads
|
export MAC_OS_WORK_PATH=/tmp/downloads
|
||||||
export MAC_OS_CONFIG_PATH="../mac_os-config"
|
export MAC_OS_CONFIG_PATH="../mac_os-config"
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# Defines uninstall functions.
|
|
||||||
|
|
||||||
# Uninstalls selected application.
|
|
||||||
uninstall_application() {
|
|
||||||
# Only use environment keys that end with "APP_NAME".
|
|
||||||
local keys=($(set | awk -F "=" '{print $1}' | grep ".*APP_NAME"))
|
|
||||||
|
|
||||||
printf "Select application to uninstall:\n"
|
|
||||||
for ((index = 0; index < ${#keys[*]}; index++)); do
|
|
||||||
local app_file="${!keys[$index]}"
|
|
||||||
printf " $index: ${app_file}\n"
|
|
||||||
done
|
|
||||||
printf " q: Quit/Exit\n\n"
|
|
||||||
|
|
||||||
read -p "Enter selection: " response
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
local regex="^[0-9]+$"
|
|
||||||
if [[ $response =~ $regex ]]; then
|
|
||||||
local app_file="${!keys[$response]}"
|
|
||||||
local app_path=$(get_install_path "${app_file}")
|
|
||||||
sudo rm -rf "$app_path"
|
|
||||||
printf "Uninstalled: ${app_path}\n"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f uninstall_application
|
|
||||||
|
|
||||||
# Uninstalls selected extension.
|
|
||||||
uninstall_extension() {
|
|
||||||
# Only use environment keys that end with "EXTENSION_PATH".
|
|
||||||
local keys=($(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH"))
|
|
||||||
|
|
||||||
printf "Select extension to uninstall:\n"
|
|
||||||
for ((index = 0; index < ${#keys[*]}; index++)); do
|
|
||||||
local extension_path="${!keys[$index]}"
|
|
||||||
printf " $index: ${extension_path}\n"
|
|
||||||
done
|
|
||||||
printf " q: Quit/Exit\n\n"
|
|
||||||
|
|
||||||
read -p "Enter selection: " response
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
local regex="^[0-9]+$"
|
|
||||||
if [[ $response =~ $regex ]]; then
|
|
||||||
local extension_path="${!keys[$response]}"
|
|
||||||
rm -rf "${extension_path}"
|
|
||||||
printf "Uninstalled: ${extension_path}\n"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f uninstall_extension
|
|
||||||
@@ -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,31 +68,28 @@ 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"
|
||||||
local file_extension=$(get_extension "$file_name")
|
|
||||||
|
|
||||||
# Special cases not supported by Homebrew.
|
case $(get_extension "$file_name") in
|
||||||
if [[ "$file_name" == "elm" ]]; then
|
|
||||||
printf "/usr/local/bin"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Dynamically build the install path based on file extension.
|
|
||||||
case $file_extension in
|
|
||||||
'')
|
'')
|
||||||
printf "$(get_homebrew_bin_root)";;
|
printf "%s" "$HOME/.local/bin";;
|
||||||
'app')
|
'app')
|
||||||
printf "/Applications";;
|
printf "/Applications";;
|
||||||
'prefPane')
|
'prefPane')
|
||||||
@@ -101,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"
|
||||||
|
|||||||
117
lib/verifiers.sh
117
lib/verifiers.sh
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user