Compare commits
98 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
github: [bkuhlmann]
|
||||
5
.github/ISSUE_TEMPLATE.md
vendored
5
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,5 +1,5 @@
|
||||
## Overview
|
||||
<!-- Required. Describe, briefly, the behavior experienced. -->
|
||||
<!-- Required. Describe, briefly, the behavior experienced and desired. -->
|
||||
|
||||
## Screenshots/Screencasts
|
||||
<!-- Optional. Attach screenshot(s) and/or screencast(s) that demo the behavior. -->
|
||||
@@ -7,8 +7,5 @@
|
||||
## Steps to Recreate
|
||||
<!-- Required. List exact steps (numbered list) to reproduce errant behavior. -->
|
||||
|
||||
## Desired Behavior
|
||||
<!-- Required. Describe the behavior you'd like to see or your idea of a proposed solution. -->
|
||||
|
||||
## Environment
|
||||
<!-- Required. What is your operating system, software version(s), etc. -->
|
||||
|
||||
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -6,6 +6,3 @@
|
||||
|
||||
## Details
|
||||
<!-- Optional. List the key features/highlights as bullet points. -->
|
||||
|
||||
## Notes
|
||||
<!-- Optional. List additional notes/references as bullet points. -->
|
||||
|
||||
2
.rubocop.yml
Normal file
2
.rubocop.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
inherit_gem:
|
||||
caliber: config/all.yml
|
||||
@@ -1 +1 @@
|
||||
3.0.0
|
||||
3.2.2
|
||||
|
||||
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: 17.0.0
|
||||
license: Hippocratic-2.1
|
||||
date-released: 2023-09-28
|
||||
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,113 +0,0 @@
|
||||
= Contributor Covenant Code of Conduct
|
||||
|
||||
== Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our community a
|
||||
harassment-free experience for everyone, regardless of age, body size, visible or invisible
|
||||
disability, ethnicity, sex characteristics, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance, race, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and
|
||||
healthy community.
|
||||
|
||||
== Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the
|
||||
experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address, without their
|
||||
explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
== Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior
|
||||
and will take appropriate and fair corrective action in response to any behavior that they deem
|
||||
inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
Community leaders 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, and
|
||||
will communicate reasons for moderation decisions when appropriate.
|
||||
|
||||
== Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when an individual is
|
||||
officially representing the community in public spaces. Examples of representing our community
|
||||
include using an official e-mail address, posting via an official social media account, or acting as
|
||||
an appointed representative at an online or offline event.
|
||||
|
||||
== Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
|
||||
leaders responsible for enforcement at link:mailto:brooke@alchemists.io?subject=Conduct[Brooke Kuhlmann].
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the reporter of any
|
||||
incident.
|
||||
|
||||
== Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining the consequences for
|
||||
any action they deem in violation of this Code of Conduct:
|
||||
|
||||
=== 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or
|
||||
unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing clarity around the
|
||||
nature of the violation and an explanation of why the behavior was inappropriate. A public apology
|
||||
may be requested.
|
||||
|
||||
=== 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No interaction with the people
|
||||
involved, including unsolicited interaction with those enforcing the Code of Conduct, for a
|
||||
specified period of time. This includes avoiding interactions in community spaces as well as
|
||||
external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
||||
|
||||
=== 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including sustained inappropriate
|
||||
behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public communication with the
|
||||
community for a specified period of time. No public or private interaction with the people involved,
|
||||
including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this
|
||||
period. Violating these terms may lead to a permanent ban.
|
||||
|
||||
=== 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community standards, including
|
||||
sustained inappropriate behavior, harassment of an individual, or aggression toward or
|
||||
disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
||||
|
||||
== Attribution
|
||||
|
||||
This Code of Conduct is adapted from the
|
||||
link:https://www.contributor-covenant.org/version/2/0/code_of_conduct.html[Contributor Covenant,
|
||||
Version 2.0].
|
||||
|
||||
Community Impact Guidelines were inspired by link:https://github.com/mozilla/diversity[Mozilla's
|
||||
code of conduct enforcement ladder].
|
||||
|
||||
For answers to common questions about this code of conduct, see the
|
||||
link:https://www.contributor-covenant.org/faq[FAQ]. Translations are available
|
||||
link:https://www.contributor-covenant.org/translations[here].
|
||||
@@ -1,22 +0,0 @@
|
||||
= Contributing
|
||||
|
||||
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.
|
||||
|
||||
== Code
|
||||
|
||||
. Read the project link:README.adoc[README] before starting.
|
||||
. Fork and clone the `master` branch of this repository locally.
|
||||
. Ensure there are no setup, usage, and/or test issues.
|
||||
. Add tests for new functionality and ensure they pass.
|
||||
. Submit a pull request, follow the instructions provided, and ensure the build passes.
|
||||
|
||||
== Issues
|
||||
|
||||
Submit an issue via the GitHub Issues tab (assuming one does not already exist) and follow the
|
||||
instructions provided.
|
||||
|
||||
== Feedback
|
||||
|
||||
* Expect a response within one to three business days.
|
||||
* Changes, alternatives, and/or improvements may be suggested upon review.
|
||||
6
Gemfile
6
Gemfile
@@ -1,6 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
ruby File.read(".ruby-version").strip
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "caliber", "~> 0.35"
|
||||
gem "debug", "~> 1.8"
|
||||
gem "git-lint", "~> 6.0"
|
||||
gem "rake", "~> 13.0"
|
||||
gem "git-lint", "~> 2.0"
|
||||
|
||||
286
LICENSE.adoc
286
LICENSE.adoc
@@ -1,162 +1,134 @@
|
||||
= Apache License
|
||||
= Hippocratic License
|
||||
|
||||
Version 2.0, January 2004
|
||||
Version: 2.1.0.
|
||||
|
||||
http://www.apache.org/licenses
|
||||
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.
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
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:
|
||||
|
||||
== 1. Definitions
|
||||
* 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.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by
|
||||
Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
|
||||
granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are
|
||||
controlled by, or are under common control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the direction or management of such
|
||||
entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
|
||||
License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications, including but not limited to
|
||||
software source code, documentation source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation or translation of a
|
||||
Source form, including but not limited to compiled object code, generated documentation, and
|
||||
conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the
|
||||
License, as indicated by a copyright notice that is included in or attached to the work (an example
|
||||
is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
|
||||
derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
|
||||
modifications represent, as a whole, an original work of authorship. For the purposes of this
|
||||
License, Derivative Works shall not include works that remain separable from, or merely link (or
|
||||
bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original version of the Work and any
|
||||
modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted
|
||||
to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity
|
||||
authorized to submit on behalf of the copyright owner. For the purposes of this definition,
|
||||
"submitted" means any form of electronic, verbal, or written communication sent to the Licensor or
|
||||
its representatives, including but not limited to communication on electronic mailing lists, source
|
||||
code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor
|
||||
for the purpose of discussing and improving the Work, but excluding communication that is
|
||||
conspicuously marked or otherwise designated in writing by the copyright owner as "Not a
|
||||
Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
|
||||
Contribution has been received by Licensor and subsequently incorporated within the Work.
|
||||
|
||||
== 2. Grant of Copyright License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a
|
||||
perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
||||
reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and
|
||||
distribute the Work and such Derivative Works in Source or Object form.
|
||||
|
||||
== 3. Grant of Patent License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a
|
||||
perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
|
||||
section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer
|
||||
the Work, where such license applies only to those patent claims licensable by such Contributor that
|
||||
are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You institute patent litigation
|
||||
against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or
|
||||
a Contribution incorporated within the Work constitutes direct or contributory patent infringement,
|
||||
then any patent licenses granted to You under this License for that Work shall terminate as of the
|
||||
date such litigation is filed.
|
||||
|
||||
== 4. Redistribution
|
||||
|
||||
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with
|
||||
or without modifications, and in Source or Object form, provided that You meet the following
|
||||
conditions:
|
||||
|
||||
. You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
||||
|
||||
. You must cause any modified files to carry prominent notices stating that You changed the files;
|
||||
and
|
||||
|
||||
. You must retain, in the Source form of any Derivative Works that You distribute, all copyright,
|
||||
patent, trademark, and attribution notices from the Source form of the Work, excluding those
|
||||
notices that do not pertain to any part of the Derivative Works; and
|
||||
|
||||
. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works
|
||||
that You distribute must include a readable copy of the attribution notices contained within such
|
||||
NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in
|
||||
at least one of the following places: within a NOTICE text file distributed as part of the
|
||||
Derivative Works; within the Source form or documentation, if provided along with the Derivative
|
||||
Works; or, within a display generated by the Derivative Works, if and wherever such third-party
|
||||
notices normally appear. The contents of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution notices within Derivative Works that
|
||||
You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such
|
||||
additional attribution notices cannot be construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may provide additional or
|
||||
different license terms and conditions for use, reproduction, or distribution of Your modifications,
|
||||
or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of
|
||||
the Work otherwise complies with the conditions stated in this License.
|
||||
|
||||
== 5. Submission of Contributions
|
||||
|
||||
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the
|
||||
Work by You to the Licensor shall be under the terms and conditions of this License, without any
|
||||
additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed with Licensor regarding such
|
||||
Contributions.
|
||||
|
||||
== 6. Trademarks
|
||||
|
||||
This License does not grant permission to use the trade names, trademarks, service marks, or product
|
||||
names of the Licensor, except as required for reasonable and customary use in describing the origin
|
||||
of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
== 7. Disclaimer of Warranty
|
||||
|
||||
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied, including, without limitation, any warranties or conditions of
|
||||
TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely
|
||||
responsible for determining the appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
== 8. Limitation of Liability
|
||||
|
||||
In no event and under no legal theory, whether in tort (including negligence), contract, or
|
||||
otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or
|
||||
agreed to in writing, shall any Contributor be liable to You for damages, including any direct,
|
||||
indirect, special, incidental, or consequential damages of any character arising as a result of this
|
||||
License or out of the use or inability to use the Work (including but not limited to damages for
|
||||
loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial
|
||||
damages or losses), even if such Contributor has been advised of the possibility of such damages.
|
||||
|
||||
== 9. Accepting Warranty or Additional Liability
|
||||
|
||||
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee
|
||||
for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
|
||||
consistent with this License. However, in accepting such obligations, You may act only on Your own
|
||||
behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or
|
||||
claims asserted against, such Contributor by reason of your accepting any such warranty or
|
||||
additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Copyright 2016 link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
|
||||
compliance with the License. You may obtain a link:https://www.apache.org/licenses/LICENSE-2.0[copy]
|
||||
of the License.
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License is
|
||||
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing permissions and limitations under the
|
||||
License.
|
||||
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.
|
||||
|
||||
154
README.adoc
154
README.adoc
@@ -4,20 +4,17 @@
|
||||
|
||||
= macOS
|
||||
|
||||
[link=https://circleci.com/gh/bkuhlmann/mac_os]
|
||||
image::https://circleci.com/gh/bkuhlmann/mac_os.svg?style=svg[Circle CI Status]
|
||||
|
||||
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://www.alchemists.io/projects/mac_os-config[macOS Config] project for details. The _macOS
|
||||
link:https://alchemists.io/projects/mac_os-config[macOS Config] project for details. The _macOS
|
||||
Config_ project is an opinionated configuration which meets the needs of my development environment
|
||||
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://www.alchemists.io/projects/mac_os-config[macOS Configuration]* - The layer on top of
|
||||
* *link:https://alchemists.io/projects/mac_os-config[macOS Configuration]* - The layer on top of
|
||||
this _macOS_ project which defines a custom machine implementation. The project is meant to be
|
||||
forked for as many custom machine setups as needed.
|
||||
|
||||
@@ -28,25 +25,27 @@ toc::[]
|
||||
* 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.
|
||||
* Downloads and installs link:https://developer.apple.com/xcode[Xcode Command Line Tools].
|
||||
* Downloads, installs, and configures link:http://brew.sh[Homebrew Formulas].
|
||||
* Downloads, installs, and configures link:https://caskroom.github.io[Homebrew Casks].
|
||||
* Downloads, installs, and configures link:http://www.apple.com/macosx/whats-new/app-store.html[App
|
||||
Store] software.
|
||||
* Downloads, installs, and configures non-App Store software applications.
|
||||
* Downloads, installs, and configures software application extensions.
|
||||
* Applies basic and default software settings.
|
||||
* Sets up and configures installed software for use.
|
||||
* 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.
|
||||
|
||||
== Screencast
|
||||
|
||||
[link=https://www.alchemists.io/screencasts/mac_os]
|
||||
image::https://www.alchemists.io/images/screencasts/mac_os/cover.svg[Screencast,600,240,role=focal_point]
|
||||
[link=https://alchemists.io/screencasts/mac_os]
|
||||
image::https://alchemists.io/images/screencasts/mac_os/cover.svg[Screencast,600,240,role=focal_point]
|
||||
|
||||
== Requirements
|
||||
|
||||
. link:https://www.apple.com/macos/big-sur[macOS Big Sur]
|
||||
. link:https://www.apple.com/macos/sonoma[macOS Sonoma]
|
||||
. link:https://developer.apple.com/xcode[Xcode]
|
||||
|
||||
== Setup
|
||||
@@ -57,7 +56,7 @@ To install, run:
|
||||
----
|
||||
git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
git checkout 11.2.0
|
||||
git checkout 17.0.0
|
||||
----
|
||||
|
||||
== Usage
|
||||
@@ -83,9 +82,13 @@ Install:
|
||||
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.
|
||||
s: Setup installed software.
|
||||
i: Install everything (i.e. executes all install options).
|
||||
cs: Configure installed software.
|
||||
i: Install everything (i.e. executes all install options in order listed).
|
||||
Restore:
|
||||
R: Restore settings from backup.
|
||||
Manage:
|
||||
@@ -143,45 +146,65 @@ macOS Boot Disk Recovery:
|
||||
|
||||
All executable scripts can be found in the `bin` folder:
|
||||
|
||||
* `bin/apply_basic_settings`: Applies basic, initial, settings for setting up a machine. _Can be
|
||||
customized._
|
||||
* `bin/apply_default_settings`: Applies useful system and application defaults. _Can be customized._
|
||||
* `bin/create_boot_disk`: Creates macOS boot disk.
|
||||
* `bin/install_app_store`: Installs macOS, GUI-based, App Store applications. _Can be customized._
|
||||
* `bin/install_applications`: Installs macOS, GUI-based, non-App Store applications. _Can be
|
||||
customized._
|
||||
* `bin/install_dev_tools`: Installs macOS development tools required by Homebrew.
|
||||
* `bin/install_extensions`: Installs macOS application extensions and add-ons. _Can be customized._
|
||||
* `bin/install_homebrew_casks`: Installs Homebrew Formulas. _Can be customized._
|
||||
* `bin/install_homebrew_formulas`: Installs Homebrew Casks. _Can be customized._
|
||||
* `bin/restore_backup`: Restores system/application settings from backup image. _Can be customized._
|
||||
* `bin/run`: The main script and interface for macOS setup.
|
||||
* `bin/setup_software`: Configures and launches (if necessary) installed software. _Can be
|
||||
customized._
|
||||
* `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://www.alchemists.io/projects/mac_os-config[macOS
|
||||
software. Everything provided via the link:https://alchemists.io/projects/mac_os-config[macOS
|
||||
Config] project is built upon the functions found in the `lib` folder. See the
|
||||
link:https://www.alchemists.io/projects/mac_os-config[macOS Config] project for further details.
|
||||
link:https://alchemists.io/projects/mac_os-config[macOS Config] project for further details.
|
||||
|
||||
* `lib/settings.sh`: Defines global settings for software applications, extensions, etc.
|
||||
|
||||
== Troubleshooting
|
||||
=== Troubleshooting
|
||||
|
||||
* 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.
|
||||
* When using the boot disk and the installer fails in some catestrophic manner, reboot the machine
|
||||
into recovery mode -- `POWER` (Silicon) or `COMMAND + R` (Intel) buttons -- to download and
|
||||
install the last operating system used. Alternatively, you can also use `COMMAND + OPTION + R`
|
||||
(Intel) to attemp to download the latest operating system.
|
||||
* 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
|
||||
the `OPTION + COMMAND + R + P` (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).
|
||||
* *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
|
||||
|
||||
@@ -193,31 +216,18 @@ git clone https://github.com/bkuhlmann/mac_os.git
|
||||
cd mac_os
|
||||
----
|
||||
|
||||
== Versioning
|
||||
== link:https://alchemists.io/policies/license[License]
|
||||
|
||||
Read link:https://semver.org[Semantic Versioning] for details. Briefly, it means:
|
||||
== link:https://alchemists.io/policies/security[Security]
|
||||
|
||||
* Major (X.y.z) - Incremented for any backwards incompatible public API changes.
|
||||
* Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes.
|
||||
* Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes.
|
||||
== link:https://alchemists.io/policies/code_of_conduct[Code of Conduct]
|
||||
|
||||
== Code of Conduct
|
||||
== link:https://alchemists.io/policies/contributions[Contributions]
|
||||
|
||||
Please note that this project is released with a link:CODE_OF_CONDUCT.adoc[CODE OF CONDUCT]. By
|
||||
participating in this project you agree to abide by its terms.
|
||||
== link:https://alchemists.io/projects/mac_os/versions[Versions]
|
||||
|
||||
== Contributions
|
||||
|
||||
Read link:CONTRIBUTING.adoc[CONTRIBUTING] for details.
|
||||
|
||||
== License
|
||||
|
||||
Read link:LICENSE.adoc[LICENSE] for details.
|
||||
|
||||
== History
|
||||
|
||||
Read link:CHANGES.adoc[CHANGES] for details.
|
||||
== link:https://alchemists.io/community[Community]
|
||||
|
||||
== Credits
|
||||
|
||||
Engineered by link:https://www.alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||
Engineered by link:https://alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||
|
||||
8
Rakefile
8
Rakefile
@@ -1,5 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "git/lint/rake/setup"
|
||||
require "git/lint/rake/register"
|
||||
require "rubocop/rake_task"
|
||||
|
||||
task default: :git_lint
|
||||
Git::Lint::Rake::Register.call
|
||||
RuboCop::RakeTask.new
|
||||
|
||||
task default: %i[git_lint rubocop]
|
||||
|
||||
@@ -1,4 +1,135 @@
|
||||
= Changes
|
||||
= Versions
|
||||
|
||||
== 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)
|
||||
|
||||
@@ -4,19 +4,19 @@
|
||||
|
||||
printf "macOS Boot Disk Tips\n"
|
||||
printf " - Use a USB drive (8GB or higher).\n"
|
||||
printf " - Use Disk Utility to format the USB drive as \"Mac OS Extended (Journaled)\".\n"
|
||||
printf " - Use Disk Utility to format the USB drive as \"APSF\".\n"
|
||||
printf " - Use Disk Utility to label the USB drive as \"Untitled\".\n"
|
||||
printf "\nmacOS Boot Disk Usage:\n"
|
||||
printf " 1. Insert the USB boot disk into the machine to be upgraded.\n"
|
||||
printf " 2. Reboot the machine.\n"
|
||||
printf " 3. Hold the POWER (Silicon) or OPTION (Intel) key before the Apple logo appears.\n"
|
||||
printf " 3. Press and hold the POWER key before the Apple logo appears.\n"
|
||||
printf " 4. Select the USB boot disk from the menu.\n"
|
||||
printf " 5. Use Disk Utility to delete and/or erase the hard drive including associated partitions.\n"
|
||||
printf " 6. Use Disk Utility to create a single \"APFS\" drive as a \"GUID Partition Table\".\n"
|
||||
printf " 6. Use Disk Utility to create a single \"APFS\" drive.\n"
|
||||
printf " 7. Install the new operating system.\n"
|
||||
printf "\nmacOS Boot Disk Recovery:\n"
|
||||
printf " 1. Start/restart the machine.\n"
|
||||
printf " 2. Hold the POWER (Silicon) or COMMAND+R (Intel) keys before the Apple logo appears.\n"
|
||||
printf " 2. Press and hold the POWER key before the Apple logo appears.\n"
|
||||
printf " 3. Wait for the macOS installer to load from the recovery partition.\n"
|
||||
printf " 4. Use the dialog options to launch Disk Utility, reinstall the system, etc.\n"
|
||||
|
||||
|
||||
@@ -6,9 +6,11 @@ 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 "WARNING: App Store install script does not exist or is not executable.\n"
|
||||
|
||||
@@ -6,6 +6,7 @@ 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
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Applies basic system settings.
|
||||
# Installs basic system settings.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/apply_basic_settings"
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_basics"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
@@ -1,12 +1,13 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Applies default settings.
|
||||
# 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/apply_default_settings"
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_defaults"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
@@ -1,6 +1,6 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs development tooling requirements.
|
||||
Installs development tooling requirements.
|
||||
|
||||
printf "Installing Xcode CLI tools...\n"
|
||||
xcode-select --install
|
||||
@@ -12,6 +12,6 @@ if [[ "$xcode_response" != "y" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$(get_cpu)" ]]; then
|
||||
softwareupdate --install-rosetta
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
softwareupdate --install-rosetta --agree-to-license
|
||||
fi
|
||||
|
||||
@@ -6,6 +6,7 @@ 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
|
||||
|
||||
@@ -6,9 +6,11 @@ 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 "WARNING: Homebrew Casks install script does not exist or is not executable.\n"
|
||||
|
||||
@@ -6,9 +6,11 @@ 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 "WARNING: Homebrew Formulas install script does not exist or is not executable.\n"
|
||||
|
||||
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 "WARNING: Node packages install script does not exist or is not executable.\n"
|
||||
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 "WARNING: Ruby gems install script does not exist or is not executable.\n"
|
||||
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 "WARNING: Rust crates install script does not exist or is not executable.\n"
|
||||
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 "WARNING: Shell script does not exist or is not executable.\n"
|
||||
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"
|
||||
@@ -6,6 +6,7 @@ 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
|
||||
|
||||
22
bin/run
22
bin/run
@@ -4,9 +4,7 @@
|
||||
|
||||
source lib/installers.sh
|
||||
source lib/options.sh
|
||||
source lib/reinstallers.sh
|
||||
source lib/settings.sh
|
||||
source lib/uninstallers.sh
|
||||
source lib/utilities.sh
|
||||
source lib/verifiers.sh
|
||||
|
||||
@@ -32,25 +30,25 @@ while true; do
|
||||
printf " Boot:\n"
|
||||
printf " B: Create boot disk.\n"
|
||||
printf " Install:\n"
|
||||
printf " b: Apply basic settings.\n"
|
||||
printf " b: Install basics.\n"
|
||||
printf " t: Install development tools.\n"
|
||||
printf " hf: Install Homebrew Formulas.\n"
|
||||
printf " hc: Install Homebrew Casks.\n"
|
||||
printf " m: Install Mac App Store software.\n"
|
||||
printf " a: Install application software.\n"
|
||||
printf " x: Install application software extensions.\n"
|
||||
printf " d: 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 " d: Install defaults.\n"
|
||||
printf " s: Install shell.\n"
|
||||
printf " r: Restore backups.\n"
|
||||
printf " i: Install all (i.e. executes all of the above steps in order listed).\n"
|
||||
printf " Libraries:\n"
|
||||
printf " np: Install Node packages.\n"
|
||||
printf " rg: Install Ruby gems.\n"
|
||||
printf " rc: Install Rust crates.\n"
|
||||
printf " l: Install libraries (i.e. executes all of the above steps in order listed).\n"
|
||||
printf " Manage:\n"
|
||||
printf " c: Check status of managed software.\n"
|
||||
printf " C: Caffeinate machine.\n"
|
||||
printf " 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"
|
||||
read -p "Enter selection: " response
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Sets up and launches (if necessary) installed software.
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/setup_software"
|
||||
|
||||
if [[ -x "$SCRIPT_PATH" ]]; then
|
||||
"$SCRIPT_PATH"
|
||||
else
|
||||
printf "WARNING: Software setup script does not exist or is not executable.\n"
|
||||
fi
|
||||
@@ -11,8 +11,16 @@ download_file() {
|
||||
|
||||
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_file
|
||||
|
||||
@@ -139,10 +147,29 @@ export -f install_git_project
|
||||
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
|
||||
|
||||
# Installs a package via a zip file.
|
||||
# Parameters: $1 (required) - URL, $2 (required) - Application name.
|
||||
install_bare_pkg() {
|
||||
local url="$1"
|
||||
local app_name="$2"
|
||||
local install_path=$(get_install_path "$app_name")
|
||||
local work_file="$app_name.pkg"
|
||||
|
||||
if [[ ! -e "$install_path" ]]; then
|
||||
download_file "$url" "$work_file"
|
||||
install_pkg "$MAC_OS_WORK_PATH" "$app_name"
|
||||
printf "Installed: $app_name.\n"
|
||||
verify_application "$app_name"
|
||||
fi
|
||||
}
|
||||
export -f install_bare_pkg
|
||||
|
||||
# Installs a package.
|
||||
# Parameters: $1 (required) - Package source path, $2 (required) - Application name.
|
||||
install_pkg() {
|
||||
@@ -171,6 +198,39 @@ install_program() {
|
||||
}
|
||||
export -f install_program
|
||||
|
||||
# Installs Node.
|
||||
# Parameters: None.
|
||||
install_node() {
|
||||
if [[ ! -x "$(command -v node)" ]]; then
|
||||
"$(get_homebrew_bin_root)/fnm" install --latest
|
||||
fi
|
||||
}
|
||||
export -f install_node
|
||||
|
||||
# Installs Ruby.
|
||||
# Parameters: None.
|
||||
install_ruby() {
|
||||
local 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
|
||||
|
||||
# Installs Rust.
|
||||
# Parameters: None.
|
||||
install_rust() {
|
||||
if ! command -v cargo > /dev/null; then
|
||||
curl --proto "=https" --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs | sh
|
||||
fi
|
||||
}
|
||||
export -f install_rust
|
||||
|
||||
# Installs an application via a tar file.
|
||||
# Parameters: $1 (required) - URL, $2 (required) - Application name, $3 (required) - Decompress options.
|
||||
install_tar_app() {
|
||||
|
||||
@@ -9,7 +9,7 @@ process_option() {
|
||||
'B')
|
||||
bin/create_boot_disk;;
|
||||
'b')
|
||||
bin/apply_basic_settings;;
|
||||
bin/install_basics;;
|
||||
't')
|
||||
bin/install_dev_tools;;
|
||||
'hf')
|
||||
@@ -23,40 +23,45 @@ process_option() {
|
||||
'x')
|
||||
bin/install_extensions;;
|
||||
'd')
|
||||
bin/apply_default_settings;;
|
||||
bin/install_defaults;;
|
||||
's')
|
||||
bin/setup_software;;
|
||||
bin/install_shell;;
|
||||
'r')
|
||||
bin/restore_backup;;
|
||||
'i')
|
||||
caffeinate_machine
|
||||
bin/apply_basic_settings
|
||||
bin/install_basics
|
||||
bin/install_dev_tools
|
||||
bin/install_homebrew_formulas
|
||||
bin/install_homebrew_casks
|
||||
bin/install_app_store
|
||||
bin/install_applications
|
||||
bin/install_extensions
|
||||
bin/apply_default_settings
|
||||
bin/setup_software
|
||||
bin/install_defaults
|
||||
bin/install_shell
|
||||
bin/restore_backup
|
||||
clean_work_path;;
|
||||
'R')
|
||||
caffeinate_machine
|
||||
bin/restore_backup;;
|
||||
'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,17 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Defines reinstall functions.
|
||||
|
||||
# Reinstall application.
|
||||
reinstall_application() {
|
||||
uninstall_application
|
||||
bin/install_applications
|
||||
}
|
||||
export -f reinstall_application
|
||||
|
||||
# Reinstall extension.
|
||||
reinstall_extension() {
|
||||
uninstall_extension
|
||||
bin/install_extensions
|
||||
}
|
||||
export -f reinstall_extension
|
||||
@@ -5,7 +5,7 @@ set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Big Sur.app/Contents/Resources/createinstallmedia"
|
||||
export MAC_OS_BOOT_DISK_CREATOR="/Applications/Install macOS Sonoma.app/Contents/Resources/createinstallmedia"
|
||||
export MAC_OS_BOOT_DISK_PATH="/Volumes/Untitled"
|
||||
export MAC_OS_WORK_PATH=/tmp/downloads
|
||||
export MAC_OS_CONFIG_PATH="../mac_os-config"
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Defines uninstall functions.
|
||||
|
||||
# Uninstalls selected application.
|
||||
uninstall_application() {
|
||||
# Only use environment keys that end with "APP_NAME".
|
||||
local keys=($(set | awk -F "=" '{print $1}' | grep ".*APP_NAME"))
|
||||
|
||||
printf "Select application to uninstall:\n"
|
||||
for ((index = 0; index < ${#keys[*]}; index++)); do
|
||||
local app_file="${!keys[$index]}"
|
||||
printf " $index: ${app_file}\n"
|
||||
done
|
||||
printf " q: Quit/Exit\n\n"
|
||||
|
||||
read -p "Enter selection: " response
|
||||
printf "\n"
|
||||
|
||||
local regex="^[0-9]+$"
|
||||
if [[ $response =~ $regex ]]; then
|
||||
local app_file="${!keys[$response]}"
|
||||
local app_path=$(get_install_path "${app_file}")
|
||||
sudo rm -rf "$app_path"
|
||||
printf "Uninstalled: ${app_path}\n"
|
||||
fi
|
||||
}
|
||||
export -f uninstall_application
|
||||
|
||||
# Uninstalls selected extension.
|
||||
uninstall_extension() {
|
||||
# Only use environment keys that end with "EXTENSION_PATH".
|
||||
local keys=($(set | awk -F "=" '{print $1}' | grep ".*EXTENSION_PATH"))
|
||||
|
||||
printf "Select extension to uninstall:\n"
|
||||
for ((index = 0; index < ${#keys[*]}; index++)); do
|
||||
local extension_path="${!keys[$index]}"
|
||||
printf " $index: ${extension_path}\n"
|
||||
done
|
||||
printf " q: Quit/Exit\n\n"
|
||||
|
||||
read -p "Enter selection: " response
|
||||
printf "\n"
|
||||
|
||||
local regex="^[0-9]+$"
|
||||
if [[ $response =~ $regex ]]; then
|
||||
local extension_path="${!keys[$response]}"
|
||||
rm -rf "${extension_path}"
|
||||
printf "Uninstalled: ${extension_path}\n"
|
||||
fi
|
||||
}
|
||||
export -f uninstall_extension
|
||||
@@ -28,13 +28,6 @@ get_basename() {
|
||||
}
|
||||
export -f get_basename
|
||||
|
||||
# Answers current CPU.
|
||||
# Parameters: None.
|
||||
get_cpu() {
|
||||
printf "%s" "$(system_profiler SPHardwareDataType | awk '/Chip/ {print $3}')"
|
||||
}
|
||||
export -f get_cpu
|
||||
|
||||
# Answers the file extension.
|
||||
# Parameters: $1 (required) - The file name.
|
||||
get_extension() {
|
||||
@@ -52,7 +45,7 @@ export -f get_extension
|
||||
# Answers Homebrew root path.
|
||||
# Parameters: None.
|
||||
get_homebrew_root() {
|
||||
if [[ -n "$(get_cpu)" ]]; then
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
printf "%s" "/opt/homebrew"
|
||||
else
|
||||
printf "%s" "/usr/local/Homebrew"
|
||||
@@ -63,7 +56,7 @@ export -f get_homebrew_root
|
||||
# Answers Homebrew binary root path.
|
||||
# Parameters: None.
|
||||
get_homebrew_bin_root() {
|
||||
if [[ -n "$(get_cpu)" ]]; then
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
printf "%s" "/opt/homebrew/bin"
|
||||
else
|
||||
printf "%s" "/usr/local/bin"
|
||||
@@ -84,12 +77,10 @@ export -f get_install_path
|
||||
# Parameters: $1 (required) - The file name.
|
||||
get_install_root() {
|
||||
local file_name="$1"
|
||||
local file_extension=$(get_extension "$file_name")
|
||||
|
||||
# Dynamically build the install path based on file extension.
|
||||
case $file_extension in
|
||||
case $(get_extension "$file_name") in
|
||||
'')
|
||||
printf "$(get_homebrew_bin_root)";;
|
||||
printf "/usr/local/bin";;
|
||||
'app')
|
||||
printf "/Applications";;
|
||||
'prefPane')
|
||||
@@ -102,6 +93,17 @@ get_install_root() {
|
||||
}
|
||||
export -f get_install_root
|
||||
|
||||
# Checks Mac App Store (mas) CLI has been installed and exits if otherwise.
|
||||
# Parameters: None.
|
||||
check_mas_install() {
|
||||
if ! command -v mas > /dev/null; then
|
||||
printf "%s\n" "ERROR: Mac App Store (mas) CLI can't be found."
|
||||
printf "%s\n" " Please ensure Homebrew and mas (i.e. brew install mas) have been installed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
export -f check_mas_install
|
||||
|
||||
# Configures shell for new machines and ensures PATH is properly configured for running scripts.
|
||||
# Parameters: None.
|
||||
configure_environment() {
|
||||
@@ -111,8 +113,7 @@ configure_environment() {
|
||||
|
||||
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 PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/opt/homebrew/sbin:/usr/local/sbin:/usr/sbin:/sbin:$PATH"
|
||||
}
|
||||
export -f configure_environment
|
||||
|
||||
@@ -126,3 +126,54 @@ verify_path() {
|
||||
fi
|
||||
}
|
||||
export -f verify_path
|
||||
|
||||
# Checks for missing Node packages.
|
||||
verify_node_packages() {
|
||||
printf "\nChecking Node packages...\n"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "npm "* ]]; then
|
||||
local package=$(printf "$line" | awk '{print $4}')
|
||||
local packages=($(npm list --global --depth=0 | grep "$package"))
|
||||
|
||||
verify_listed_application "$package" "${packages[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_node_packages"
|
||||
|
||||
printf "Node packages check complete.\n"
|
||||
}
|
||||
export -f verify_node_packages
|
||||
|
||||
# Checks for missing Ruby gems.
|
||||
verify_ruby_gems() {
|
||||
local gems="$(gem list --no-versions)"
|
||||
|
||||
printf "\nChecking Ruby gems...\n"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "gem install"* ]]; then
|
||||
local gem=$(printf "$line" | awk '{print $3}')
|
||||
verify_listed_application "$gem" "${gems[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_ruby_gems"
|
||||
|
||||
printf "Ruby gems check complete.\n"
|
||||
}
|
||||
export -f verify_ruby_gems
|
||||
|
||||
# Checks for missing Rust crates.
|
||||
verify_rust_crates() {
|
||||
printf "\nChecking Rust crates...\n"
|
||||
|
||||
local crates="$(ls -A1 $HOME/.cargo/bin)"
|
||||
|
||||
while read line; do
|
||||
if [[ "$line" == "cargo install"* ]]; then
|
||||
local crate=$(printf "$line" | awk '{print $3}')
|
||||
verify_listed_application "$crate" "${crates[*]}"
|
||||
fi
|
||||
done < "$MAC_OS_CONFIG_PATH/bin/install_rust_crates"
|
||||
|
||||
printf "Rust crates check complete.\n"
|
||||
}
|
||||
export -f verify_rust_crates
|
||||
|
||||
Reference in New Issue
Block a user