Compare commits
287 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
5786fef97b | ||
|
|
efa421db4e | ||
|
|
fa820851a2 | ||
|
|
772a0f5d81 | ||
|
|
8e50a38035 | ||
|
|
253abf249d | ||
|
|
9a8b9cda93 | ||
|
|
93405894cd | ||
|
|
dad032168b | ||
|
|
73519549cd | ||
|
|
e13c08288e | ||
|
|
aefdd41772 | ||
|
|
3b551d5872 | ||
|
|
d50a890be9 | ||
|
|
9c92316686 | ||
|
|
aa72537f4f | ||
|
|
446f33dd30 | ||
|
|
68583f3dc0 | ||
|
|
c7dc1abd24 | ||
|
|
4832f857a5 | ||
|
|
91075b7001 | ||
|
|
c7099baa63 | ||
|
|
860accf53f | ||
|
|
f4292a0e7d | ||
|
|
49be191b7b | ||
|
|
644ad6388b | ||
|
|
892b8119c9 | ||
|
|
0cd587c527 | ||
|
|
bfaba4b40d | ||
|
|
0445e6a584 | ||
|
|
740c91103a | ||
|
|
80f289a6b8 | ||
|
|
e919d07068 | ||
|
|
2e95c72d57 | ||
|
|
f790b05831 | ||
|
|
c849ac76e2 | ||
|
|
029fce45b4 | ||
|
|
e9d1928b90 | ||
|
|
14394e5c51 | ||
|
|
566b9d871e | ||
|
|
f640e37089 | ||
|
|
c3c3036c88 | ||
|
|
6990b9d2c6 | ||
|
|
b8d96b3479 | ||
|
|
be9edafe52 | ||
|
|
c62ef77ce2 | ||
|
|
e9cd22bb36 | ||
|
|
e9476d6a6a | ||
|
|
35663cf8b3 | ||
|
|
eec175e232 | ||
|
|
dd62dad160 | ||
|
|
c65f06d5b8 | ||
|
|
6567969919 | ||
|
|
82d50299c7 | ||
|
|
ec441aefef | ||
|
|
e4ef33a5f6 | ||
|
|
eaefe9fa04 | ||
|
|
71da0e7b1b | ||
|
|
2c518d797e | ||
|
|
5e25c8d3f9 | ||
|
|
3aea499672 | ||
|
|
0ddd9b0986 | ||
|
|
5a4d45ffed | ||
|
|
cb3ed0108d | ||
|
|
8c4c734043 | ||
|
|
160447eda3 | ||
|
|
803c38e1c2 | ||
|
|
76432f5a74 | ||
|
|
85c85a5e80 | ||
|
|
b83ecf6516 | ||
|
|
3889930672 | ||
|
|
856f51422a | ||
|
|
433ad04028 | ||
|
|
605190577f | ||
|
|
c9c7f46e4a | ||
|
|
f8a779e926 | ||
|
|
e6f991baca | ||
|
|
ae6ab46fa7 | ||
|
|
45a6c5d1b0 | ||
|
|
1bb6ef39a5 | ||
|
|
1416aa2f0a | ||
|
|
b6cddae599 | ||
|
|
e533bf04be | ||
|
|
5455a76d14 | ||
|
|
5569fdb345 | ||
|
|
8f2173c938 | ||
|
|
4f1ed26934 | ||
|
|
b7c89266f6 | ||
|
|
09025fd976 | ||
|
|
a97de70b65 | ||
|
|
1d75357a18 | ||
|
|
3c78a1cbf0 | ||
|
|
3158d024df | ||
|
|
62295d0851 | ||
|
|
34f7dad25d | ||
|
|
e8101bbb3b | ||
|
|
3f9eaf969d | ||
|
|
75e9401ff3 | ||
|
|
413d4a65fe | ||
|
|
5dbed92f89 | ||
|
|
97893843de | ||
|
|
9a37f06826 | ||
|
|
50b9edd7f7 | ||
|
|
1769a8234a | ||
|
|
788aec169a | ||
|
|
0ad8cc432c | ||
|
|
48deaa9f46 | ||
|
|
0899233085 | ||
|
|
39cbeefef8 | ||
|
|
98c4663f43 | ||
|
|
76c1250cc5 | ||
|
|
006593b402 | ||
|
|
f989334a11 | ||
|
|
b2949b0b7b | ||
|
|
40bd5dea2d | ||
|
|
f8619eedc8 | ||
|
|
3b5fc4e36f | ||
|
|
dde21b5bef | ||
|
|
eb286cd150 | ||
|
|
c2c9ebf14e | ||
|
|
6992d11d1c | ||
|
|
f6428c7245 | ||
|
|
5e26d111c1 | ||
|
|
b45af77b5c | ||
|
|
41f6fae742 | ||
|
|
3ee1d855bf | ||
|
|
a77af9c21f | ||
|
|
4b7c940850 | ||
|
|
295578875f | ||
|
|
1ae3ae1134 | ||
|
|
d78eb3063d | ||
|
|
a547d061b2 | ||
|
|
f58f146074 | ||
|
|
6c2de5a5bb | ||
|
|
4d9ad7315d | ||
|
|
a895090ca9 | ||
|
|
0c7ae2ba4e | ||
|
|
caa2adb45c | ||
|
|
cc75094d5f | ||
|
|
d03762425a | ||
|
|
2d58c953e1 | ||
|
|
bb329535c7 | ||
|
|
72f5fcb03e | ||
|
|
7da69e543f | ||
|
|
0b5c5a6cd8 | ||
|
|
450c04e126 | ||
|
|
8305d07ffb | ||
|
|
ff09e25ea5 | ||
|
|
be396b9581 | ||
|
|
6dd6d93bb8 | ||
|
|
98d921527c | ||
|
|
c01bdeb393 | ||
|
|
f6610849eb | ||
|
|
d0c2335f35 | ||
|
|
cc9fc3a2f9 | ||
|
|
023c8bbae2 | ||
|
|
5c12a47f11 | ||
|
|
cc1b7527fe | ||
|
|
2f6b385f2f | ||
|
|
6c06f7107b | ||
|
|
da81619140 | ||
|
|
6c4fc52511 | ||
|
|
ccb9aa8c1d | ||
|
|
940ad7e622 | ||
|
|
f7fb380233 | ||
|
|
c0b9be502b | ||
|
|
66cd8d988e | ||
|
|
955af0fc9e | ||
|
|
9730e0ce45 | ||
|
|
94373dd5e8 | ||
|
|
87282969de | ||
|
|
6a6286755e | ||
|
|
5866049618 | ||
|
|
3cba8eaa48 | ||
|
|
cd89faac07 | ||
|
|
ea8944a1dc | ||
|
|
1e6e9a43bd | ||
|
|
68c1ea0515 | ||
|
|
419fceba0c | ||
|
|
9fba750712 | ||
|
|
de9e9dc73e | ||
|
|
0f13af9692 | ||
|
|
7133361277 | ||
|
|
bc01beac6a | ||
|
|
18ff862a4a | ||
|
|
c6ef97a88b | ||
|
|
67a17a0113 | ||
|
|
e5f2051412 | ||
|
|
bbdedb1a56 | ||
|
|
cd595f1bd1 | ||
|
|
e89a05fcbf | ||
|
|
048908f2ba | ||
|
|
cc23f2d634 | ||
|
|
4d85b3353f | ||
|
|
a757ed1210 | ||
|
|
2994653972 | ||
|
|
6716e687d1 | ||
|
|
18dccd7773 | ||
|
|
88494e2ed3 | ||
|
|
87e84a658f | ||
|
|
949a6b9d1e | ||
|
|
3b6137ec36 | ||
|
|
e1bc7e939a | ||
|
|
8bf0ef473d | ||
|
|
79f7103179 | ||
|
|
38fa30a028 | ||
|
|
a2a2820098 | ||
|
|
3a896882c9 | ||
|
|
8af0c44eba | ||
|
|
d9440953ac | ||
|
|
8528e0ff01 | ||
|
|
7db6835173 | ||
|
|
7fc9304834 | ||
|
|
b6e9f38bac | ||
|
|
3320a8d027 | ||
|
|
2b54537acb | ||
|
|
d546d79759 | ||
|
|
57e20929b3 | ||
|
|
d45be4e61d | ||
|
|
8fbf63a783 | ||
|
|
d03c461739 |
31
.circleci/config.yml
Normal file
31
.circleci/config.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
version: 2.1
|
||||
jobs:
|
||||
build:
|
||||
working_directory: ~/project
|
||||
docker:
|
||||
- image: bkuhlmann/alpine-ruby:latest
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
name: Gems Restore
|
||||
keys:
|
||||
- gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
||||
- gem-cache-
|
||||
|
||||
- run:
|
||||
name: Gems Install
|
||||
command: |
|
||||
gem update --system
|
||||
bundle config set path "vendor/bundle"
|
||||
bundle install
|
||||
|
||||
- save_cache:
|
||||
name: Gems Store
|
||||
key: gem-cache-{{.Branch}}-{{checksum "Gemfile"}}
|
||||
paths:
|
||||
- vendor/bundle
|
||||
|
||||
- run:
|
||||
name: Rake
|
||||
command: bundle exec rake
|
||||
2
.config/rubocop/config.yml
Normal file
2
.config/rubocop/config.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
inherit_gem:
|
||||
caliber: config/all.yml
|
||||
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
github: [bkuhlmann]
|
||||
20
.github/ISSUE_TEMPLATE.md
vendored
20
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,16 +1,8 @@
|
||||
## Expected Behavior
|
||||
<!-- Required. Describe, in detail, the behavior experienced. -->
|
||||
## Why
|
||||
<!-- Required. Describe, briefly, why this issue is important. -->
|
||||
|
||||
## Actual Behavior
|
||||
<!-- Required. Describe, in detail, what should be the correct behavior. -->
|
||||
## How
|
||||
<!-- Optional. List exact steps (numbered) to implement or reproduce behavior. Screen shots/casts are welcome. -->
|
||||
|
||||
## Steps to Recreate
|
||||
<!-- Required. List the exact steps to the reproduce errant behavior. -->
|
||||
|
||||
0.
|
||||
|
||||
## Environment
|
||||
<!-- Optional. What is your operating system, software version(s), etc. Delete if unused. -->
|
||||
|
||||
## Screenshots/Screencasts
|
||||
<!-- Optional. Attach screenshots/screencasts that demo the behavior. Delete if unused. -->
|
||||
## Notes
|
||||
<!-- Optional. Provide additional details (i.e operating system, software version(s), stack dump, etc.) -->
|
||||
|
||||
11
.github/PULL_REQUEST_TEMPLATE.md
vendored
11
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,11 +1,8 @@
|
||||
## Overview
|
||||
<!-- Required. Why is this important/necessary? -->
|
||||
<!-- Required. Why is this important/necessary and what is the overarching architecture. -->
|
||||
|
||||
## Screenshots/Screencasts
|
||||
<!-- Optional. Provide supporting image/video. -->
|
||||
|
||||
## Details
|
||||
<!-- Optional. List the key features/highlights as bullet points. -->
|
||||
|
||||
## Notes
|
||||
<!-- Optional. List additional notes/references as bullet points. Delete if unused. -->
|
||||
|
||||
## Screenshots/Screencasts
|
||||
<!-- Optional. Provide image/video support. Delete if unused. -->
|
||||
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Gemfile.lock
|
||||
1
.ruby-version
Normal file
1
.ruby-version
Normal file
@@ -0,0 +1 @@
|
||||
3.3.1
|
||||
@@ -1,3 +0,0 @@
|
||||
# v1.0.0 (2016-10-05)
|
||||
|
||||
- Initial version.
|
||||
21
CITATION.cff
Normal file
21
CITATION.cff
Normal file
@@ -0,0 +1,21 @@
|
||||
cff-version: 1.2.0
|
||||
message: Please use the following metadata when citing this project in your work.
|
||||
title: macOS
|
||||
abstract: Shell scripts for automated macOS machine setup.
|
||||
version: 18.2.1
|
||||
license: Hippocratic-2.1
|
||||
date-released: 2024-05-02
|
||||
authors:
|
||||
- family-names: Kuhlmann
|
||||
given-names: Brooke
|
||||
affiliation: Alchemists
|
||||
orcid: https://orcid.org/0000-0002-5810-6268
|
||||
keywords:
|
||||
- bash
|
||||
- shell
|
||||
- scripts
|
||||
- automation
|
||||
- setup
|
||||
- recovery
|
||||
repository-code: https://alchemists.io/projects/mac_os
|
||||
repository-artifact: https://alchemists.io/projects/mac_os
|
||||
@@ -1,61 +0,0 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making
|
||||
participation in our project and our community a harassment-free experience for everyone, regardless of age, body size,
|
||||
disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race,
|
||||
religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take
|
||||
appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
|
||||
issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any
|
||||
contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the
|
||||
project or its community. Examples of representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed representative at an online or offline
|
||||
event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at
|
||||
[brooke@alchemists.io](mailto:brooke@alchemists.io). All complaints will be reviewed and investigated and will result in
|
||||
a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain
|
||||
confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be
|
||||
posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent
|
||||
repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
@@ -1,35 +0,0 @@
|
||||
# Overview
|
||||
|
||||
Thanks for taking an interest in this open source project. Your support and involvement is greatly appreciated. The
|
||||
following details what you need to know in order to contribute.
|
||||
|
||||
# Requirements
|
||||
|
||||
- Follow these [Basic Programming Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/basic.md).
|
||||
- Follow these [Code Review Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/code_reviews.md).
|
||||
- Follow these [Git Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/git.md).
|
||||
- Follow these [Bash Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/languages/bash.md).
|
||||
- Follow these [CSS Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/languages/css.md).
|
||||
- Follow these [Ruby Styles](https://github.com/bkuhlmann/style_guides/blob/master/programming/languages/ruby/ruby.md).
|
||||
|
||||
# Contributing Code
|
||||
|
||||
0. Read the project README thoroughly before starting.
|
||||
0. Fork the master branch of the repository.
|
||||
0. Ensure there are no setup, usage, and/or test issues (again, follow the README).
|
||||
0. Add tests for new functionality (refactoring and documentation changes can be excluded).
|
||||
0. Ensure all tests pass.
|
||||
0. Push your feature branch and submit a pull request.
|
||||
|
||||
# Submitting Issues
|
||||
|
||||
0. Submit an issue via the GitHub Issues tab (assuming one does not already exist).
|
||||
0. Clearly describe the issue (including steps to reproduce).
|
||||
0. Specify your enviroment setup (OS, browser, language, etc. with version info).
|
||||
0. Provide a stack dump (if possible).
|
||||
0. Explain any additional details that might help diagnose the problem quickly.
|
||||
|
||||
# Feedback
|
||||
|
||||
Expect a response within one to three business days.
|
||||
Changes, alternatives, and/or improvements might be suggested upon review.
|
||||
10
Gemfile
Normal file
10
Gemfile
Normal file
@@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
ruby file: ".ruby-version"
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "caliber", "~> 0.51"
|
||||
gem "debug", "~> 1.9"
|
||||
gem "git-lint", "~> 7.3"
|
||||
gem "rake", "~> 13.2"
|
||||
134
LICENSE.adoc
Normal file
134
LICENSE.adoc
Normal file
@@ -0,0 +1,134 @@
|
||||
= Hippocratic License
|
||||
|
||||
Version: 2.1.0.
|
||||
|
||||
Purpose. The purpose of this License is for the Licensor named above to
|
||||
permit the Licensee (as defined below) broad permission, if consistent
|
||||
with Human Rights Laws and Human Rights Principles (as each is defined
|
||||
below), to use and work with the Software (as defined below) within the
|
||||
full scope of Licensor’s copyright and patent rights, if any, in the
|
||||
Software, while ensuring attribution and protecting the Licensor from
|
||||
liability.
|
||||
|
||||
Permission and Conditions. The Licensor grants permission by this
|
||||
license ("License"), free of charge, to the extent of Licensor’s
|
||||
rights under applicable copyright and patent law, to any person or
|
||||
entity (the "Licensee") obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to do everything with
|
||||
the Software that would otherwise infringe (i) the Licensor’s copyright
|
||||
in the Software or (ii) any patent claims to the Software that the
|
||||
Licensor can license or becomes able to license, subject to all of the
|
||||
following terms and conditions:
|
||||
|
||||
* Acceptance. This License is automatically offered to every person and
|
||||
entity subject to its terms and conditions. Licensee accepts this
|
||||
License and agrees to its terms and conditions by taking any action with
|
||||
the Software that, absent this License, would infringe any intellectual
|
||||
property right held by Licensor.
|
||||
* Notice. Licensee must ensure that everyone who gets a copy of any part
|
||||
of this Software from Licensee, with or without changes, also receives
|
||||
the License and the above copyright notice (and if included by the
|
||||
Licensor, patent, trademark and attribution notice). Licensee must cause
|
||||
any modified versions of the Software to carry prominent notices stating
|
||||
that Licensee changed the Software. For clarity, although Licensee is
|
||||
free to create modifications of the Software and distribute only the
|
||||
modified portion created by Licensee with additional or different terms,
|
||||
the portion of the Software not modified must be distributed pursuant to
|
||||
this License. If anyone notifies Licensee in writing that Licensee has
|
||||
not complied with this Notice section, Licensee can keep this License by
|
||||
taking all practical steps to comply within 30 days after the notice. If
|
||||
Licensee does not do so, Licensee’s License (and all rights licensed
|
||||
hereunder) shall end immediately.
|
||||
* Compliance with Human Rights Principles and Human Rights Laws.
|
||||
[arabic]
|
||||
. Human Rights Principles.
|
||||
[loweralpha]
|
||||
.. Licensee is advised to consult the articles of the United Nations
|
||||
Universal Declaration of Human Rights and the United Nations Global
|
||||
Compact that define recognized principles of international human rights
|
||||
(the "Human Rights Principles"). Licensee shall use the Software in a
|
||||
manner consistent with Human Rights Principles.
|
||||
.. Unless the Licensor and Licensee agree otherwise, any dispute,
|
||||
controversy, or claim arising out of or relating to (i) Section 1(a)
|
||||
regarding Human Rights Principles, including the breach of Section 1(a),
|
||||
termination of this License for breach of the Human Rights Principles,
|
||||
or invalidity of Section 1(a) or (ii) a determination of whether any Law
|
||||
is consistent or in conflict with Human Rights Principles pursuant to
|
||||
Section 2, below, shall be settled by arbitration in accordance with the
|
||||
Hague Rules on Business and Human Rights Arbitration (the "Rules");
|
||||
provided, however, that Licensee may elect not to participate in such
|
||||
arbitration, in which event this License (and all rights licensed
|
||||
hereunder) shall end immediately. The number of arbitrators shall be one
|
||||
unless the Rules require otherwise.
|
||||
+
|
||||
Unless both the Licensor and Licensee agree to the contrary: (1) All
|
||||
documents and information concerning the arbitration shall be public and
|
||||
may be disclosed by any party; (2) The repository referred to under
|
||||
Article 43 of the Rules shall make available to the public in a timely
|
||||
manner all documents concerning the arbitration which are communicated
|
||||
to it, including all submissions of the parties, all evidence admitted
|
||||
into the record of the proceedings, all transcripts or other recordings
|
||||
of hearings and all orders, decisions and awards of the arbitral
|
||||
tribunal, subject only to the arbitral tribunal’s powers to take such
|
||||
measures as may be necessary to safeguard the integrity of the arbitral
|
||||
process pursuant to Articles 18, 33, 41 and 42 of the Rules; and (3)
|
||||
Article 26(6) of the Rules shall not apply.
|
||||
. Human Rights Laws. The Software shall not be used by any person or
|
||||
entity for any systems, activities, or other uses that violate any Human
|
||||
Rights Laws. "Human Rights Laws" means any applicable laws,
|
||||
regulations, or rules (collectively, "Laws") that protect human,
|
||||
civil, labor, privacy, political, environmental, security, economic, due
|
||||
process, or similar rights; provided, however, that such Laws are
|
||||
consistent and not in conflict with Human Rights Principles (a dispute
|
||||
over the consistency or a conflict between Laws and Human Rights
|
||||
Principles shall be determined by arbitration as stated above). Where
|
||||
the Human Rights Laws of more than one jurisdiction are applicable or in
|
||||
conflict with respect to the use of the Software, the Human Rights Laws
|
||||
that are most protective of the individuals or groups harmed shall
|
||||
apply.
|
||||
. Indemnity. Licensee shall hold harmless and indemnify Licensor (and
|
||||
any other contributor) against all losses, damages, liabilities,
|
||||
deficiencies, claims, actions, judgments, settlements, interest, awards,
|
||||
penalties, fines, costs, or expenses of whatever kind, including
|
||||
Licensor’s reasonable attorneys’ fees, arising out of or relating to
|
||||
Licensee’s use of the Software in violation of Human Rights Laws or
|
||||
Human Rights Principles.
|
||||
* Failure to Comply. Any failure of Licensee to act according to the
|
||||
terms and conditions of this License is both a breach of the License and
|
||||
an infringement of the intellectual property rights of the Licensor
|
||||
(subject to exceptions under Laws, e.g., fair use). In the event of a
|
||||
breach or infringement, the terms and conditions of this License may be
|
||||
enforced by Licensor under the Laws of any jurisdiction to which
|
||||
Licensee is subject. Licensee also agrees that the Licensor may enforce
|
||||
the terms and conditions of this License against Licensee through
|
||||
specific performance (or similar remedy under Laws) to the extent
|
||||
permitted by Laws. For clarity, except in the event of a breach of this
|
||||
License, infringement, or as otherwise stated in this License, Licensor
|
||||
may not terminate this License with Licensee.
|
||||
* Enforceability and Interpretation. If any term or provision of this
|
||||
License is determined to be invalid, illegal, or unenforceable by a
|
||||
court of competent jurisdiction, then such invalidity, illegality, or
|
||||
unenforceability shall not affect any other term or provision of this
|
||||
License or invalidate or render unenforceable such term or provision in
|
||||
any other jurisdiction; provided, however, subject to a court
|
||||
modification pursuant to the immediately following sentence, if any term
|
||||
or provision of this License pertaining to Human Rights Laws or Human
|
||||
Rights Principles is deemed invalid, illegal, or unenforceable against
|
||||
Licensee by a court of competent jurisdiction, all rights in the
|
||||
Software granted to Licensee shall be deemed null and void as between
|
||||
Licensor and Licensee. Upon a determination that any term or provision
|
||||
is invalid, illegal, or unenforceable, to the extent permitted by Laws,
|
||||
the court may modify this License to affect the original purpose that
|
||||
the Software be used in compliance with Human Rights Principles and
|
||||
Human Rights Laws as closely as possible. The language in this License
|
||||
shall be interpreted as to its fair meaning and not strictly for or
|
||||
against any party.
|
||||
* Disclaimer. TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE COMES
|
||||
"AS IS," WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR AND
|
||||
ANY OTHER CONTRIBUTOR SHALL NOT BE LIABLE TO ANYONE FOR ANY DAMAGES OR
|
||||
OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE
|
||||
OR THIS LICENSE, UNDER ANY KIND OF LEGAL CLAIM.
|
||||
|
||||
This Hippocratic License is an link:https://ethicalsource.dev[Ethical Source license] and is offered
|
||||
for use by licensors and licensees at their own risk, on an "AS IS" basis, and with no warranties
|
||||
express or implied, to the maximum extent permitted by Laws.
|
||||
20
LICENSE.md
20
LICENSE.md
@@ -1,20 +0,0 @@
|
||||
Copyright (c) 2016 [Alchemists](https://www.alchemists.io).
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
228
README.adoc
Normal file
228
README.adoc
Normal file
@@ -0,0 +1,228 @@
|
||||
:toc: macro
|
||||
:toclevels: 5
|
||||
:figure-caption!:
|
||||
|
||||
= macOS
|
||||
|
||||
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
|
||||
potential of what this project can do, please see the companion
|
||||
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
|
||||
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:
|
||||
|
||||
* *macOS* (this project) - The foundational framework for building custom macOS machine setups.
|
||||
* *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
|
||||
forked for as many custom machine setups as needed.
|
||||
|
||||
toc::[]
|
||||
|
||||
== Features
|
||||
|
||||
* Provides a command line interface, written in Bash, with no additional dependencies for
|
||||
installation and management of a macOS machine.
|
||||
* Supports macOS boot disk creation for fresh install of operating system.
|
||||
* Installs link:https://developer.apple.com/xcode[Xcode Command Line Tools].
|
||||
* Installs link:http://brew.sh[Homebrew] formulas and casks.
|
||||
* Installs link:http://www.apple.com/macosx/whats-new/app-store.html[App Store] software.
|
||||
* Installs non-App Store software applications.
|
||||
* Installs software application extensions.
|
||||
* Installs dotfiles.
|
||||
* 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.rust-lang.org[Rust] link:https://crates.io[crates].
|
||||
* Applies basic default software settings.
|
||||
* Configures installed software.
|
||||
* Supports restoration of machine backups.
|
||||
|
||||
== Requirements
|
||||
|
||||
. link:https://www.apple.com/macos/sonoma[macOS Sonoma]
|
||||
. link:https://developer.apple.com/xcode[Xcode]
|
||||
|
||||
== Setup
|
||||
|
||||
To install, run:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
git checkout 18.2.0
|
||||
----
|
||||
|
||||
== Usage
|
||||
|
||||
Run the following:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
bin/run
|
||||
----
|
||||
|
||||
You will be presented with the following options (listed in order of
|
||||
use):
|
||||
|
||||
....
|
||||
Boot:
|
||||
B: Create boot disk.
|
||||
Install:
|
||||
b: Apply basic settings.
|
||||
t: Install development tools.
|
||||
hf: Install Homebrew Formulas.
|
||||
hc: Install Homebrew Casks.
|
||||
m: Install Mac App Store software.
|
||||
a: Install application software.
|
||||
x: Install application software extensions.
|
||||
df: Install dotfiles.
|
||||
np: Install Node packages.
|
||||
rg: Install Ruby gems.
|
||||
rc: Install Rust crates.
|
||||
d: Apply default settings.
|
||||
cs: Configure installed software.
|
||||
i: Install everything (i.e. executes all install options in order listed).
|
||||
Restore:
|
||||
R: Restore settings from backup.
|
||||
Manage:
|
||||
c: Check status of managed software.
|
||||
C: Caffeinate machine.
|
||||
ua: Uninstall application software.
|
||||
ux: Uninstall application software extension.
|
||||
ra: Reinstall application software.
|
||||
rx: Reinstall application software extension.
|
||||
w: Clean work (temp) directory.
|
||||
q: Quit/Exit.
|
||||
....
|
||||
|
||||
Choose option `i` to run a full install or select a specific option to run a single action. Each
|
||||
option is designed to be re-run if necessary. This can also be handy for performing upgrades,
|
||||
re-running a missing/failed install, etc.
|
||||
|
||||
The option prompt can be skipped by passing the desired option directly to the `bin/run` script. For
|
||||
example, executing `bin/run i` will execute the full install process.
|
||||
|
||||
The machine should be rebooted after all install tasks have completed to ensure all settings have
|
||||
been loaded.
|
||||
|
||||
It is recommended that the `mac_os` project directory not be deleted and kept on the local machine
|
||||
in order to manage installed software and benefit from future upgrades.
|
||||
|
||||
=== Boot Disk
|
||||
|
||||
When attempting to create a boot disk via `bin/run B`, you’ll be presented with the following
|
||||
documentation (provided here for reference):
|
||||
|
||||
....
|
||||
macOS Boot Disk Tips
|
||||
- Use a USB drive (8GB or higher).
|
||||
- Use Disk Utility to format the USB drive as "Mac OS Extended (Journaled)".
|
||||
- Use Disk Utility to label the USB drive as "Untitled".
|
||||
|
||||
macOS Boot Disk Usage:
|
||||
1. Insert the USB boot disk into the machine to be upgraded.
|
||||
2. Reboot the machine.
|
||||
3. Hold the POWER (Silicon) or OPTION (Intel) key before the Apple logo appears.
|
||||
4. Select the USB boot disk from the menu.
|
||||
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".
|
||||
7. Install the new operating system.
|
||||
|
||||
macOS Boot Disk Recovery:
|
||||
1. Start/restart the machine.
|
||||
2. Hold the POWER (Silicon) or COMMAND+R (Intel) keys before the Apple logo appears.
|
||||
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.
|
||||
....
|
||||
|
||||
=== Customization
|
||||
|
||||
All executable scripts can be found in the `bin` folder:
|
||||
|
||||
* `bin/apply_basic_settings` (optional, customizable): Applies basic and initial settings for
|
||||
setting up a machine.
|
||||
* `bin/apply_default_settings` (optional, customizable): Applies bare minimum system and application
|
||||
defaults.
|
||||
* `bin/configure_software` (optional, customizable): Configures installed software as part of the
|
||||
post install process.
|
||||
* `bin/create_boot_disk` (optional): Creates a macOS boot disk.
|
||||
* `bin/install_app_store` (optional, customizable): Installs macOS, GUI-based, App Store
|
||||
applications.
|
||||
* `bin/install_applications` (optional, customizable): Installs macOS, GUI-based, non-App Store
|
||||
applications.
|
||||
* `bin/install_dev_tools` (required): Installs macOS development tools required by Homebrew.
|
||||
* `bin/install_dotfiles` (optional, customizable): Installs personal dotfiles so the system is
|
||||
tailored to your workflow.
|
||||
* `bin/install_extensions` (optional, customizable): Installs macOS application extensions and
|
||||
add-ons.
|
||||
* `bin/install_homebrew_casks` (optional, customizable): Installs Homebrew Formulas.
|
||||
* `bin/install_homebrew_formulas` (optional, customizable): Installs Homebrew Casks.
|
||||
* `bin/install_node_packages` (optional, customizable): Installs Node packages.
|
||||
* `bin/install_ruby_gems` (optional, customizable): Installs Ruby gems.
|
||||
* `bin/install_rust_crates` (optional, customizable): Installs Rust crates.
|
||||
* `bin/restore_backup` (optional, customizable): Restores system/application settings from backup
|
||||
image.
|
||||
* `bin/run` (required): The main script and interface for macOS setup.
|
||||
|
||||
The `lib` folder provides the base framework for installing, re-installing, and uninstalling
|
||||
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
|
||||
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.
|
||||
|
||||
=== Troubleshooting
|
||||
|
||||
* *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
|
||||
internet connection which prevents the installer from working.
|
||||
* *Recovery Mode*: When using the boot disk and the installer fails in some catastrophic manner,
|
||||
reboot the machine into recovery mode -- pass:[<kbd>POWER</kbd>] (Silicon) or
|
||||
pass:[<kbd>COMMAND</kbd>] + pass:[<kbd>r</kbd>] (Intel) buttons -- to download and install the
|
||||
last operating system used. Alternatively, you can also use pass:[<kbd>COMMAND</kbd>] +
|
||||
pass:[<kbd>OPTION</kbd>] + pass:[<kbd>r</kbd>] (Intel) to attempt to download the latest operating
|
||||
system.
|
||||
* *NVRAM/PRAM Reset*: When using the boot disk, you might experience a situation where you see a
|
||||
black screen with a white circle and diagonal line running through it. This means macOS lost or
|
||||
can't find the boot disk for some reason. To correct this, shut down and boot up the system again
|
||||
while holding down pass:[<kbd>OPTION</kbd>] + pass:[<kbd>COMMAND</kbd>] + pass:[<kbd>r</kbd>] +
|
||||
pass:[<kbd>p</kbd>] (Intel) keys simultaneously. You might want to wait for the system boot sound
|
||||
to happen a few times before releasing the keys. This will clear the system NVRAM/PRAM. At this
|
||||
point you can shut down and restart the system following the boot disk instructions (the boot disk
|
||||
will be recognized now).
|
||||
* *System Management Controller (SMC) Reset*: Sometimes it can help to reset the SMC to improve
|
||||
system speed. To fix, follow these steps:
|
||||
** Shut down your Mac.
|
||||
** Hold down pass:[<kbd>CONTROL</kbd>] + pass:[<kbd>OPTION</kbd>] on the left side of the keyboard
|
||||
and pass:[<kbd>SHIFT</kbd>] on the right side of the keyboard.
|
||||
** After seven seconds, hold down the Power button as well.
|
||||
** Release all keys after another seven seconds.
|
||||
** Turn on your Mac.
|
||||
|
||||
== Development
|
||||
|
||||
To contribute, run:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
----
|
||||
|
||||
== link:https://alchemists.io/policies/license[License]
|
||||
|
||||
== link:https://alchemists.io/policies/security[Security]
|
||||
|
||||
== link:https://alchemists.io/policies/code_of_conduct[Code of Conduct]
|
||||
|
||||
== link:https://alchemists.io/policies/contributions[Contributions]
|
||||
|
||||
== link:https://alchemists.io/projects/mac_os/versions[Versions]
|
||||
|
||||
== link:https://alchemists.io/community[Community]
|
||||
|
||||
== Credits
|
||||
|
||||
Engineered by link:https://alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||
150
README.md
150
README.md
@@ -1,150 +0,0 @@
|
||||
# macOS
|
||||
|
||||
[](https://www.patreon.com/bkuhlmann)
|
||||
|
||||
Shell scripts for automated macOS machine setup. This project provides the foundational tooling for
|
||||
automated macOS machine setup. To customize further see the companion
|
||||
[macOS Config](https://github.com/bkuhlmann/mac_os-config) project for details.
|
||||
|
||||
<!-- Tocer[start]: Auto-generated, don't remove. -->
|
||||
|
||||
# Table of Contents
|
||||
|
||||
- [Features](#features)
|
||||
- [Requirements](#requirements)
|
||||
- [Setup](#setup)
|
||||
- [Usage](#usage)
|
||||
- [Customization](#customization)
|
||||
- [Versioning](#versioning)
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [Contributions](#contributions)
|
||||
- [License](#license)
|
||||
- [History](#history)
|
||||
- [Credits](#credits)
|
||||
|
||||
<!-- Tocer[finish]: Auto-generated, don't remove. -->
|
||||
|
||||
# Features
|
||||
|
||||
- Provides a command line interface for installation and management of macOS software.
|
||||
- Downloads and installs development tooling (required by Homebrew):
|
||||
- [Xcode Command Line Tools](https://developer.apple.com/xcode)
|
||||
- [Java SE Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
|
||||
- Downloads, installs, and configures [Homebrew](http://brew.sh) command line software.
|
||||
- Downloads, installs, and configures software applications generally not in the
|
||||
[App Store](http://www.apple.com/macosx/whats-new/app-store.html).
|
||||
- Downloads, installs, and configures software extensions.
|
||||
|
||||
# Requirements
|
||||
|
||||
0. [macOS](https://www.apple.com/macos) (with latest software updates applied)
|
||||
0. [Xcode](https://developer.apple.com/xcode) (with accepted license agreement)
|
||||
|
||||
# Setup
|
||||
|
||||
Open a terminal window and execute one of the following setup sequences depending on your version
|
||||
preference:
|
||||
|
||||
Current Version (stable):
|
||||
|
||||
git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
git checkout v1.0.0
|
||||
|
||||
Master Version (unstable):
|
||||
|
||||
git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
|
||||
# Usage
|
||||
|
||||
Run the following script:
|
||||
|
||||
bin/run
|
||||
|
||||
You will be presented with the following options:
|
||||
|
||||
Boot:
|
||||
B: Create boot disk.
|
||||
Install:
|
||||
b: Apply basic system settings.
|
||||
t: Install development tools.
|
||||
h: Install Homebrew software.
|
||||
a: Install application software.
|
||||
x: Install application software extensions.
|
||||
d: Apply software defaults.
|
||||
s: Setup installed software.
|
||||
i: Install everything (i.e. executes all install options).
|
||||
Restore:
|
||||
R: Restore settings from backup.
|
||||
Manage:
|
||||
c: Check status of managed software.
|
||||
C: Caffeinate machine.
|
||||
ua: Uninstall application software.
|
||||
ux: Uninstall application software extension.
|
||||
ra: Reinstall application software.
|
||||
rx: Reinstall application software extension.
|
||||
w: Clean work (temp) directory.
|
||||
q: Quit/Exit.
|
||||
|
||||
Choose option `i` to run all install options or select a specific option to run a single option.
|
||||
Each option is designed to be re-run if necessary. This can also be handy for performing upgrades,
|
||||
re-running a missing/failed install, etc.
|
||||
|
||||
The option prompt can be skipped by passing the desired option directly to the run.sh script. For
|
||||
example, executing `./run.sh i` will execute the complete software install process.
|
||||
|
||||
The machine should be rebooted after all install tasks have completed to ensure all settings have
|
||||
been loaded.
|
||||
|
||||
It is recommended that the `mac_os` project directory not be deleted and kept on the local machine
|
||||
in order to manage installed software and benefit from future upgrades.
|
||||
|
||||
## Customization
|
||||
|
||||
Global settings can be configured via the following script:
|
||||
|
||||
- `lib/settings.sh`
|
||||
|
||||
All script programs can be found in the `bin` folder:
|
||||
|
||||
- `bin/create_boot_disk` = Creates macOS boot disk.
|
||||
- `bin/install_dev_tools` = Installs macOS development tools required by Homebrew.
|
||||
- `bin/run` - The main script and interface for macOS setup.
|
||||
|
||||
The `lib` folder provides foundational functions for installing, re-installing, and uninstalling
|
||||
software. Everything provided via the [macOS Config](https://github.com/bkuhlmann/mac_os-config)
|
||||
project is built upon the functions found in the `lib` folder. See the
|
||||
[macOS Config](https://github.com/bkuhlmann/mac_os-config) project for further details.
|
||||
|
||||
# Versioning
|
||||
|
||||
Read [Semantic Versioning](http://semver.org) for details. Briefly, it means:
|
||||
|
||||
- Patch (x.y.Z) - Incremented for small, backwards compatible bug fixes.
|
||||
- Minor (x.Y.z) - Incremented for new, backwards compatible public API enhancements and/or bug fixes.
|
||||
- Major (X.y.z) - Incremented for any backwards incompatible public API changes.
|
||||
|
||||
# Code of Conduct
|
||||
|
||||
Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By
|
||||
participating in this project you agree to abide by its terms.
|
||||
|
||||
# Contributions
|
||||
|
||||
Read [CONTRIBUTING](CONTRIBUTING.md) for details.
|
||||
|
||||
# License
|
||||
|
||||
Copyright (c) 2016 [Alchemists](https://www.alchemists.io).
|
||||
Read the [LICENSE](LICENSE.md) for details.
|
||||
|
||||
# History
|
||||
|
||||
Read the [CHANGELOG](CHANGELOG.md) for details.
|
||||
Built with [Bashsmith](https://github.com/bkuhlmann/bashsmith).
|
||||
|
||||
# Credits
|
||||
|
||||
Developed by [Brooke Kuhlmann](https://www.alchemists.io) at
|
||||
[Alchemists](https://www.alchemists.io).
|
||||
12
Rakefile
Normal file
12
Rakefile
Normal file
@@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "git/lint/rake/register"
|
||||
require "rubocop/rake_task"
|
||||
|
||||
Git::Lint::Rake::Register.call
|
||||
RuboCop::RakeTask.new
|
||||
|
||||
desc "Run code quality checks"
|
||||
task quality: %i[git_lint rubocop]
|
||||
|
||||
task default: :quality
|
||||
389
VERSIONS.adoc
Normal file
389
VERSIONS.adoc
Normal file
@@ -0,0 +1,389 @@
|
||||
= Versions
|
||||
|
||||
== 18.2.1 (2024-05-02)
|
||||
|
||||
* 🔼 Updated to Ruby 3.3.1 - Brooke Kuhlmann
|
||||
|
||||
== 18.2.0 (2024-04-21)
|
||||
|
||||
* 🔼 Updated RuboCop to use XDG local configuration - Brooke Kuhlmann
|
||||
* 🔼 Updated to Caliber 0.51.0 - Brooke Kuhlmann
|
||||
* 🔼 Updated to Git Lint 7.1.0 - Brooke Kuhlmann
|
||||
* 🔼 Updated to Git Lint 7.3.0 - Brooke Kuhlmann
|
||||
* 🔼 Updated to Rake 13.2.0 - Brooke Kuhlmann
|
||||
|
||||
== 18.1.0 (2024-02-25)
|
||||
|
||||
* 🔼 Updated to Caliber 0.50.0 - Brooke Kuhlmann
|
||||
* 🔁 Refactored bin script printing - Brooke Kuhlmann
|
||||
* 🔁 Refactored library functions - Brooke Kuhlmann
|
||||
|
||||
== 18.0.0 (2024-01-06)
|
||||
|
||||
* Added Rakefile quality task - Brooke Kuhlmann
|
||||
* Updated Circle CI step names - Brooke Kuhlmann
|
||||
* Updated GitHub issue template with simplified sections - Brooke Kuhlmann
|
||||
* Updated gem dependencies - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.42.0 - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.3.0 - Brooke Kuhlmann
|
||||
* Refactored Gemfile to use ruby file syntax - Brooke Kuhlmann
|
||||
|
||||
== 17.0.0 (2023-09-28)
|
||||
|
||||
* Added Debug gem - Brooke Kuhlmann
|
||||
* Updated to macOS Sonoma - Brooke Kuhlmann
|
||||
|
||||
== 16.0.4 (2023-06-19)
|
||||
|
||||
* Updated to Caliber 0.35.0 - Brooke Kuhlmann
|
||||
* Updated to Git Lint 6.0.0 - Brooke Kuhlmann
|
||||
* Updated to Refinements 11.0.0 - Brooke Kuhlmann
|
||||
|
||||
== 16.0.3 (2023-05-18)
|
||||
|
||||
* Updated to Caliber 0.30.0 - Brooke Kuhlmann
|
||||
|
||||
== 16.0.2 (2023-04-02)
|
||||
|
||||
* Fixed programs without extensions to install to user directory - Brooke Kuhlmann
|
||||
* Updated site URLs to use bare domain - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.2.1 - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.2.2 - Brooke Kuhlmann
|
||||
|
||||
== 16.0.1 (2023-02-05)
|
||||
|
||||
* Added Rake binstub - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.21.0 - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.25.0 - Brooke Kuhlmann
|
||||
* Updated to Git Lint 5.0.0 - Brooke Kuhlmann
|
||||
|
||||
== 16.0.0 (2022-12-25)
|
||||
|
||||
* Fixed Node installer to detect Node and version - Brooke Kuhlmann
|
||||
* Fixed Ruby installer to pass configuration options - Brooke Kuhlmann
|
||||
* Updated README sections - Brooke Kuhlmann
|
||||
* Updated installs for basic, default, and shell scripts - Brooke Kuhlmann
|
||||
* Updated run script to distinquish between applications and libraries - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.11.0 - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.16.0 - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.1.3 - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.2.0 - Brooke Kuhlmann
|
||||
* Updated to macOS Ventura - Brooke Kuhlmann
|
||||
* Removed configure software script - Brooke Kuhlmann
|
||||
* Removed mention of Intel CPUs from boot disk instructions - Brooke Kuhlmann
|
||||
* Removed system update from Ruby install - Brooke Kuhlmann
|
||||
* Removed uninstallers and reinstallers - Brooke Kuhlmann
|
||||
* Refactored download file function to use multi-line curl command - Brooke Kuhlmann
|
||||
|
||||
== 15.0.5 (2022-05-07)
|
||||
|
||||
* Updated to Caliber 0.6.0 - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.7.0 - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.8.0 - Brooke Kuhlmann
|
||||
|
||||
== 15.0.4 (2022-04-17)
|
||||
|
||||
* Added GitHub sponsorship configuration - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.4.0 - Brooke Kuhlmann
|
||||
* Updated to Caliber 0.5.0 - Brooke Kuhlmann
|
||||
* Updated to Git Lint 4.0.0 - Brooke Kuhlmann
|
||||
* Updated to Ruby 3.1.2 - Brooke Kuhlmann
|
||||
|
||||
== 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,36 +1,35 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Creates macOS boot disk.
|
||||
|
||||
# EXECUTION
|
||||
printf "macOS Boot Disk Tips\n"
|
||||
printf " - Use a USB drive (8GB or higher is best).\n"
|
||||
printf " - Use Disk Utility to format the USB drive (Use \"Untitled\" for the label).\n"
|
||||
printf "\nmacOS Boot Disk Usage:\n"
|
||||
printf " 1. Insert the USB boot disk into the machine to be upgraded.\n"
|
||||
printf " 2. Reboot the machine.\n"
|
||||
printf " 3. Hold down the OPTION key before the Apple logo appears.\n"
|
||||
printf " 4. Select the USB boot disk from the menu.\n"
|
||||
printf " 5. Format the machine's internal drive using Disk Utility.\n"
|
||||
printf " 6. Install the new operating system.\n"
|
||||
printf "\nmacOS Reinstall:\n"
|
||||
printf " 1. Click the Apple icon from the operating system main menu.\n"
|
||||
printf " 2. Select the \"Restart...\" menu option.\n"
|
||||
printf " 3. Hold down the COMMAND+R keys before the Apple logo appears.\n"
|
||||
printf " 4. Wait for the macOS installer to load from the recovery partition.\n"
|
||||
printf " 5. Use the dialog options to launch Disk Utility, reinstall the system, etc.\n"
|
||||
printf "%s\n" "macOS Boot Disk Tips"
|
||||
printf "%s\n" " - Use a USB drive (8GB or higher)."
|
||||
printf "%s\n" " - Use Disk Utility to format the USB drive as \"APSF\"."
|
||||
printf "%s\n" " - Use Disk Utility to label the USB drive as \"Untitled\"."
|
||||
printf "\n%s\n" "macOS Boot Disk Usage:"
|
||||
printf "%s\n" " 1. Insert the USB boot disk into the machine to be upgraded."
|
||||
printf "%s\n" " 2. Reboot the machine."
|
||||
printf "%s\n" " 3. Press and hold the POWER key before the Apple logssssso appears."
|
||||
printf "%s\n" " 4. Select the USB boot disk from the menu."
|
||||
printf "%s\n" " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions."
|
||||
printf "%s\n" " 6. Use Disk Utility to create a single \"APFS\" drive."
|
||||
printf "%s\n" " 7. Install the new operating system."
|
||||
printf "\n%s\n" "macOS Boot Disk Recovery:"
|
||||
printf "%s\n" " 1. Start/restart the machine."
|
||||
printf "%s\n" " 2. Press and hold the POWER key before the Apple logo appears."
|
||||
printf "%s\n" " 3. Wait for the macOS installer to load from the recovery partition."
|
||||
printf "%s\n" " 4. Use the dialog options to launch Disk Utility, reinstall the system, etc."
|
||||
|
||||
printf "\nCreating macOS boot disk...\n"
|
||||
printf "\n%s\n" "Creating macOS boot disk..."
|
||||
|
||||
if [[ ! -d "$MAC_OS_INSTALLER_PATH" ]]; then
|
||||
printf "ERROR: macOS installer does not exist: $MAC_OS_INSTALLER_PATH. Use the App Store to download.\n"
|
||||
if [[ ! -e "$MAC_OS_BOOT_DISK_CREATOR" ]]; then
|
||||
printf "%s\n" "ERROR: macOS installer does not exist: $MAC_OS_BOOT_DISK_CREATOR. Use System Preferences → Software Update to download."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -d "$MAC_OS_BOOT_DISK_PATH" ]]; then
|
||||
printf "ERROR: Boot disk must be mounted at: $MAC_OS_BOOT_DISK_PATH.\n"
|
||||
printf "%s\n" "ERROR: Boot disk must be mounted at: $MAC_OS_BOOT_DISK_PATH."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo "$MAC_OS_BOOT_DISK_CREATOR" --volume "$MAC_OS_BOOT_DISK_PATH" --applicationpath "$MAC_OS_INSTALLER_PATH" --nointeraction
|
||||
sudo "$MAC_OS_BOOT_DISK_CREATOR" --volume "$MAC_OS_BOOT_DISK_PATH" --downloadassets --nointeraction
|
||||
|
||||
17
bin/install_app_store
Executable file
17
bin/install_app_store
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs App Store software.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_app_store"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
check_mas_install
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: App Store install script does not exist or is not executable."
|
||||
fi
|
||||
16
bin/install_applications
Executable file
16
bin/install_applications
Executable file
@@ -0,0 +1,16 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs applications.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_applications"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Applications install script does not exist or is not executable."
|
||||
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,16 +1,17 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Installs development tooling requirements.
|
||||
|
||||
printf "Installing Xcode CLI tools...\n"
|
||||
printf "%s\n" "Installing Xcode CLI tools..."
|
||||
xcode-select --install
|
||||
|
||||
read -p "Have you completed the Xcode CLI tools install (y/n)? " response
|
||||
if [[ "$response" != "y" ]]; then
|
||||
printf "ERROR: Xcode CLI tools must be installed before proceeding.\n"
|
||||
printf "%s\n" "💡 ALT+TAB to view and accept Xcode license window."
|
||||
read -p "Have you completed the Xcode CLI tools install (y/n)? " xcode_response
|
||||
if [[ "$xcode_response" != "y" ]]; then
|
||||
printf "%s\n" "ERROR: Xcode CLI tools must be installed before proceeding."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf "Installing Java...\n"
|
||||
install_java "$JAVA_URL" "$JAVA_VOLUME_NAME"
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
softwareupdate --install-rosetta --agree-to-license
|
||||
fi
|
||||
|
||||
16
bin/install_extensions
Executable file
16
bin/install_extensions
Executable file
@@ -0,0 +1,16 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs application extensions.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_extensions"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Application extensions install script does not exist or is not executable."
|
||||
fi
|
||||
17
bin/install_homebrew_casks
Executable file
17
bin/install_homebrew_casks
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew Cask software.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
install_homebrew
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Homebrew Casks install script does not exist or is not executable."
|
||||
fi
|
||||
17
bin/install_homebrew_formulas
Executable file
17
bin/install_homebrew_formulas
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew Formula software.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
install_homebrew
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Homebrew Formulas install script does not exist or is not executable."
|
||||
fi
|
||||
17
bin/install_node_packages
Executable file
17
bin/install_node_packages
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Node packages.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_node_packages"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
install_node
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Node packages install script does not exist or is not executable."
|
||||
fi
|
||||
17
bin/install_ruby_gems
Executable file
17
bin/install_ruby_gems
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Ruby gems.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_ruby_gems"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
install_ruby
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Ruby gems install script does not exist or is not executable."
|
||||
fi
|
||||
17
bin/install_rust_crates
Executable file
17
bin/install_rust_crates
Executable file
@@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Rust crates.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_rust_crates"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
install_rust
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Rust crates install script does not exist or is not executable."
|
||||
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"
|
||||
16
bin/restore_backup
Executable file
16
bin/restore_backup
Executable file
@@ -0,0 +1,16 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Performs restoration of backup data.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/restore_backup"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "%s\n" "WARNING: Restore backup script does not exist or is not executable."
|
||||
fi
|
||||
81
bin/run
81
bin/run
@@ -1,66 +1,61 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Executes the command line interface.
|
||||
|
||||
# USAGE
|
||||
# ./run.sh OPTION
|
||||
|
||||
# LIBRARY
|
||||
source lib/installers.sh
|
||||
source lib/options.sh
|
||||
source lib/reinstallers.sh
|
||||
source lib/restorers.sh
|
||||
source lib/settings.sh
|
||||
source lib/uninstallers.sh
|
||||
source lib/utilities.sh
|
||||
source lib/verifiers.sh
|
||||
|
||||
if [[ -e "$MAC_OS_CONFIG_PATH" ]]; then
|
||||
source "$MAC_OS_CONFIG_PATH/lib/settings.sh"
|
||||
else
|
||||
printf "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH.\n\n"
|
||||
printf "Please check the following before continuing:\n"
|
||||
printf " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config.\n"
|
||||
printf " • Customize as necessary for your setup or fork the project and make your own configuration.\n"
|
||||
printf " • When finished, your folder structure should look like this:\n"
|
||||
printf " • <root path>/mac_os:\n"
|
||||
printf " • <root path>/mac_os-config:\n"
|
||||
printf "%s\n\n" "ERROR: Unable to load macOS configuration: $MAC_OS_CONFIG_PATH."
|
||||
printf "%s\n" "Please check the following before continuing:"
|
||||
printf "%s\n" " • Download the default macOS configuration here: https://github.com/bkuhlmann/mac_os-config."
|
||||
printf "%s\n" " • Customize as necessary for your setup or fork the project and make your own configuration."
|
||||
printf "%s\n" " • When finished, your folder structure should look like this:"
|
||||
printf "%s\n" " • <root path>/mac_os:"
|
||||
printf "%s\n" " • <root path>/mac_os-config:"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# EXECUTION
|
||||
configure_environment
|
||||
|
||||
while true; do
|
||||
if [[ $# == 0 ]]; then
|
||||
printf "\nUsage: run OPTION\n"
|
||||
printf "\nOSX Options:\n"
|
||||
printf " Boot:\n"
|
||||
printf " B: Create boot disk.\n"
|
||||
printf " Install:\n"
|
||||
printf " b: Apply basic settings.\n"
|
||||
printf " t: Install development tools.\n"
|
||||
printf " h: Install Homebrew software.\n"
|
||||
printf " a: Install application software.\n"
|
||||
printf " x: Install application software extensions.\n"
|
||||
printf " d: Apply default settings.\n"
|
||||
printf " s: Setup installed software.\n"
|
||||
printf " i: Install everything (i.e. executes all install options).\n"
|
||||
printf " Restore:\n"
|
||||
printf " R: Restore settings from backup.\n"
|
||||
printf " Manage:\n"
|
||||
printf " c: Check status of managed software.\n"
|
||||
printf " C: Caffeinate machine.\n"
|
||||
printf " ua: Uninstall application software.\n"
|
||||
printf " ux: Uninstall application software extension.\n"
|
||||
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"
|
||||
printf "\n%s\n" "Usage: run OPTION"
|
||||
printf "\n%s\n" "OSX Options:"
|
||||
printf "%s\n" " Boot:"
|
||||
printf "%s\n" " B: Create boot disk."
|
||||
printf "%s\n" " Install:"
|
||||
printf "%s\n" " b: Install basics."
|
||||
printf "%s\n" " t: Install development tools."
|
||||
printf "%s\n" " hf: Install Homebrew Formulas."
|
||||
printf "%s\n" " hc: Install Homebrew Casks."
|
||||
printf "%s\n" " m: Install Mac App Store software."
|
||||
printf "%s\n" " a: Install application software."
|
||||
printf "%s\n" " x: Install application software extensions."
|
||||
printf "%s\n" " d: Install defaults."
|
||||
printf "%s\n" " s: Install shell."
|
||||
printf "%s\n" " r: Restore backups."
|
||||
printf "%s\n" " i: Install all (i.e. executes all of the above steps in order listed)."
|
||||
printf "%s\n" " Libraries:"
|
||||
printf "%s\n" " np: Install Node packages."
|
||||
printf "%s\n" " rg: Install Ruby gems."
|
||||
printf "%s\n" " rc: Install Rust crates."
|
||||
printf "%s\n" " l: Install libraries (i.e. executes all of the above steps in order listed)."
|
||||
printf "%s\n" " Manage:"
|
||||
printf "%s\n" " c: Check status of managed software."
|
||||
printf "%s\n" " C: Caffeinate machine."
|
||||
printf "%s\n" " w: Clean work (temp) directory."
|
||||
printf "%s\n\n" " q: Quit/Exit."
|
||||
read -p "Enter selection: " response
|
||||
printf "\n"
|
||||
process_option $response
|
||||
process_option "$response"
|
||||
else
|
||||
process_option $1
|
||||
process_option "$1"
|
||||
fi
|
||||
|
||||
break
|
||||
|
||||
@@ -1,149 +1,74 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines software installer functions.
|
||||
|
||||
# Mounts a disk image.
|
||||
# Parameters:
|
||||
# $1 = The image path.
|
||||
mount_image() {
|
||||
printf "Mounting image...\n"
|
||||
hdiutil attach -quiet -nobrowse -noautoopen "$1"
|
||||
}
|
||||
export -f mount_image
|
||||
|
||||
# Unmounts a disk image.
|
||||
# Parameters:
|
||||
# $1 = The mount path.
|
||||
unmount_image() {
|
||||
printf "Unmounting image...\n"
|
||||
hdiutil detach -force "$1"
|
||||
}
|
||||
export -f unmount_image
|
||||
|
||||
# Downloads an installer to local disk.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The file name.
|
||||
# $3 = The HTTP header.
|
||||
download_installer() {
|
||||
# Label: Download File
|
||||
# Description: Download remote file to local disk.
|
||||
# Parameters: $1 (required): URL, $2 (required): File name, $3 (optional): HTTP header.
|
||||
download_file() {
|
||||
local url="$1"
|
||||
local file_name="$2"
|
||||
local http_header="$3"
|
||||
|
||||
printf "%s\n" "Downloading $1..."
|
||||
clean_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"
|
||||
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"
|
||||
}
|
||||
export -f download_installer
|
||||
export -f download_file
|
||||
|
||||
# Downloads an installer to the $HOME/Downloads folder for manual use.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The file name.
|
||||
download_only() {
|
||||
if [[ -e "$HOME/Downloads/$2" ]]; then
|
||||
printf "Downloaded: $2.\n"
|
||||
else
|
||||
printf "Downloading $1...\n"
|
||||
download_installer "$1" "$2"
|
||||
mv "$MAC_OS_WORK_PATH/$2" "$HOME/Downloads"
|
||||
fi
|
||||
}
|
||||
export -f download_only
|
||||
|
||||
# Installs a single file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The install path.
|
||||
install_file() {
|
||||
local file_url="$1"
|
||||
local file_name=$(get_file_name "$1")
|
||||
local install_path="$2"
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
printf "Installing: $install_path...\n"
|
||||
download_installer "$file_url" "$file_name"
|
||||
mkdir -p $(dirname "$install_path")
|
||||
mv "$MAC_OS_WORK_PATH/$file_name" "$install_path"
|
||||
printf "Installed: $file_name.\n"
|
||||
verify_path "$install_path"
|
||||
fi
|
||||
}
|
||||
export -f install_file
|
||||
|
||||
# Installs an application.
|
||||
# Parameters:
|
||||
# $1 = The application source path.
|
||||
# $2 = The application name.
|
||||
# Label: Install Application
|
||||
# Description: Install an application.
|
||||
# Parameters: $1 (required): Install path, $2 (required): Name.
|
||||
install_app() {
|
||||
local install_root=$(get_install_root "$2")
|
||||
local file_extension=$(get_file_extension "$2")
|
||||
local install_path="$1"
|
||||
local name="$2"
|
||||
local install_root=""
|
||||
local file_extension=""
|
||||
|
||||
printf "Installing: $install_root/$2...\n"
|
||||
install_root=$(get_install_root "$name")
|
||||
file_extension=$(get_extension "$name")
|
||||
|
||||
printf "%s\n" "Installing: $install_root/$name..."
|
||||
|
||||
case $file_extension in
|
||||
'')
|
||||
cp -a "$install_path/$name" "$install_root";;
|
||||
'app')
|
||||
cp -a "$1/$2" "$install_root";;
|
||||
cp -a "$install_path/$name" "$install_root";;
|
||||
'prefPane')
|
||||
sudo cp -pR "$1/$2" "$install_root";;
|
||||
sudo cp -pR "$install_path/$name" "$install_root";;
|
||||
'qlgenerator')
|
||||
sudo cp -pR "$1/$2" "$install_root" && qlmanage -r;;
|
||||
sudo cp -pR "$install_path/$name" "$install_root" && qlmanage -r;;
|
||||
*)
|
||||
printf "ERROR: Unknown file extension: $file_extension.\n"
|
||||
printf "%s\n" "ERROR: Unknown file extension: $file_extension."
|
||||
esac
|
||||
}
|
||||
export -f install_app
|
||||
|
||||
# Installs a package.
|
||||
# Parameters:
|
||||
# $1 = The package source path.
|
||||
# $2 = The application name.
|
||||
install_pkg() {
|
||||
local install_root=$(get_install_root "$2")
|
||||
|
||||
printf "Installing: $install_root/$2...\n"
|
||||
local package=$(sudo find "$1" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg")
|
||||
sudo installer -pkg "$package" -target /
|
||||
}
|
||||
export -f install_pkg
|
||||
|
||||
# Installs Java.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The volume name.
|
||||
install_java() {
|
||||
local url="$1"
|
||||
local volume_path="/Volumes/$2"
|
||||
local app_name="java"
|
||||
local install_path="/usr/bin/$app_name"
|
||||
local download_file="download.dmg"
|
||||
|
||||
download_installer "$url" "$download_file" "Cookie: oraclelicense=accept-securebackup-cookie"
|
||||
mount_image "$MAC_OS_WORK_PATH/$download_file"
|
||||
local package=$(sudo find "$volume_path" -maxdepth 1 -type f -name "*.pkg")
|
||||
sudo installer -pkg "$package" -target /
|
||||
unmount_image "$volume_path"
|
||||
printf "Installed: $app_name.\n"
|
||||
}
|
||||
export -f install_java
|
||||
|
||||
# Installs an application via a DMG file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The mount path.
|
||||
# $3 = The application name.
|
||||
# Label: Install DMG Application
|
||||
# Description: Install DMG application.
|
||||
# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name.
|
||||
install_dmg_app() {
|
||||
local url="$1"
|
||||
local mount_point="/Volumes/$2"
|
||||
local app_name="$3"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local download_file="download.dmg"
|
||||
local install_path=""
|
||||
local work_file="download.dmg"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_installer "$url" "$download_file"
|
||||
mount_image "$MAC_OS_WORK_PATH/$download_file"
|
||||
download_file "$url" "$work_file"
|
||||
mount_image "$MAC_OS_WORK_PATH/$work_file"
|
||||
install_app "$mount_point" "$app_name"
|
||||
unmount_image "$mount_point"
|
||||
verify_application "$app_name"
|
||||
@@ -151,139 +76,76 @@ install_dmg_app() {
|
||||
}
|
||||
export -f install_dmg_app
|
||||
|
||||
# Installs a package via a DMG file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The mount path.
|
||||
# $3 = The application name.
|
||||
# Label: Install DMG Package
|
||||
# Description: Install DMG application via a package file.
|
||||
# Parameters: $1 (required): URL, $2 (required): Mount path, $3 (required): Application name.
|
||||
install_dmg_pkg() {
|
||||
local url="$1"
|
||||
local mount_point="/Volumes/$2"
|
||||
local app_name="$3"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local download_file="download.dmg"
|
||||
local install_path=""
|
||||
local work_file="download.dmg"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_installer "$url" "$download_file"
|
||||
mount_image "$MAC_OS_WORK_PATH/$download_file"
|
||||
download_file "$url" "$work_file"
|
||||
mount_image "$MAC_OS_WORK_PATH/$work_file"
|
||||
install_pkg "$mount_point" "$app_name"
|
||||
unmount_image "$mount_point"
|
||||
printf "Installed: $app_name.\n"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_dmg_pkg
|
||||
|
||||
# Installs an application via a zip file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The application name.
|
||||
install_zip_app() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local download_file="download.zip"
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_installer "$url" "$download_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
unzip -q "$download_file"
|
||||
)
|
||||
|
||||
install_app "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "Installed: $app_name.\n"
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_zip_app
|
||||
|
||||
# Installs an application via a tar file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The application name.
|
||||
# $3 = The decompress options.
|
||||
install_tar_app() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local options="$3"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local download_file="download.tar"
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_installer "$url" "$download_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
tar "$options" "$download_file"
|
||||
)
|
||||
|
||||
install_app "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "Installed: $app_name.\n"
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_tar_app
|
||||
|
||||
# Installs a package via a zip file.
|
||||
# Parameters:
|
||||
# $1 = The URL.
|
||||
# $2 = The application name.
|
||||
install_zip_pkg() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local download_file="download.zip"
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_installer "$url" "$download_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
unzip -q "$download_file"
|
||||
)
|
||||
|
||||
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "Installed: $app_name.\n"
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_zip_pkg
|
||||
|
||||
# Installs application code from a Git repository.
|
||||
# Parameters:
|
||||
# $1 = Repository URL.
|
||||
# $2 = Install path.
|
||||
# $3 = Git clone options (if any).
|
||||
install_git_app() {
|
||||
local repository_url="$1"
|
||||
local app_name=$(get_file_name "$2")
|
||||
# Label: Install File
|
||||
# Description: Install a single file.
|
||||
# Parameters: $1 (required): URL, $2 (required): Install path.
|
||||
install_file() {
|
||||
local file_url="$1"
|
||||
local file_name=""
|
||||
local install_path="$2"
|
||||
|
||||
file_name=$(get_basename "$1")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$file_url" "$file_name"
|
||||
mkdir -p $(dirname "$install_path")
|
||||
mv "$MAC_OS_WORK_PATH/$file_name" "$install_path"
|
||||
printf "%s\n" "Installed: $file_name."
|
||||
verify_path "$install_path"
|
||||
fi
|
||||
}
|
||||
export -f install_file
|
||||
|
||||
# Label: Install Git Application
|
||||
# Description: Install application from a Git repository.
|
||||
# Parameters: $1 (required): URL, $2 (required): Install path, $3 (optional): Git clone options.
|
||||
install_git_app() {
|
||||
local url="$1"
|
||||
local install_path="$2"
|
||||
local app_name=""
|
||||
local options="--quiet"
|
||||
|
||||
app_name="$(get_basename "$2")"
|
||||
|
||||
if [[ -n "$3" ]]; then
|
||||
local options="$options $3"
|
||||
fi
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
printf "Installing: $install_path/$app_name...\n"
|
||||
git clone $options "$repository_url" "$install_path"
|
||||
printf "Installed: $app_name.\n"
|
||||
printf "%s\n" "Installing: $install_path..."
|
||||
git clone $options "$url" "$install_path"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_path "$install_path"
|
||||
fi
|
||||
}
|
||||
export -f install_git_app
|
||||
|
||||
# Installs settings from a Git repository.
|
||||
# Parameters:
|
||||
# $1 = The repository URL.
|
||||
# $2 = The repository version.
|
||||
# $3 = The project directory.
|
||||
# $4 = The script to run (including any arguments).
|
||||
# Label: Install Git Project
|
||||
# Description: Install Git project.
|
||||
# Parameters: $1 (required): URL, $2 (required): Version, $3 (required): Project directory, $4 (required): Script to run (including any arguments).
|
||||
install_git_project() {
|
||||
local repo_url="$1"
|
||||
local repo_version="$2"
|
||||
@@ -293,9 +155,213 @@ install_git_project() {
|
||||
git clone "$repo_url"
|
||||
(
|
||||
cd "$project_dir"
|
||||
git checkout "$repo_version"
|
||||
git -c advice.detachedHead=false checkout "$repo_version"
|
||||
eval "$script"
|
||||
)
|
||||
rm -rf "$project_dir"
|
||||
}
|
||||
export -f install_git_project
|
||||
|
||||
# Label: Install Homebrew
|
||||
# Description: Install and setup Homebrew.
|
||||
install_homebrew() {
|
||||
if ! command -v brew > /dev/null; then
|
||||
/bin/bash -c "$(curl --location --fail --silent --show-error https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
echo "eval \"($(get_homebrew_bin_root)/brew shellenv)\"" > "$HOME/.zprofile"
|
||||
eval "$($(get_homebrew_bin_root)/brew shellenv)"
|
||||
fi
|
||||
}
|
||||
export -f install_homebrew
|
||||
|
||||
# Label: Install Bare Package
|
||||
# Description: Install a bare package.
|
||||
# Parameters: $1 (required): URL, $2 (required): Application name.
|
||||
install_bare_pkg() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=""
|
||||
local work_file="$app_name.pkg"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$work_file"
|
||||
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_bare_pkg
|
||||
|
||||
# Label: Install Package
|
||||
# Description: Install local package.
|
||||
# Parameters: $1 (required): Package source path, $2 (required): Application name.
|
||||
install_pkg() {
|
||||
local source_path="$1"
|
||||
local name="$2"
|
||||
local install_root=""
|
||||
local package=""
|
||||
|
||||
install_root=$(get_install_root "$name")
|
||||
package=$(sudo find "$source_path" -maxdepth 1 -type f -name "*.pkg" -o -name "*.mpkg")
|
||||
|
||||
printf "%s\n" "Installing: $install_root/$name..."
|
||||
sudo installer -pkg "$package" -target /
|
||||
}
|
||||
export -f install_pkg
|
||||
|
||||
# Label: Install Program
|
||||
# Description: Installs program without any packaging.
|
||||
# Parameters: $1 (required): URL, $2 (required): Name.
|
||||
install_program() {
|
||||
local url="$1"
|
||||
local program_name="$2"
|
||||
local install_path=""
|
||||
|
||||
install_path=$(get_install_path "$program_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$program_name"
|
||||
mv "$MAC_OS_WORK_PATH/$program_name" "$install_path"
|
||||
chmod 755 "$install_path"
|
||||
printf "%s\n" "Installed: $program_name."
|
||||
verify_application "$program_name"
|
||||
fi
|
||||
}
|
||||
export -f install_program
|
||||
|
||||
# Label: Install Node
|
||||
# Description: Install and setup Node for local development.
|
||||
install_node() {
|
||||
if [[ ! -x "$(command -v node)" ]]; then
|
||||
"$(get_homebrew_bin_root)/fnm" install --latest
|
||||
fi
|
||||
}
|
||||
export -f install_node
|
||||
|
||||
# Label: Install Ruby
|
||||
# Description: Install and setup Ruby for local development.
|
||||
install_ruby() {
|
||||
local version=""
|
||||
|
||||
version="$(cat $HOME/.ruby-version | tr -d '\n')"
|
||||
|
||||
if [[ ! -x "$(command -v ruby)" && -n $(ruby --version | grep --quiet "$version") ]]; then
|
||||
"$(get_homebrew_bin_root)"/frum install "$version" \
|
||||
--with-openssl-dir="$(brew --prefix openssl)" \
|
||||
--enable-shared \
|
||||
--disable-silent-rules
|
||||
"$(get_homebrew_bin_root)"/frum local "$version"
|
||||
fi
|
||||
}
|
||||
export -f install_ruby
|
||||
|
||||
# Label: Install Rust
|
||||
# Description: Install and setup Rust for local development.
|
||||
install_rust() {
|
||||
if ! command -v cargo > /dev/null; then
|
||||
curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh
|
||||
fi
|
||||
}
|
||||
export -f install_rust
|
||||
|
||||
# Label: Install Tar Application
|
||||
# Description: Install application from tar file.
|
||||
# Parameters: $1 (required): URL, $2 (required): Name, $3 (required): Decompress options.
|
||||
install_tar_app() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local options="$3"
|
||||
local install_path=""
|
||||
local work_file="download.tar"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$work_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
tar "$options" "$work_file"
|
||||
)
|
||||
|
||||
install_app "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_tar_app
|
||||
|
||||
# Label: Install Zip Application
|
||||
# Description: Install application from zip file.
|
||||
# Parameters: $1 (required): URL, $2 (required): Name.
|
||||
install_zip_app() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=""
|
||||
local work_file="download.zip"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$work_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
unzip -q "$work_file"
|
||||
find . -type d -name "$app_name" -print -exec cp -pR {} . > /dev/null 2>&1 \;
|
||||
)
|
||||
|
||||
install_app "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_zip_app
|
||||
|
||||
# Label: Install Zip Package
|
||||
# Description: Install application from a package within a zip file.
|
||||
# Parameters: $1 (required): URL, $2 (required): Application name.
|
||||
install_zip_pkg() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=""
|
||||
local work_file="download.zip"
|
||||
|
||||
install_path=$(get_install_path "$app_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$work_file"
|
||||
|
||||
(
|
||||
printf "Preparing...\n"
|
||||
cd "$MAC_OS_WORK_PATH"
|
||||
unzip -q "$work_file"
|
||||
)
|
||||
|
||||
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "%s\n" "Installed: $app_name."
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_zip_pkg
|
||||
|
||||
# Label: Mount Image
|
||||
# Description: Mount disk image.
|
||||
# Parameters: $1 (required): Path.
|
||||
mount_image() {
|
||||
printf "%s\n" "Mounting image..."
|
||||
hdiutil attach -quiet -nobrowse -noautoopen "$1"
|
||||
}
|
||||
export -f mount_image
|
||||
|
||||
# Label: Unmount Image
|
||||
# Description: Unmount disk image.
|
||||
# Parameters: $1 (required): Path.
|
||||
unmount_image() {
|
||||
printf "%s\n" "Unmounting image..."
|
||||
hdiutil detach -force "$1"
|
||||
}
|
||||
export -f unmount_image
|
||||
|
||||
@@ -1,55 +1,69 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines command line prompt options.
|
||||
|
||||
# Process option selection.
|
||||
# Parameters:
|
||||
# $1 = The option to process.
|
||||
|
||||
# Label: Process Option
|
||||
# Description: Run script based on selection.
|
||||
# Parameters: $1 (required): The option to process.
|
||||
process_option() {
|
||||
case $1 in
|
||||
'B')
|
||||
bin/create_boot_disk;;
|
||||
'b')
|
||||
"$MAC_OS_CONFIG_PATH/bin/apply_basic_settings";;
|
||||
bin/install_basics;;
|
||||
't')
|
||||
bin/install_dev_tools;;
|
||||
'h')
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_homebrew";;
|
||||
'hf')
|
||||
bin/install_homebrew_formulas;;
|
||||
'hc')
|
||||
bin/install_homebrew_casks;;
|
||||
'm')
|
||||
bin/install_app_store;;
|
||||
'a')
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_applications";;
|
||||
bin/install_applications;;
|
||||
'x')
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_extensions";;
|
||||
bin/install_extensions;;
|
||||
'd')
|
||||
"$MAC_OS_CONFIG_PATH/bin/apply_default_settings";;
|
||||
bin/install_defaults;;
|
||||
's')
|
||||
"$MAC_OS_CONFIG_PATH/bin/setup_software";;
|
||||
bin/install_shell;;
|
||||
'r')
|
||||
bin/restore_backup;;
|
||||
'i')
|
||||
caffeinate_machine
|
||||
"$MAC_OS_CONFIG_PATH/bin/apply_basic_settings"
|
||||
bin/install_basics
|
||||
bin/install_dev_tools
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_homebrew"
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_applications"
|
||||
"$MAC_OS_CONFIG_PATH/bin/install_extensions"
|
||||
"$MAC_OS_CONFIG_PATH/bin/apply_default_settings"
|
||||
"$MAC_OS_CONFIG_PATH/bin/setup_software"
|
||||
bin/install_homebrew_formulas
|
||||
bin/install_homebrew_casks
|
||||
bin/install_app_store
|
||||
bin/install_applications
|
||||
bin/install_extensions
|
||||
bin/install_defaults
|
||||
bin/install_shell
|
||||
bin/restore_backup
|
||||
clean_work_path;;
|
||||
'R')
|
||||
"$MAC_OS_CONFIG_PATH/bin/restore_backup";;
|
||||
'c')
|
||||
verify_homebrews
|
||||
'np')
|
||||
bin/install_node_packages;;
|
||||
'rg')
|
||||
bin/install_ruby_gems;;
|
||||
'rc')
|
||||
bin/install_rust_crates;;
|
||||
'l')
|
||||
bin/install_node_packages
|
||||
bin/install_ruby_gems
|
||||
bin/install_rust_crates;;
|
||||
'c')
|
||||
verify_homebrew_formulas
|
||||
verify_homebrew_casks
|
||||
verify_app_store_applications
|
||||
verify_applications
|
||||
verify_extensions;;
|
||||
verify_extensions
|
||||
verify_node_packages
|
||||
verify_ruby_gems
|
||||
verify_rust_crates;;
|
||||
'C')
|
||||
caffeinate_machine;;
|
||||
'ua')
|
||||
uninstall_application;;
|
||||
'ux')
|
||||
uninstall_extension;;
|
||||
'ra')
|
||||
reinstall_application;;
|
||||
'rx')
|
||||
reinstall_extension;;
|
||||
'w')
|
||||
clean_work_path;;
|
||||
'q');;
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines reinstall functions.
|
||||
|
||||
# Reinstall application.
|
||||
reinstall_application() {
|
||||
uninstall_application
|
||||
scripts/applications.sh
|
||||
}
|
||||
export -f reinstall_application
|
||||
|
||||
# Reinstall extension.
|
||||
reinstall_extension() {
|
||||
uninstall_extension
|
||||
scripts/extensions.sh
|
||||
}
|
||||
export -f reinstall_extension
|
||||
@@ -1,31 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines software restore functions.
|
||||
|
||||
# Label: Restore Preference
|
||||
# Description: Restores an application preference.
|
||||
# Parameters: $1 (required) - The backup volume root path, $2 (required) - The preference file.
|
||||
restore_preference() {
|
||||
local backup_root="$1"
|
||||
local preference_file="$2"
|
||||
local backup_path="$backup_root/Users/$USER/Library/Preferences/$preference_file"
|
||||
local restore_root="$HOME/Library/Preferences"
|
||||
|
||||
cp -p "$backup_path" "$restore_root"
|
||||
}
|
||||
export -f restore_preference
|
||||
|
||||
# Label: Restore Application Support
|
||||
# Description: Restores application support files.
|
||||
# Parameters: $1 (required) - The backup volume root path, $2 required - The application name.
|
||||
restore_app_support() {
|
||||
local backup_root="$1"
|
||||
local app_name="$2"
|
||||
local backup_path="$backup_root/Users/$USER/Library/Application Support/$app_name"
|
||||
local restore_path="$HOME/Library/Application Support"
|
||||
|
||||
mkdir -p "$restore_path"
|
||||
cp -pR "$backup_path" "$restore_path"
|
||||
}
|
||||
export -f restore_app_support
|
||||
@@ -1,22 +1,11 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines global settings.
|
||||
|
||||
# SETTINGS
|
||||
# General
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Globals
|
||||
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Sierra.app/Contents/Resources/createinstallmedia"
|
||||
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Sonoma.app/Contents/Resources/createinstallmedia"
|
||||
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
|
||||
export MAC_OS_INSTALLER_PATH="/Applications/Install macOS Sierra.app"
|
||||
export MAC_OS_WORK_PATH=/tmp/downloads
|
||||
export MAC_OS_CONFIG_PATH="../mac_os-config"
|
||||
|
||||
# Java
|
||||
export JAVA_VOLUME_NAME="JDK 8 Update 101"
|
||||
export JAVA_URL="http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-macosx-x64.dmg"
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#! /bin/bash
|
||||
|
||||
# DESCRIPTION
|
||||
# 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
|
||||
145
lib/utilities.sh
145
lib/utilities.sh
@@ -1,40 +1,93 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines general utility functions.
|
||||
|
||||
# Answers the file name.
|
||||
# Parameters:
|
||||
# $1 = The file path.
|
||||
get_file_name() {
|
||||
printf "${1##*/}" # Answers file or directory name.
|
||||
# Label: Caffeinate Machine
|
||||
# Description: Keep machine running for a very long time.
|
||||
caffeinate_machine() {
|
||||
if [[ -n "$(pgrep -x caffeinate)" ]]; then
|
||||
printf "Machine is already caffeinated!\n"
|
||||
else
|
||||
caffeinate -s -u -d -i -t 3153600000 > /dev/null &
|
||||
printf "Machine caffeinated.\n"
|
||||
fi
|
||||
}
|
||||
export -f get_file_name
|
||||
export -f caffeinate_machine
|
||||
|
||||
# Answers the file extension.
|
||||
# Parameters:
|
||||
# $1 = The file name.
|
||||
get_file_extension() {
|
||||
local name=$(get_file_name "$1")
|
||||
local extension="${1##*.}" # Excludes dot.
|
||||
# Label: Clean Work Path
|
||||
# Description: Clean work path of artifacts.
|
||||
clean_work_path() {
|
||||
rm -rf "$MAC_OS_WORK_PATH"
|
||||
}
|
||||
export -f clean_work_path
|
||||
|
||||
# Label: Get Basename
|
||||
# Description: Answer file or directory basename.
|
||||
# Parameters: $1 (required): Path.
|
||||
get_basename() {
|
||||
printf "%s" "${1##*/}"
|
||||
}
|
||||
export -f get_basename
|
||||
|
||||
# Label: Get Extension
|
||||
# Description: Answer file extension without dot prefix.
|
||||
# Parameters: $1 (required): Path.
|
||||
get_extension() {
|
||||
local name=""
|
||||
local extension="${1##*.}"
|
||||
|
||||
name=$(get_basename "$1")
|
||||
|
||||
if [[ "$name" == "$extension" ]]; then
|
||||
printf ''
|
||||
else
|
||||
printf "$extension"
|
||||
printf "%s" "$extension"
|
||||
fi
|
||||
}
|
||||
export -f get_file_extension
|
||||
export -f get_extension
|
||||
|
||||
# Answers the root install path for file name.
|
||||
# Parameters:
|
||||
# $1 = The file name.
|
||||
# Label: Get Homebrew Root
|
||||
# Description: Answer Homebrew root path.
|
||||
get_homebrew_root() {
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
printf "%s" "/opt/homebrew"
|
||||
else
|
||||
printf "%s" "/usr/local/Homebrew"
|
||||
fi
|
||||
}
|
||||
export -f get_homebrew_root
|
||||
|
||||
# Label: Get Homebrew Bin Root
|
||||
# Description: Answer Homebrew binary root path.
|
||||
get_homebrew_bin_root() {
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
printf "%s" "/opt/homebrew/bin"
|
||||
else
|
||||
printf "%s" "/usr/local/bin"
|
||||
fi
|
||||
}
|
||||
export -f get_homebrew_bin_root
|
||||
|
||||
# Label: Get Install Path
|
||||
# Description: Answer full install path (including file name).
|
||||
# Parameters: $1 (required): Path.
|
||||
get_install_path() {
|
||||
local file_name="$1"
|
||||
local install_path=""
|
||||
|
||||
install_path=$(get_install_root "$file_name")
|
||||
|
||||
printf "%s" "$install_path/$file_name"
|
||||
}
|
||||
export -f get_install_path
|
||||
|
||||
# Label: Get Install Root
|
||||
# Description: Answer root install path.
|
||||
# Parameters: $1 (required): Path.
|
||||
get_install_root() {
|
||||
local file_name="$1"
|
||||
local file_extension=$(get_file_extension "$file_name")
|
||||
|
||||
# Dynamically build the install path based on file extension.
|
||||
case $file_extension in
|
||||
case $(get_extension "$file_name") in
|
||||
'')
|
||||
printf "/usr/local/bin";;
|
||||
'app')
|
||||
@@ -49,31 +102,27 @@ get_install_root() {
|
||||
}
|
||||
export -f get_install_root
|
||||
|
||||
# Answers the full install path (including file name) for file name.
|
||||
# Parameters:
|
||||
# $1 = The file name.
|
||||
get_install_path() {
|
||||
local file_name="$1"
|
||||
local install_path=$(get_install_root "$file_name")
|
||||
printf "$install_path/$file_name"
|
||||
}
|
||||
export -f get_install_path
|
||||
|
||||
# Cleans work path for temporary processing of installs.
|
||||
clean_work_path() {
|
||||
rm -rf "$MAC_OS_WORK_PATH"
|
||||
}
|
||||
export -f clean_work_path
|
||||
|
||||
# Caffeinate machine.
|
||||
caffeinate_machine() {
|
||||
local pid=$(ps aux | grep caffeinate | grep -v grep | awk '{print $2}')
|
||||
|
||||
if [[ -n "$pid" ]]; then
|
||||
printf "Whoa, tweaker, machine is already caffeinated!\n"
|
||||
else
|
||||
caffeinate -s -u -d -i -t 3153600000 > /dev/null &
|
||||
printf "Machine caffeinated.\n"
|
||||
# Label: Check Mac App Store Install
|
||||
# Description: Check Mac App Store (mas) CLI has been installed.
|
||||
check_mas_install() {
|
||||
if ! command -v mas > /dev/null; then
|
||||
printf "%s\n" "ERROR: Mac App Store (mas) CLI can't be found."
|
||||
printf "%s\n" " Please ensure mas (i.e. brew install mas) is installed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
export -f caffeinate_machine
|
||||
export -f check_mas_install
|
||||
|
||||
# Label: Configure Environment
|
||||
# Description: Configure shell and ensure PATH is properly configured.
|
||||
configure_environment() {
|
||||
if [[ ! -s "$HOME/.bash_profile" ]]; then
|
||||
printf "%s\n" "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" > "$HOME/.bash_profile"
|
||||
fi
|
||||
|
||||
if [[ ! -s "$HOME/.bashrc" ]]; then
|
||||
printf "%s\n" 'export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"' > "$HOME/.bashrc"
|
||||
source "$HOME/.bashrc"
|
||||
fi
|
||||
}
|
||||
export -f configure_environment
|
||||
|
||||
228
lib/verifiers.sh
228
lib/verifiers.sh
@@ -1,101 +1,66 @@
|
||||
#! /bin/bash
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# DESCRIPTION
|
||||
# Defines verification/validation functions.
|
||||
|
||||
# Verifies Homebrew software exists.
|
||||
# Parameters:
|
||||
# $1 = The file name.
|
||||
verify_homebrew() {
|
||||
local application="$1"
|
||||
local applications="$2"
|
||||
# Label: Verify App Store Applications
|
||||
# Description: Check for missing App Store applications.
|
||||
verify_app_store_applications() {
|
||||
local applications=""
|
||||
|
||||
if [[ "${applications[*]}" != *"$application"* ]]; then
|
||||
printf " - Missing: $application\n"
|
||||
fi
|
||||
}
|
||||
export -f verify_homebrew
|
||||
|
||||
# Checks for missing Homebrew software.
|
||||
verify_homebrews() {
|
||||
printf "Checking Homebrew software...\n"
|
||||
|
||||
local applications="$(brew list)"
|
||||
printf "\n%s\n" "Checking App Store applications..."
|
||||
applications="$(mas list)"
|
||||
|
||||
while read line; do
|
||||
# Skip blank or comment lines.
|
||||
if [[ "$line" == "brew install"* ]]; then
|
||||
local application=$(printf "$line" | awk '{print $3}')
|
||||
|
||||
# Exception: "gpg" is the binary but is listed as "gnugp".
|
||||
if [[ "$application" == "gpg" ]]; then
|
||||
application="gnupg"
|
||||
fi
|
||||
|
||||
# Exception: "hg" is the binary but is listed as "mercurial".
|
||||
if [[ "$application" == "hg" ]]; then
|
||||
application="mercurial"
|
||||
fi
|
||||
|
||||
verify_homebrew "$application" "${applications[*]}"
|
||||
if [[ "$line" == "mas install"* ]]; then
|
||||
application=$(printf "$line" | awk '{print $3}')
|
||||
verify_listed_application "$application" "${applications[*]}"
|
||||
fi
|
||||
done < "$PWD/scripts/homebrew.sh"
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_app_store"
|
||||
|
||||
printf "Homebrew check complete.\n"
|
||||
printf "%s\n" "App Store check complete."
|
||||
}
|
||||
export -f verify_homebrews
|
||||
export -f verify_app_store_applications
|
||||
|
||||
# Verifies application exists.
|
||||
# Parameters:
|
||||
# $1 = The file name.
|
||||
# Label: Verify Application
|
||||
# Description: Verify application exists.
|
||||
# Parameters: $1 (required): File name.
|
||||
verify_application() {
|
||||
local file_name="$1"
|
||||
|
||||
# Display the missing install if not found.
|
||||
local install_path=$(get_install_path "$file_name")
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
printf " - Missing: $file_name\n"
|
||||
if [[ ! -e "$(get_install_path "$file_name")" ]]; then
|
||||
printf "%s\n" " - Missing: $file_name"
|
||||
fi
|
||||
}
|
||||
export -f verify_application
|
||||
|
||||
# Checks for missing applications suffixed by "APP_NAME" as defined in settings.sh.
|
||||
# Label: Verify Applications
|
||||
# Description: Check for missing applications suffixed by "APP_NAME" as defined in settings.
|
||||
verify_applications() {
|
||||
printf "\nChecking application software...\n"
|
||||
local file_names=""
|
||||
|
||||
printf "\n%s\n" "Checking application software..."
|
||||
|
||||
# Only use environment keys that end with "APP_NAME".
|
||||
local file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME")
|
||||
file_names=$(set | awk -F "=" '{print $1}' | grep ".*APP_NAME")
|
||||
|
||||
# For each application name, check to see if the application is installed. Otherwise, skip.
|
||||
for name in $file_names; do
|
||||
# Pass the key value to verfication.
|
||||
verify_application "${!name}"
|
||||
done
|
||||
|
||||
printf "Application software check complete.\n"
|
||||
printf "%s\n" "Application software check complete."
|
||||
}
|
||||
export -f verify_applications
|
||||
|
||||
# Verifies path exists.
|
||||
# Parameters:
|
||||
# $1 = The path.
|
||||
verify_path() {
|
||||
local path="$1"
|
||||
|
||||
# Display the missing path if not found.
|
||||
if [[ ! -e "$path" ]]; then
|
||||
printf " - Missing: $path\n"
|
||||
fi
|
||||
}
|
||||
export -f verify_path
|
||||
|
||||
# Checks for missing extensions suffixed by "EXTENSION_PATH" as defined in settings.sh.
|
||||
# Label: Verify Extensions
|
||||
# Description: Check for missing extensions suffixed by "EXTENSION_PATH" as defined in settings.
|
||||
verify_extensions() {
|
||||
printf "\nChecking application extensions...\n"
|
||||
local extensions=""
|
||||
|
||||
printf "\n%s\n" "Checking application extensions..."
|
||||
|
||||
# Only use environment keys that end with "EXTENSION_PATH".
|
||||
local extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH")
|
||||
extensions=$(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH")
|
||||
|
||||
# For each extension, check to see if the extension is installed. Otherwise, skip.
|
||||
for extension in $extensions; do
|
||||
@@ -103,6 +68,135 @@ verify_extensions() {
|
||||
verify_path "${!extension}"
|
||||
done
|
||||
|
||||
printf "Application extension check complete.\n"
|
||||
printf "%s\n" "Application extension check complete."
|
||||
}
|
||||
export -f verify_extensions
|
||||
|
||||
# Label: Verify Homebrew Casks
|
||||
# Description: Check for missing Homebrew casks.
|
||||
verify_homebrew_casks() {
|
||||
local applications=""
|
||||
|
||||
printf "\nChecking Homebrew casks...\n"
|
||||
|
||||
applications="$(brew list --casks)"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "brew cask install"* ]]; then
|
||||
application=$(printf "%s" "$line" | awk '{print $4}')
|
||||
verify_listed_application "$application" "${applications[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
|
||||
|
||||
printf "%s\n" "Homebrew cask check complete."
|
||||
}
|
||||
export -f verify_homebrew_casks
|
||||
|
||||
# Label: Verify Homebrew Formulas
|
||||
# Description: Check for missing Homebrew formulas.
|
||||
verify_homebrew_formulas() {
|
||||
local applications=""
|
||||
|
||||
printf "Checking Homebrew formulas...\n"
|
||||
|
||||
applications="$(brew list --formulae)"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "brew install"* ]]; then
|
||||
application=$(printf "%s" "$line" | awk '{print $3}')
|
||||
|
||||
# Exception: "gpg" is the binary but is listed as "gnugp".
|
||||
if [[ "$application" == "gpg" ]]; then
|
||||
application="gnupg"
|
||||
fi
|
||||
|
||||
verify_listed_application "$application" "${applications[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
|
||||
|
||||
printf "%s\n" "Homebrew formula check complete."
|
||||
}
|
||||
export -f verify_homebrew_formulas
|
||||
|
||||
# Label: Verify Listed Application
|
||||
# Description: Verify listed application exists.
|
||||
# Parameters: $1 (required): Current application, $2 (required): Application list.
|
||||
verify_listed_application() {
|
||||
local application="$1"
|
||||
local applications="$2"
|
||||
|
||||
if [[ "${applications[*]}" != *"$application"* ]]; then
|
||||
printf "%s\n" " - Missing: $application"
|
||||
fi
|
||||
}
|
||||
export -f verify_listed_application
|
||||
|
||||
# Label: Verify Path
|
||||
# Description: Verify path exists.
|
||||
# Parameters: $1 (required): Path.
|
||||
verify_path() {
|
||||
local path="$1"
|
||||
|
||||
if [[ ! -e "$path" ]]; then
|
||||
printf "%s\n" " - Missing: $path"
|
||||
fi
|
||||
}
|
||||
export -f verify_path
|
||||
|
||||
# Label: Verify Node Packages
|
||||
# Description: Check for missing Node packages.
|
||||
verify_node_packages() {
|
||||
printf "\n%s\n" "Checking Node packages..."
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "npm "* ]]; then
|
||||
package=$(printf "$line" | awk '{print $4}')
|
||||
packages=($(npm list --global --depth=0 | grep "$package"))
|
||||
|
||||
verify_listed_application "$package" "${packages[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_node_packages"
|
||||
|
||||
printf "%s\n" "Node packages check complete."
|
||||
}
|
||||
export -f verify_node_packages
|
||||
|
||||
# Label: Verify Ruby Gems
|
||||
# Description: Check for missing Ruby gems.
|
||||
verify_ruby_gems() {
|
||||
local gems=""
|
||||
|
||||
printf "\n%s\n" "Checking Ruby gems..."
|
||||
|
||||
gems="$(gem list --no-versions)"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "gem install"* ]]; then
|
||||
gem=$(printf "%s" "$line" | awk '{print $3}')
|
||||
verify_listed_application "$gem" "${gems[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_ruby_gems"
|
||||
|
||||
printf "%s\n" "Ruby gems check complete."
|
||||
}
|
||||
export -f verify_ruby_gems
|
||||
|
||||
# Label: Verify Rust Crates
|
||||
# Description: Check for missing Rust crates.
|
||||
verify_rust_crates() {
|
||||
local crates=""
|
||||
|
||||
printf "\n%s\n" "Checking Rust crates..."
|
||||
|
||||
crates="$(ls -A1 $HOME/.cargo/bin)"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "cargo install"* ]]; then
|
||||
crate=$(printf "%s" "$line" | awk '{print $3}')
|
||||
verify_listed_application "$crate" "${crates[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates"
|
||||
|
||||
printf "%s\n" "Rust crates check complete."
|
||||
}
|
||||
export -f verify_rust_crates
|
||||
|
||||
Reference in New Issue
Block a user