Major refactor: Simplify installer and add web generator
- Removed 300+ lines of dead code (DMG/ZIP/tar installers) - Merged mac_os-config directory into mac_os for single-directory structure - Simplified lib/installers.sh (370 → 28 lines) - Simplified lib/verifiers.sh (203 → 82 lines) - Removed unused menu options and scripts - Fixed Homebrew PATH bug with proper escaping - Added colored completion messages - Created single-file install.sh for hosting - Built web generator (website/index.html) for custom installers - Added support for custom taps (steipete/tap/codexbar) - Added AI tools: claude-cli, gemini-cli, codex, codexbar - Added trimmy app - Improved website with custom software input Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,31 +0,0 @@
|
||||
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
|
||||
@@ -1,2 +0,0 @@
|
||||
inherit_gem:
|
||||
caliber: config/all.yml
|
||||
1
mac_os-config/.github/FUNDING.yml
vendored
1
mac_os-config/.github/FUNDING.yml
vendored
@@ -1 +0,0 @@
|
||||
github: [bkuhlmann]
|
||||
@@ -1,8 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Community
|
||||
url: https://alchemists.io/community
|
||||
about: Please ask questions or discuss specifics here.
|
||||
- name: Security
|
||||
url: https://alchemists.io/policies/security
|
||||
about: Please report security vulnerabilities here.
|
||||
18
mac_os-config/.github/ISSUE_TEMPLATE/issue.md
vendored
18
mac_os-config/.github/ISSUE_TEMPLATE/issue.md
vendored
@@ -1,18 +0,0 @@
|
||||
---
|
||||
name: Issue
|
||||
title: "Add|Update|Fix|Remove|Refactor "
|
||||
about: Report an issue. Please use only one of the subject prefixes.
|
||||
---
|
||||
|
||||
<!--
|
||||
Please focus on well written issues. Context: https://alchemists.io/articles/software_issues.
|
||||
-->
|
||||
|
||||
## Why
|
||||
<!-- Required. Describe, briefly, why this issue is important. -->
|
||||
|
||||
## How
|
||||
<!-- Optional. List exact steps to implement or reproduce behavior. Screen shots/casts are welcome! -->
|
||||
|
||||
## Notes
|
||||
<!-- Optional. Provide additional details like operating system, software version(s), stack dump, logs, or anything else that would be helpful. -->
|
||||
@@ -1,8 +0,0 @@
|
||||
## Overview
|
||||
<!-- Required. Describe, briefly, why this is necessary and what the overarching architecture is. -->
|
||||
|
||||
## Screenshots/Screencasts
|
||||
<!-- Optional. Provide supporting screen shots/casts. -->
|
||||
|
||||
## Details
|
||||
<!-- Optional. As bullet points, list related issue(s); major highlights; team callouts; and/or other information that is helpful. -->
|
||||
1
mac_os-config/.gitignore
vendored
1
mac_os-config/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
Gemfile.lock
|
||||
@@ -1 +0,0 @@
|
||||
4.0.0
|
||||
@@ -1,22 +0,0 @@
|
||||
cff-version: 1.2.0
|
||||
message: Please use the following metadata when citing this project in your work.
|
||||
title: macOS Configuration
|
||||
abstract: Shell scripts for customized macOS machine setup.
|
||||
version: 30.0.0
|
||||
license: Hippocratic-2.1
|
||||
date-released: 2026-01-01
|
||||
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://github.com/bkuhlmann/mac_os-config
|
||||
repository-artifact: https://alchemists.io/projects/mac_os-config
|
||||
url: https://alchemists.io/projects/mac_os-config
|
||||
@@ -1,10 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
ruby file: ".ruby-version"
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "caliber", "~> 0.82"
|
||||
gem "debug", "~> 1.11"
|
||||
gem "git-lint", "~> 10.0"
|
||||
gem "rake", "~> 13.3"
|
||||
@@ -1,134 +0,0 @@
|
||||
= 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.
|
||||
@@ -1,522 +0,0 @@
|
||||
:toc: macro
|
||||
:toclevels: 5
|
||||
:figure-caption!:
|
||||
|
||||
= macOS Configuration
|
||||
|
||||
This project provides a highly opinionated default configuration built upon the
|
||||
link:https://alchemists.io/projects/mac_os[macOS] project. Should the configuration provided by
|
||||
this project not be to your liking, feel free to fork and customize for your specific needs.
|
||||
|
||||
toc::[]
|
||||
|
||||
== Features
|
||||
|
||||
Due to the amount of tooling used, the following features are broken down into subsections for
|
||||
easier navigation.
|
||||
|
||||
=== Homebrew Formulas
|
||||
|
||||
Installs the following link:https://brew.sh[formulas]:
|
||||
|
||||
* link:https://www.gnu.org/software/bash[Bash]
|
||||
* link:http://bash-completion.alioth.debian.org[Bash Completion]
|
||||
* link:https://github.com/sharkdp/bat[Bat]
|
||||
* link:https://github.com/toy/blueutil[blueutil]
|
||||
* link:https://github.com/cloudflare/cloudflared[cloudflared]
|
||||
* link:https://github.com/schollz/croc[croc]
|
||||
* link:https://crystal-lang.org[Crystal]
|
||||
* link:http://ctags.sourceforge.net[CTags]
|
||||
* link:https://difftastic.wilfred.me.uk[Difftastic]
|
||||
* link:https://direnv.net[direnv]
|
||||
* link:https://github.com/wagoodman/dive[Dive]
|
||||
* link:https://github.com/muesli/duf[duf]
|
||||
* link:https://github.com/bootandy/dust[Dust]
|
||||
* link:http://duti.org[duti]
|
||||
* link:https://eradman.com/entrproject[Entr]
|
||||
* link:https://exiftool.org/index.html[ExifTool]
|
||||
* link:https://github.com/sharkdp/fd[fd]
|
||||
* link:https://github.com/tako8ki/frum[Frum]
|
||||
* link:https://github.com/Schniz/fnm[Fast Node Manager]
|
||||
* link:https://fx.wtf[fx]
|
||||
* link:https://github.com/junegunn/fzf[FZF]
|
||||
* link:https://git-scm.com[Git]
|
||||
* link:https://github.com/dandavison/delta[Git Delta]
|
||||
* link:https://github.com/newren/git-filter-repo[Git Filter Repo]
|
||||
* link:https://github.com/github/git-sizer[Git Sizer]
|
||||
* link:https://www.gnupg.org[GPG]
|
||||
* link:https://github.com/orf/gping[gping]
|
||||
* link:http://www.graphicsmagick.org[Graphics Magick]
|
||||
* link:https://www.graphviz.org[Graphviz]
|
||||
* link:https://github.com/sharkdp/hexyl[hexyl]
|
||||
* link:http://www.andre-simon.de/doku/highlight/en/highlight.php[Highlight]
|
||||
* link:https://hisham.hm/htop[htop]
|
||||
* link:https://github.com/reorx/httpstat[HTTP Stat]
|
||||
* link:https://github.com/sharkdp/hyperfine[Hyperfine]
|
||||
* link:https://imagemagick.org[ImageMagick]
|
||||
* link:https://stedolan.github.io/jq[jq]
|
||||
* link:https://lnav.org[lnav]
|
||||
* link:https://github.com/CISOfy/lynis[Lynis]
|
||||
* link:https://mailpit.axllent.org[Mailpit]
|
||||
* link:https://github.com/mas-cli/mas[Mac App Store]
|
||||
* link:https://jedisct1.github.io/minisign[Minisign]
|
||||
* link:https://github.com/variadico/noti[Noti]
|
||||
* link:https://github.com/hatoo/oha[Oha]
|
||||
* link:https://ollama.com[Ollama]
|
||||
* link:https://www.openssh.com[OpenSSH]
|
||||
* link:https://openssl.org[OpenSSL]
|
||||
* link:https://osv.dev[Open Source Vulnerability Scanner]
|
||||
* link:https://github.com/DarthSim/overmind[Overmind]
|
||||
* link:https://pandoc.org[Pandoc]
|
||||
* link:https://savannah.gnu.org/projects/parallel[Parallel]
|
||||
* link:https://github.com/sharkdp/pastel[Pastel]
|
||||
* link:https://www.zlib.net/pigz[Pigz]
|
||||
* link:https://github.com/GPGTools/pinentry[Pinentry]
|
||||
* link:https://github.com/dalance/procs[Procs]
|
||||
* link:https://tiswww.case.edu/php/chet/readline/rltop.html[Readline]
|
||||
* link:https://github.com/BurntSushi/ripgrep[ripgrep]
|
||||
* link:https://github.com/koalaman/shellcheck[ShellCheck]
|
||||
* link:https://www.joedog.org/siege-home[Siege]
|
||||
* link:https://www.tarsnap.com[Tarsnap]
|
||||
* link:https://www.terraform.io[Terraform]
|
||||
* link:https://github.com/ggreer/the_silver_searcher[The Silver Surfer]
|
||||
* link:https://github.com/tmux/tmux/wiki[tmux]
|
||||
* link:https://github.com/XAMPPRocky/tokei[Tokie]
|
||||
* link:https://vale.sh[Vale]
|
||||
* link:https://valkey.io[Valkey]
|
||||
* link:https://github.com/sachaos/viddy[Viddy]
|
||||
* link:https://www.vim.org[Vim]
|
||||
* link:https://github.com/libvips/libvips[Vips]
|
||||
* link:https://github.com/vi/websocat[Websocat]
|
||||
* link:https://developers.yubico.com/yubikey-manager[YubiKey Manager CLI]
|
||||
* link:https://github.com/ajeetdsouza/zoxide[Zoxide]
|
||||
|
||||
=== Homebrew Casks
|
||||
|
||||
Installs the following link:https://brew.sh[casks]:
|
||||
|
||||
* link:https://www.alfredapp.com[Alfred]
|
||||
* link:https://freemacsoft.net/appcleaner[App Cleaner]
|
||||
* link:https://www.rogueamoeba.com/audiohijack[Audio Hijack]
|
||||
* link:https://www.balena.io/etcher[Balena Etcher]
|
||||
* link:https://bombich.com[Carbon Copy Cloner]
|
||||
* link:https://getcleanshot.com[CleanShot]
|
||||
* link:https://discord.com[Discord]
|
||||
* link:https://software.charliemonroe.net/downie[Downie]
|
||||
* link:https://www.getdoxie.com[Doxie]
|
||||
* link:https://www.dropbox.com[Dropbox]
|
||||
* link:https://www.mozilla.com/en-US/firefox[Firefox]
|
||||
* link:https://www.rogueamoeba.com/fission[Fission]
|
||||
* link:https://www.google.com/chrome[Google Chrome]
|
||||
* link:https://www.noodlesoft.com[Hazel]
|
||||
* link:https://iina.io[IINA]
|
||||
* link:http://imageoptim.pornel.net[ImageOptim]
|
||||
* link:https://bjango.com/mac/istatmenus[iStat Menus]
|
||||
* link:https://www.iterm2.com[iTerm2]
|
||||
* link:https://mitmproxy.org[mitmproxy]
|
||||
* link:https://netnewswire.com[NewNewsWire]
|
||||
* link:https://ngrok.com[Ngrok]
|
||||
* link:https://numi.app[Numi]
|
||||
* link:https://obsidian.md[Obsidian]
|
||||
* link:https://www.openoffice.org[OpenOffice]
|
||||
* link:https://orbstack.dev[OrbStack]
|
||||
* link:https://kagi.com/orion[Orion]
|
||||
* link:https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project[OWASP Zed Attack Proxy (ZAP)]
|
||||
* link:https://cocoatech.com[Path Finder]
|
||||
* link:https://www.pgadmin.org[pgAdmin]
|
||||
* link:https://superhighfives.com/pika[Pika]
|
||||
* link:https://getpixelsnap.com[PixelSnap]
|
||||
* link:https://protonvpn.com[ProtonVPN]
|
||||
* link:https://paw.cloud[Rapid API]
|
||||
* link:https://manytricks.com/resolutionator[Resolutionator]
|
||||
* link:https://flyingmeat.com/retrobatch[Retrobatch]
|
||||
* link:https://signal.org[Signal]
|
||||
* link:https://skim-app.sourceforge.io[Skim]
|
||||
* link:https://www.sonos.com[Sonos]
|
||||
* link:https://www.sublimetext.com[Sublime Text]
|
||||
* link:https://panic.com/transmit[Transmit]
|
||||
* link:https://twist.com[Twist]
|
||||
* link:https://www.sparklabs.com/viscosity[Viscosity]
|
||||
* link:https://vivaldi.com[Vivaldi]
|
||||
* link:https://zed.dev[Zed]
|
||||
|
||||
=== App Store
|
||||
|
||||
Installs link:https://www.apple.com/app-store[App Store] applications as managed by the link:https://github.com/mas-cli/mas[Mac App Store] CLI which assumes you've _purchased_ the applications listed below:
|
||||
|
||||
* link:https://secure.flyingmeat.com/acorn[Acorn]
|
||||
* link:https://bitwarden.com[Bitwarden]
|
||||
* link:https://ccmenu.org[CCMenu]
|
||||
* link:https://sindresorhus.com/system-color-picker[Color Picker]
|
||||
* link:https://daisydiskapp.com[DaisyDisk]
|
||||
* link:https://www.apple.com/mac/garageband[GarageBand]
|
||||
* link:https://handmirror.app[Hand Mirror]
|
||||
* link:https://www.apple.com/imovie[iMovie]
|
||||
* link:https://firecore.com/infuse[Infuse]
|
||||
* link:https://manytricks.com/keycodes[Key Codes]
|
||||
* link:https://manytricks.com/keymou[Keymou]
|
||||
* link:https://www.apple.com/keynote[Keynote]
|
||||
* link:https://apps.apple.com/us/app/amazon-kindle/id302584613[Kindle]
|
||||
* link:http://limechat.net/mac[LimeChat]
|
||||
* link:https://marked2app.com[Marked 2]
|
||||
* link:http://getmedis.com[Medis]
|
||||
* link:https://trymeeter.com[Meeter]
|
||||
* link:https://www.markvapps.com/metadatics[Metadatics]
|
||||
* link:https://mindnode.com[MindNode]
|
||||
* link:https://manytricks.com/namemangler[Name Mangler]
|
||||
* link:https://www.apple.com/numbers[Numbers]
|
||||
* link:https://www.omnigroup.com/omnifocus[OmniFocus]
|
||||
* link:https://www.apple.com/pages[Pages]
|
||||
* link:https://krillapps.com/patterns[Patterns]
|
||||
* link:https://software.charliemonroe.net/permute[Permute]
|
||||
* link:https://apps.apple.com/app/apple-store/id1494948845[Paletter]
|
||||
* link:https://apps.apple.com/gb/app/sequence-diagram/id1195426709[Sequence Diagram]
|
||||
* link:https://shapesapp.com[Shapes]
|
||||
* link:https://slack.com[Slack]
|
||||
* link:https://www.adriangranados.com[WiFi Explorer]
|
||||
|
||||
=== Applications
|
||||
|
||||
Installs the following, basic, macOS applications which are not located in the App Store:
|
||||
|
||||
* link:https://appmap.io[AppMap]
|
||||
* link:https://www.docker.com[Docker]
|
||||
* link:https://icemenubar.app[Ice]
|
||||
* link:https://moneywell.app[MoneyWell]
|
||||
* link:https://manytricks.com/moom[Moom]
|
||||
* link:https://github.com/theory/pgenv[pgenv]
|
||||
* link:https://tana.inc[Tana]
|
||||
|
||||
=== Application Extensions
|
||||
|
||||
Installs the following extensions to existing applications:
|
||||
|
||||
* link:https://github.com/tpope/vim-bundler[Vim Bundler]
|
||||
* link:https://github.com/tpope/vim-commentary[Vim Commentary]
|
||||
* link:https://github.com/tpope/vim-fugitive[Vim Fugitive]
|
||||
* link:https://github.com/airblade/vim-gitgutter[Vim Git Gutter]
|
||||
* link:https://github.com/tpope/vim-pathogen[Vim Pathogen]
|
||||
* link:https://github.com/tpope/vim-projectionist[Vim Projectionist]
|
||||
* link:https://github.com/tpope/vim-rails[Vim Rails]
|
||||
* link:https://github.com/vim-ruby/vim-ruby[Vim Ruby]
|
||||
* link:https://github.com/AndrewRadev/splitjoin.vim[Vim Splitjoin]
|
||||
* link:https://github.com/kana/vim-textobj-user[Vim Text Object User]
|
||||
* link:https://github.com/tpope/vim-unimpaired[Vim Unimpaired]
|
||||
|
||||
=== Node Packages
|
||||
|
||||
Installs the following link:https://nodejs.org[Node] link:https://www.npmjs.com[packages]:
|
||||
|
||||
_None are used at the moment._
|
||||
|
||||
=== Ruby Gems
|
||||
|
||||
Installs the following link:https://www.ruby-lang.org[Ruby] link:https://rubygems.org[gems]:
|
||||
|
||||
* link:https://github.com/amazing-print/amazing_print[Amazing Print]
|
||||
* link:https://asciidoctor.org[ASCII Doctor]
|
||||
* link:https://github.com/evanphx/benchmark-ips[Benchmark IPS]
|
||||
* link:https://github.com/jmmastey/bundler-stats[Bundler Stats]
|
||||
* link:https://github.com/mattbrictson/bundleup[BundleUp]
|
||||
* link:https://alchemists.io/projects/caliber[Caliber]
|
||||
* link:https://alchemists.io/projects/gemsmith[Gemsmith]
|
||||
* link:https://alchemists.io/projects/git-lint[Git Lint]
|
||||
* link:https://hanamirb.org[Hanami]
|
||||
* link:https://alchemists.io/projects/hanamismith[Hanamismith]
|
||||
* link:https://alchemists.io/projects/irb-kit[IRB Kit]
|
||||
* link:https://github.com/jaredbeck/libyear-bundler[Libyear (Bundler)]
|
||||
* link:https://alchemists.io/projects/pennyworth[Pennyworth]
|
||||
* link:https://github.com/joonty/pessimize[Pessimize]
|
||||
* link:https://alchemists.io/projects/pragmater[Pragmater]
|
||||
* link:https://rubyonrails.org[Ruby on Rails]
|
||||
* link:https://github.com/troessner/reek[Reek]
|
||||
* link:https://github.com/AlexB52/retest[Retest]
|
||||
* link:https://rspec.info[RSpec]
|
||||
* link:https://alchemists.io/projects/rubysmith[Rubysmith]
|
||||
* link:https://solargraph.org/guides[Solargraph]
|
||||
* link:https://alchemists.io/projects/sublime_text_kit[Sublime Text Kit]
|
||||
* link:https://github.com/ruby-syntax-tree/syntax_tree[Syntax Tree]
|
||||
* link:https://github.com/red-data-tools/YouPlot[YouPlot]
|
||||
|
||||
=== Rust Crates
|
||||
|
||||
Installs the following link:https://www.rust-lang.org[Rust] link:https://crates.io[crates]:
|
||||
|
||||
* link:https://atuin.sh[Atuin]
|
||||
* link:https://github.com/nabijaczleweli/cargo-update[Cargo Update]
|
||||
* link:https://dotenv-linter.github.io[Dotenv Linter]
|
||||
* link:https://eza.rocks[Eza]
|
||||
* link:https://jj-vcs.github.io[Jujutsu]
|
||||
* link:https://jless.io[jless]
|
||||
* link:https://github.com/chmln/sd[sd]
|
||||
|
||||
== Requirements
|
||||
|
||||
. Apple Silicon hardware.
|
||||
. link:https://alchemists.io/projects/mac_os[macOS]
|
||||
. link:https://developer.apple.com/xcode[Xcode]
|
||||
|
||||
== Setup
|
||||
|
||||
To install, run:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
git clone https://github.com/bkuhlmann/mac_os-config.git
|
||||
cd mac_os-config
|
||||
git checkout 30.0.0
|
||||
----
|
||||
|
||||
== Usage
|
||||
|
||||
The following will walk you through the steps of installing/re-installing your machine.
|
||||
|
||||
=== Pre-Install
|
||||
|
||||
Ensure you have the following in place for your Silicon machine:
|
||||
|
||||
. Ensure a backup of your Apple, NAS, backup image, and Dropbox credentials are available.
|
||||
. Ensure a recent backup of your machine exists and works properly.
|
||||
. Ensure link:https://support.apple.com/en-us/HT208198[Startup Security Utility] is disabled.
|
||||
.. Turn off your machine.
|
||||
.. Start your machine by pressing and holding the `POWER` button until you see startup options being
|
||||
loaded.
|
||||
.. Select Utilities → Startup Security Utility from the main menu.
|
||||
.. Select _Reduced Security_.
|
||||
.. Quit the utility and restart the machine.
|
||||
|
||||
=== Install
|
||||
|
||||
. Create a link:https://alchemists.io/projects/mac_os/#_boot_disk[macOS Boot Disk] and follow
|
||||
instructions.
|
||||
. Ensure latest software updates are applied per
|
||||
link:https://alchemists.io/projects/mac_os/#_requirements[macOS Requirements].
|
||||
. Ensure Xcode is installed per link:https://alchemists.io/projects/mac_os/#_requirements[macOS
|
||||
Requirements].
|
||||
. Run link:https://alchemists.io/projects/mac_os#_usage[macOS Install] and follow all prompts.
|
||||
|
||||
=== Post-Install
|
||||
|
||||
The following are additional steps, not easily automated, that are worth completing after the
|
||||
install scripts have completed:
|
||||
|
||||
* System Preferences
|
||||
** Apple ID
|
||||
*** Login (if not already).
|
||||
*** Update avatar.
|
||||
*** Configure iCloud.
|
||||
*** Enable Find My Mac.
|
||||
** Bluetooth
|
||||
*** Reconnect keyboard, mouse, and earbuds.
|
||||
** Sound
|
||||
*** Disable _Play sound on startup_.
|
||||
*** Disable _Play user interface sound effects_.
|
||||
** Screen Time
|
||||
*** Disable entire feature.
|
||||
** General
|
||||
*** AirDrop & Handoff
|
||||
**** Disable _AirPlay Receiver_ so you can run link:https://github.com/rack/rack[Rack] applications on Port 5000.
|
||||
*** AutoFill & Passwords
|
||||
**** Disable _AutoFill Passwords and Passkeys_.
|
||||
*** Login Items
|
||||
**** Ensure only _Alfred_ is listed.
|
||||
*** Language and Region
|
||||
**** Set _First day of week_ to _Monday_.
|
||||
**** Set _Date format_ to _YYYY-MM-DD_.
|
||||
** Accessibility
|
||||
*** Hearing
|
||||
**** Enable _Turn off background sounds when your Mac is not in use._
|
||||
** Appearance
|
||||
*** Use _Light_ theme.
|
||||
** Apple Intelligence & Siri
|
||||
*** Disable _Listen for_.
|
||||
*** Disable _Keyboard shortcut_ (use Alfred instead).
|
||||
** Privacy & Security
|
||||
*** Enable _FileVault_.
|
||||
** Wallpaper
|
||||
*** Select custom image from _Documents_.
|
||||
** Spotlight
|
||||
*** Disable _Help Apple Improve Search_. link:https://obdev.at/blog/what-happens-on-your-device-stays-on-your-device-until-it-doesnt[Details].
|
||||
** Screen Saver
|
||||
*** Use _Message_ with custom text.
|
||||
** Battery
|
||||
*** Click _Options_ and enable _Prevent automatic sleeping on power adapter when the
|
||||
display is off_.
|
||||
** Lock Screen
|
||||
*** Set _Start Screen Saver when inactive_ for 5 minutes.
|
||||
*** Set _Turn display off on battery when inactive_ for 2 minutes.
|
||||
*** Set _Turn display off on power adapter when inactive_ for 10 minutes.
|
||||
*** Set _Require password after screen saver begins or display is turned off_ for 5 minutes.
|
||||
*** Set _Show message when locked_. Example: `<url> | <email> | <phone>`.
|
||||
** Touch ID & Password
|
||||
*** Rename fingerprint.
|
||||
*** Enable use of Touch ID for all settings.
|
||||
*** Enable use of Apple Watch.
|
||||
** Users & Groups
|
||||
*** Update avatar image.
|
||||
*** Remove unused login items.
|
||||
*** Disable guest account.
|
||||
** Internet Accounts
|
||||
*** Add all accounts.
|
||||
** Wallet & Apple Pay
|
||||
*** Reenable all accounts and assign default card.
|
||||
** Keyboard
|
||||
*** Set _Key repeat rate_ to max level.
|
||||
*** Set _Delay until repeat_ to short (max) level.
|
||||
*** Keyboard Shortcuts
|
||||
**** Select _Launchpad and Dock_ and uncheck _Turn Dock Hiding On/Off_.
|
||||
**** Select _Mission Control_ and assign `CONTROL + OPTION + COMMAND + N` to _Show Notification
|
||||
Center_.
|
||||
**** Within _Mission Control_, assign `CONTROL + OPTION + COMMAND + W` to _Mission Control_.
|
||||
**** Select _Screenshots_ and uncheck all boxes.
|
||||
**** Select _Spotlight_ and uncheck all boxes.
|
||||
** Mouse
|
||||
*** Ensure tracking speed is on the 5th setting (i.e. 5th from right of _Slow_).
|
||||
** Trackpad
|
||||
*** Ensure tracking speed is on the 5th setting (i.e. 5th from right of _Slow_).
|
||||
** Printers & Scanners
|
||||
*** Add printer/scanner.
|
||||
* iStat Menus
|
||||
** Double click, within the Applications folder, to install as a system preference.
|
||||
* Carbon Copy Cloner
|
||||
** Rename old backup, create new backup, and schedule frequency.
|
||||
* Notifications
|
||||
** Set _Show previews when unlocked_.
|
||||
** Disable _Allow notifications when the display is sleeping_.
|
||||
** Disable _Allow notifications when the screen is locked_.
|
||||
** Disable _Allow notifications when mirroring or sharing the display_.
|
||||
** Disable _Show notifications on lock screen_ and _Play sound for notification_ for all applications.
|
||||
** Enable _Allow notifications from iPhone_ but disable _Play sounds for notifications from iPhone_ within this option.
|
||||
|
||||
=== Keyboard Shortcuts
|
||||
|
||||
Several applications provide global hotkey support. These are the associations I use (which are also
|
||||
captured in the `+restore.bom+` as well):
|
||||
|
||||
* *COMMAND (x2)*: Siri (open)
|
||||
* *COMMAND + SPACE*: Alfred/Spotlight (open)
|
||||
* link:https://alchemists.io/articles/clean_shot/#_shortcuts[CleanShot]
|
||||
* *CONTROL + OPTION + COMMAND + c*: Pika (copy color)
|
||||
* *CONTROL + OPTION + COMMAND + d*: Alfred Define (use OPTION to open Dictionary)
|
||||
* *CONTROL + OPTION + COMMAND + h*: Alfred Highlight Syntax
|
||||
* *CONTROL + OPTION + COMMAND + k*: Keymou (cursor highlight show/hide)
|
||||
* *CONTROL + OPTION + COMMAND + m*: Moom (toggle)
|
||||
* *CONTROL + OPTION + SHIFT + m*: Moom (open custom actions)
|
||||
* *CONTROL + OPTION + COMMAND + n*: Notification Center (show/hide)
|
||||
* *CONTROL + OPTION + COMMAND + o*: Alfred Open URL in default browser
|
||||
* link:https://alchemists.io/articles/pixel_snap/#_shortcuts[PixelSnap]
|
||||
* *CONTROL + OPTION + COMMAND + r*: Resolutionator (selector)
|
||||
* *CONTROL + OPTION + COMMAND + t*: Alfred Large Type
|
||||
* *CONTROL + OPTION + COMMAND + w*: Mission Control
|
||||
* *CONTROL + OPTION + COMMAND + ←*: Keymou (move cursor left)
|
||||
* *CONTROL + OPTION + COMMAND + ↑*: Keymou (move cursor up)
|
||||
* *CONTROL + OPTION + COMMAND + →*: Keymou (move cursor right)
|
||||
* *CONTROL + OPTION + COMMAND + ↓*: Keymou (move cursor down)
|
||||
* *CONTROL + OPTION + COMMAND + ENTER*: Keymou (move cursor by division)
|
||||
* *CONTROL + OPTION + SPACE*: OmniFocus (quick entry)
|
||||
* *OPTION + SPACE*: Alfred (open)
|
||||
|
||||
💡 See additional link:https://saurabhs.org/macos-tips[tips] for details.
|
||||
|
||||
=== Newsyslog
|
||||
|
||||
Native to macOS, link:https://www.freebsd.org/cgi/man.cgi?newsyslog.conf(5)[newsyslog] can be used
|
||||
to configure system-wide log rotation across multiple projects. It’s a good recommendation to set
|
||||
this up so that disk space is carefully maintained. Here’s how to configure it for your system,
|
||||
start by creating a configuration for your projects in the `+/etc/newsyslog.d+` directory. In my
|
||||
case, I use the following configurations:
|
||||
|
||||
* `+/etc/newsyslog.d/alchemists.conf+`
|
||||
+
|
||||
....
|
||||
# logfilename [owner:group] mode count size when flags
|
||||
/Users/bkuhlmann/Dropbox/Development/Work/**/log/*.log 644 2 5120 * GJN
|
||||
....
|
||||
* `+/etc/newsyslog.d/homebrew.conf+`
|
||||
+
|
||||
....
|
||||
# logfilename [owner:group] mode count size when flags
|
||||
/usr/local/var/log/**/*.log 644 2 5120 * GJN
|
||||
....
|
||||
|
||||
These configurations ensure that logs are rotated every 5MB (5120KB). In order to test that these
|
||||
configurations are valid, run:
|
||||
|
||||
....
|
||||
sudo newsyslog -nvv
|
||||
....
|
||||
|
||||
If you don’t see any errors in the output, then your configuration settings are correct.
|
||||
|
||||
The last thing to do is to add a launch configuration to ensure the log rotations happen at
|
||||
regularly scheduled intervals. To do this create the following file:
|
||||
`+$HOME/Library/LaunchAgents/com.apple.newsyslog.plist+`. It should have the following content:
|
||||
|
||||
[source,xml]
|
||||
----
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>com.apple.newsyslog</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/sbin/newsyslog</string>
|
||||
</array>
|
||||
<key>LowPriorityIO</key>
|
||||
<true/>
|
||||
<key>Nice</key>
|
||||
<integer>1</integer>
|
||||
<key>StartCalendarInterval</key>
|
||||
<dict>
|
||||
<key>Minute</key>
|
||||
<integer>30</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
----
|
||||
|
||||
That’s it. System-wide log rotation is setup for your projects.
|
||||
|
||||
=== Customization
|
||||
|
||||
While this project’s configuration is opinionated and tailored for my setup, you can easily fork
|
||||
this project and customize it for your environment. Start by editing the files found in the `+bin+`
|
||||
and `+lib+` directories. Check out the
|
||||
link:https://alchemists.io/projects/mac_os/#_customization[macOS Customization Documentation]
|
||||
for further details.
|
||||
|
||||
_TIP_: The installer determines which applications/extensions to install as defined in the
|
||||
`+settings.sh+` script. Applications defined with the "`APP_NAME`" suffix and extensions defined
|
||||
with the "`EXTENSION_PATH`" suffix inform the installer what to care about. Removing/commenting out
|
||||
these applications/extensions within the `+settings.sh+` file will cause the installer to skip these
|
||||
applications/extensions.
|
||||
|
||||
== Development
|
||||
|
||||
To contribute, run:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
git clone https://github.com/bkuhlmann/mac_os-config.git
|
||||
cd mac_os-config
|
||||
----
|
||||
|
||||
== 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/policies/developer_certificate_of_origin[Developer Certificate of Origin]
|
||||
|
||||
== link:https://alchemists.io/projects/mac_os-config/versions[Versions]
|
||||
|
||||
== link:https://alchemists.io/community[Community]
|
||||
|
||||
== Credits
|
||||
|
||||
Engineered by link:https://alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].
|
||||
@@ -1,12 +0,0 @@
|
||||
# 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
|
||||
@@ -1,17 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs App Store software.
|
||||
|
||||
# Affinity Suite
|
||||
mas install 1616831348 # Affinity Designer 2
|
||||
mas install 1616822987 # Affinity Photo 2
|
||||
mas install 1606941598 # Affinity Publisher 2
|
||||
|
||||
# Productivity
|
||||
mas install 1352778147 # Bitwarden
|
||||
mas install 424389933 # Final Cut Pro
|
||||
mas install 1503970375 # Invoice Ninja
|
||||
mas install 409203825 # Numbers
|
||||
mas install 409201541 # Pages
|
||||
mas install 1503446680 # PastePal
|
||||
mas install 1579902068 # xSearch
|
||||
@@ -1,7 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs non-App Store, non-Homebrew applications.
|
||||
# Add custom app installations here using functions from lib/installers.sh:
|
||||
# install_dmg_app, install_zip_app, install_bare_pkg, etc.
|
||||
|
||||
# Currently empty - all apps are installed via Homebrew or App Store.
|
||||
@@ -1,44 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs basic system settings.
|
||||
|
||||
read -p "What is this machine's label (Example: \"Alchemist\")? " mac_os_label
|
||||
if [[ -z "$mac_os_label" ]]; then
|
||||
printf "%s\n" "ERROR: Invalid MacOS label."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "What is this machine's name (Example: \"alchemist\")? " mac_os_name
|
||||
if [[ -z "$mac_os_name" ]]; then
|
||||
printf "%s\n" "ERROR: Invalid MacOS name."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "Delete all files in $HOME/Documents (y/n)? " documents
|
||||
if [[ "$documents" == "y" ]]; then
|
||||
rm -rf "$HOME/Documents/*"
|
||||
printf "%s\n" "Documents deleted."
|
||||
fi
|
||||
|
||||
read -p "Delete all files in $HOME/Downloads (y/n)? " downloads
|
||||
if [[ "$downloads" == "y" ]]; then
|
||||
rm -rf "$HOME/Downloads/*"
|
||||
printf "%s\n" "Downloads deleted."
|
||||
fi
|
||||
|
||||
read -p "Change /usr/local ownership to $USER:staff (y/n)? " ownership
|
||||
if [[ "$ownership" == "y" ]]; then
|
||||
sudo chown -R "$USER":staff /usr/local
|
||||
printf "%s\n" "Ownership changed."
|
||||
fi
|
||||
|
||||
printf "Setting system label and name...\n"
|
||||
sudo scutil --set ComputerName "$mac_os_label"
|
||||
sudo scutil --set HostName "$mac_os_name"
|
||||
sudo scutil --set LocalHostName "$mac_os_name"
|
||||
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string $mac_os_name
|
||||
|
||||
printf "Installing custom fonts...\n"
|
||||
mkdir -p "$HOME/Library/Fonts"
|
||||
cp -n "$MAC_OS_CONFIG_PATH/fonts/"* "$HOME/Library/Fonts/" 2>/dev/null || true
|
||||
printf "Fonts installed.\n"
|
||||
@@ -1,566 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs system and application default settings.
|
||||
|
||||
printf "%s\n" "System - Disable boot sound effects."
|
||||
sudo nvram SystemAudioVolume=" "
|
||||
|
||||
printf "%s\n" "System - Reveal IP address, hostname, OS version, etc. when clicking login window clock."
|
||||
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
|
||||
|
||||
printf "%s\n" "System - Disable launching of previously open applications upon reboot."
|
||||
defaults write -g ApplePersistence -bool no
|
||||
|
||||
printf "%s\n" "System - Disable automatic termination of inactive apps."
|
||||
defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true
|
||||
|
||||
printf "%s\n" "System - Expand save panel by default."
|
||||
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
|
||||
|
||||
printf "%s\n" "System - Disable 'Are you sure you want to open this application?' dialog."
|
||||
defaults write com.apple.LaunchServices LSQuarantine -bool false
|
||||
|
||||
printf "%s\n" "System - Increase window resize speed for Cocoa applications."
|
||||
defaults write NSGlobalDomain NSWindowResizeTime -float 0.001
|
||||
|
||||
printf "%s\n" "System - Disable window resume system-wide."
|
||||
defaults write NSGlobalDomain NSQuitAlwaysKeepsWindows -bool false
|
||||
|
||||
printf "%s\n" "System - Disable auto-correct."
|
||||
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
|
||||
|
||||
printf "%s\n" "System - Disable smart quotes (not useful when writing code)."
|
||||
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
|
||||
|
||||
printf "%s\n" "System - Disable smart dashes (not useful when writing code)."
|
||||
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
|
||||
|
||||
printf "%s\n" "System - Require password immediately after sleep or screen saver begins."
|
||||
defaults write com.apple.screensaver askForPassword -int 1
|
||||
defaults write com.apple.screensaver askForPasswordDelay -int 0
|
||||
|
||||
printf "%s\n" "System - Avoid creating .DS_Store files on network volumes."
|
||||
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
|
||||
|
||||
printf "%s\n" "System - Automatically restart if system freezes."
|
||||
systemsetup -setrestartfreeze on
|
||||
|
||||
printf "%s\n" "System - Disable software updates."
|
||||
sudo softwareupdate --schedule off
|
||||
|
||||
printf "%s\n" "Keyboard - Automatically illuminate built-in MacBook keyboard in low light."
|
||||
defaults write com.apple.BezelServices kDim -bool true
|
||||
|
||||
printf "%s\n" "Keyboard - Turn off keyboard illumination when computer is not used for 5 minutes."
|
||||
defaults write com.apple.BezelServices kDimTime -int 300
|
||||
|
||||
printf "%s\n" "Keyboard - Enable keyboard access for all controls."
|
||||
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
|
||||
|
||||
printf "%s\n" "Keyboard - Set a fast keyboard repeat rate."
|
||||
defaults write NSGlobalDomain KeyRepeat -int 0
|
||||
|
||||
printf "%s\n" "Keyboard - Disable press-and-hold for keys in favor of key repeat."
|
||||
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false
|
||||
|
||||
printf "%s\n" "Trackpad - Map bottom right corner to right-click."
|
||||
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 2
|
||||
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true
|
||||
defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1
|
||||
defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true
|
||||
|
||||
printf "%s\n" "Trackpad - Enable tap to click for current user and the login screen."
|
||||
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
|
||||
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
|
||||
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
|
||||
|
||||
printf "%s\n" "Trackpad - Use CONTROL (^) with scroll to zoom."
|
||||
defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
|
||||
defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144
|
||||
|
||||
printf "%s\n" "Trackpad - Follow keyboard focus while zoomed in."
|
||||
defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true
|
||||
|
||||
printf "%s\n" "Bluetooth - Increase sound quality for headphones/headsets."
|
||||
defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" -int 40
|
||||
|
||||
printf "%s\n" "Menu Bar - Show only Bluetooth and Airport."
|
||||
for domain in $HOME/Library/Preferences/ByHost/com.apple.systemuiserver.*; do
|
||||
defaults write "${domain}" dontAutoLoad -array "/System/Library/CoreServices/Menu Extras/TimeMachine.menu"
|
||||
done
|
||||
|
||||
defaults write com.apple.systemuiserver menuExtras -array \
|
||||
"/System/Library/CoreServices/Menu Extras/Bluetooth.menu" \
|
||||
"/System/Library/CoreServices/Menu Extras/AirPort.menu"
|
||||
|
||||
printf "%s\n" "Dock - Remove all default app icons."
|
||||
defaults write com.apple.dock persistent-apps -array
|
||||
|
||||
printf "%s\n" "Dock - Automatically hide and show."
|
||||
defaults write com.apple.dock autohide -bool true
|
||||
|
||||
printf "%s\n" "Dock - Remove the auto-hiding delay."
|
||||
defaults write com.apple.Dock autohide-delay -float 0
|
||||
|
||||
printf "%s\n" "Dock - Don’t show Dashboard as a Space."
|
||||
defaults write com.apple.dock "dashboard-in-overlay" -bool true
|
||||
|
||||
printf "%s\n" "iCloud - Save to disk by default."
|
||||
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
|
||||
|
||||
printf "%s\n" "Finder - Show the $HOME/Library folder."
|
||||
chflags nohidden $HOME/Library
|
||||
|
||||
printf "%s\n" "Finder - Show hidden files."
|
||||
defaults write com.apple.finder AppleShowAllFiles -bool true
|
||||
|
||||
printf "%s\n" "Finder - Show filename extensions."
|
||||
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
|
||||
|
||||
printf "%s\n" "Finder - Disable the warning when changing a file extension."
|
||||
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
|
||||
|
||||
printf "%s\n" "Finder - Show path bar."
|
||||
defaults write com.apple.finder ShowPathbar -bool true
|
||||
|
||||
printf "%s\n" "Finder - Show status bar."
|
||||
defaults write com.apple.finder ShowStatusBar -bool true
|
||||
|
||||
printf "%s\n" "Finder - Display full POSIX path as window title."
|
||||
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
|
||||
|
||||
printf "%s\n" "Finder - Use list view in all Finder windows."
|
||||
defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv"
|
||||
|
||||
printf "%s\n" "Finder - Allow quitting via COMMAND+Q -- Doing so will also hide desktop icons."
|
||||
defaults write com.apple.finder QuitMenuItem -bool true
|
||||
|
||||
printf "%s\n" "Finder - Disable the warning before emptying the Trash."
|
||||
defaults write com.apple.finder WarnOnEmptyTrash -bool false
|
||||
|
||||
printf "%s\n" "Finder - Allow text selection in Quick Look."
|
||||
defaults write com.apple.finder QLEnableTextSelection -bool true
|
||||
|
||||
printf "%s\n" "iOS Simulator - Symlink the iOS Simulator application."
|
||||
sudo ln -sf "/Applications/Xcode.app/Contents/Applications/iPhone Simulator.app" "/Applications/iOS Simulator.app"
|
||||
|
||||
printf "%s\n" "Safari - Set home page to 'about:blank' for faster loading."
|
||||
defaults write com.apple.Safari HomePage -string "about:blank"
|
||||
|
||||
printf "%s\n" "Safari - Hide bookmarks bar."
|
||||
defaults write com.apple.Safari ShowFavoritesBar -bool false
|
||||
|
||||
printf "%s\n" "Safari - Use Contains instead of Starts With in search banners."
|
||||
defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false
|
||||
|
||||
printf "%s\n" "Safari - Enable debug menu."
|
||||
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
|
||||
|
||||
printf "%s\n" "Safari - Enable the Develop menu and the Web Inspector."
|
||||
defaults write com.apple.Safari IncludeDevelopMenu -bool true
|
||||
defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true
|
||||
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true
|
||||
|
||||
printf "%s\n" "Safari - Add a context menu item for showing the Web Inspector in web views."
|
||||
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
|
||||
|
||||
printf "%s\n" "Safari - Disable sending search queries to Apple.."
|
||||
defaults write com.apple.Safari UniversalSearchEnabled -bool false
|
||||
|
||||
printf "%s\n" "Chrome - Prevent native print dialog, use system dialog instead."
|
||||
defaults write com.google.Chrome DisablePrintPreview -boolean true
|
||||
|
||||
printf "%s\n" "Mail - Copy email addresses as 'foo@example.com' instead of 'Foo Bar <foo@example.com>'."
|
||||
defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false
|
||||
|
||||
printf "%s\n" "Mail - Disable send animation."
|
||||
defaults write com.apple.mail DisableSendAnimations -bool true
|
||||
|
||||
printf "%s\n" "Mail - Disable reply animation."
|
||||
defaults write com.apple.mail DisableReplyAnimations -bool true
|
||||
|
||||
printf "%s\n" "Mail - Enable COMMAND+ENTER to send mail."
|
||||
defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Send" -string "@\\U21a9"
|
||||
|
||||
printf "%s\n" "Address Book - Enable debug menu."
|
||||
defaults write com.apple.addressbook ABShowDebugMenu -bool true
|
||||
|
||||
printf "%s\n" "iCal - Enable debug menu."
|
||||
defaults write com.apple.iCal IncludeDebugMenu -bool true
|
||||
|
||||
printf "%s\n" "TextEdit - Use plain text mode for new documents."
|
||||
defaults write com.apple.TextEdit RichText -int 0
|
||||
|
||||
printf "%s\n" "TextEdit - Open and save files as UTF-8 encoding."
|
||||
defaults write com.apple.TextEdit PlainTextEncoding -int 4
|
||||
defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4
|
||||
|
||||
printf "%s\n" "Disk Utility - Enable debug menu."
|
||||
defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true
|
||||
defaults write com.apple.DiskUtility advanced-image-options -bool true
|
||||
|
||||
printf "%s\n" "Time Machine - Prevent prompting to use new hard drives as backup volume."
|
||||
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
|
||||
|
||||
printf "%s\n" "Printer - Expand print panel by default."
|
||||
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
|
||||
|
||||
printf "%s\n" "Printer - Automatically quit printer app once the print jobs complete."
|
||||
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
|
||||
|
||||
printf "%s\n" "Game Center - Disable Game Center."
|
||||
defaults write com.apple.gamed Disabled -bool true
|
||||
|
||||
printf "%s\n" "App Store - Enable the WebKit Developer Tools in the Mac App Store."
|
||||
defaults write com.apple.appstore WebKitDeveloperExtras -bool true
|
||||
|
||||
printf "%s\n" "App Store - Enable Debug Menu in the Mac App Store."
|
||||
defaults write com.apple.appstore ShowDebugMenu -bool true
|
||||
|
||||
printf "CCMenu - Add open source projects\n"
|
||||
defaults write net.sourceforge.cruisecontrol.CCMenu '
|
||||
{
|
||||
NSNavLastRootDirectory = "~/Downloads";
|
||||
NSNavPanelExpandedSizeForSaveMode = "{800, 448}";
|
||||
"NSStatusItem Preferred Position Item-0" = 628;
|
||||
"PlaySound Broken" = 0;
|
||||
"PlaySound Fixed" = 0;
|
||||
"PlaySound StillFailing" = 0;
|
||||
"PlaySound Successful" = 0;
|
||||
ProjectOrder = 1;
|
||||
"SendNotification Broken" = 1;
|
||||
"SendNotification Fixed" = 1;
|
||||
"SendNotification StillFailing" = 1;
|
||||
"SendNotification Successful" = 1;
|
||||
ShowPipelineStatusInWindow = 1;
|
||||
"Sound Broken" = Sosumi;
|
||||
"Sound Fixed" = Sosumi;
|
||||
"Sound StillFailing" = Sosumi;
|
||||
"Sound Successful" = Sosumi;
|
||||
pipelines = (
|
||||
{
|
||||
feedName = "bkuhlmann/auther";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/auther.cc.xml";
|
||||
name = Auther;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/bashsmith";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/bashsmith.cc.xml";
|
||||
name = Bashsmith;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/benchmarks";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/benchmarks.cc.xml";
|
||||
name = Benchmarks;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/caliber";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/caliber.cc.xml";
|
||||
name = Caliber;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/cogger";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/cogger.cc.xml";
|
||||
name = Cogger;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/containable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/containable.cc.xml";
|
||||
name = Containable;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/core";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/core.cc.xml";
|
||||
name = Core;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/docker-alpine-base";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/docker-alpine-base.cc.xml";
|
||||
name = "Docker Alpine Base";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/docker-alpine-ruby";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/docker-alpine-ruby.cc.xml";
|
||||
name = "Docker Alpine Ruby";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/dotfiles";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/dotfiles.cc.xml";
|
||||
name = Dotfiles;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/etcher";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/etcher.cc.xml";
|
||||
name = Etcher;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/functionable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/functionable.cc.xml";
|
||||
name = "Functionable";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/gemsmith";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/gemsmith.cc.xml";
|
||||
name = Gemsmith;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/ghub";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/ghub.cc.xml";
|
||||
name = Ghub;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/git-lint";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/git-lint.cc.xml";
|
||||
name = "Git Lint";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/gitt";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/gitt.cc.xml";
|
||||
name = Gitt;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/hanamismith";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/hanamismith.cc.xml";
|
||||
name = Hanamismith;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/htmx";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/htmx.cc.xml";
|
||||
name = HTMX;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/htmx-remove";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/htmx-remove.cc.xml";
|
||||
name = "htmx Remove";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/htmx-select";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/htmx-select.cc.xml";
|
||||
name = "htmx Select";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/hemo";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/hemo.cc.xml";
|
||||
name = Hemo;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/http-fake";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/http-fake.cc.xml";
|
||||
name = "HTTP Fake";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/infusible";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/infusible.cc.xml";
|
||||
name = Infusible;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/initable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/initable.cc.xml";
|
||||
name = Initable;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/inspectable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/inspectable.cc.xml";
|
||||
name = Inspectable;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/irb-kit";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/irb-kit.cc.xml";
|
||||
name = "IRB Kit";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/kagi-api";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/kagi-api.cc.xml";
|
||||
name = "Kagi API";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/lode";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/lode.cc.xml";
|
||||
name = Lode;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/mac_os";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/mac_os.cc.xml";
|
||||
name = macOS;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/mac_os-config";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/mac_os-config.cc.xml";
|
||||
name = "macOS Configuration";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/marameters";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/marameters.cc.xml";
|
||||
name = Marameters;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/milestoner";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/milestoner.cc.xml";
|
||||
name = Milestoner;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/navigator";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/navigator.cc.xml";
|
||||
name = Navigator;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/pennyworth";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/pennyworth.cc.xml";
|
||||
name = Pennyworth;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/petail";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/petail.cc.xml";
|
||||
name = Petail;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/pipeable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/pipeable.cc.xml";
|
||||
name = Pipeable;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/pkce";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/pkce.cc.xml";
|
||||
name = PKCE;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/pragmater";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/pragmater.cc.xml";
|
||||
name = Pragmater;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/prawn_plus";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/prawn_plus.cc.xml";
|
||||
name = "Prawn+";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/refinements";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/refinements.cc.xml";
|
||||
name = Refinements;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/rubysmith";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/rubysmith.cc.xml";
|
||||
name = Rubysmith;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/runcom";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/runcom.cc.xml";
|
||||
name = Runcom;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/sod";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/sod.cc.xml";
|
||||
name = Sod;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/spek";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/spek.cc.xml";
|
||||
name = Spek;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/sublime_text_kit";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/sublime_text_kit.cc.xml";
|
||||
name = "Sublime Text Kit";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/sublime_text_setup";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/sublime_text_setup.cc.xml";
|
||||
name = "Sublime Text Setup";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/tana";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/tana.cc.xml";
|
||||
name = Tana;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/tocer";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/tocer.cc.xml";
|
||||
name = Tocer;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/tone";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/tone.cc.xml";
|
||||
name = Tone;
|
||||
},
|
||||
{
|
||||
feedName = "usetrmnl/trmnl-api";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/usetrmnl/trmnl-api.cc.xml";
|
||||
name = "TRMNL API";
|
||||
},
|
||||
{
|
||||
feedName = "usetrmnl/byos_hanami";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/usetrmnl/byos_hanami.cc.xml";
|
||||
name = "TRMNL Terminus";
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/versionaire";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/versionaire.cc.xml";
|
||||
name = Versionaire;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/wholeable";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/wholeable.cc.xml";
|
||||
name = Wholeable;
|
||||
},
|
||||
{
|
||||
feedName = "bkuhlmann/xdg";
|
||||
feedType = cctray;
|
||||
feedUrl = "https://circleci.com/gh/bkuhlmann/xdg.cc.xml";
|
||||
name = XDG;
|
||||
}
|
||||
);
|
||||
}'
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs application extensions (editor plugins, etc.)
|
||||
# Add extensions here using install_git_app or install_file from lib/installers.sh
|
||||
|
||||
# Currently empty - add extensions as needed.
|
||||
@@ -1,22 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew Casks (GUI applications).
|
||||
|
||||
# Browsers
|
||||
brew install --cask eloston-chromium
|
||||
|
||||
# Communication
|
||||
brew install --cask deepl
|
||||
brew install --cask element
|
||||
brew install --cask signal
|
||||
|
||||
# Cloud & Sync
|
||||
brew install --cask nextcloud
|
||||
brew install --cask proton-drive
|
||||
brew install --cask proton-mail
|
||||
brew install --cask protonvpn
|
||||
|
||||
# Development
|
||||
brew install --cask codex
|
||||
brew install --cask nova
|
||||
brew install --cask transmit
|
||||
@@ -1,23 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew formulas (CLI tools).
|
||||
|
||||
# Shell & Terminal
|
||||
brew install atuin
|
||||
brew install bash
|
||||
brew install bash-completion
|
||||
|
||||
# AI
|
||||
brew install gemini-cli
|
||||
|
||||
# Development
|
||||
brew install node
|
||||
|
||||
# Media
|
||||
brew install ffmpeg
|
||||
|
||||
# Utilities
|
||||
brew install mas
|
||||
brew install mole
|
||||
brew install rename
|
||||
brew install ykman
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs global Node.js packages.
|
||||
# Add packages here: npm install -g <package>
|
||||
|
||||
# Currently empty - add packages as needed.
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Ruby gems.
|
||||
# Add gems here: gem install <gem>
|
||||
|
||||
# Currently empty - add gems as needed.
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Rust crates.
|
||||
# Add crates here: cargo install <crate>
|
||||
|
||||
# Currently empty - add crates as needed.
|
||||
@@ -1,11 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs shell.
|
||||
|
||||
if [[ -z $(cat /etc/shells | grep "$(get_homebrew_bin_root)/bash") ]]; then
|
||||
sudo bash -c "printf '$(get_homebrew_bin_root)/bash\n' >> /etc/shells"
|
||||
chsh -s "$(get_homebrew_bin_root)/bash"
|
||||
rm -f "$HOME/.bash_profile"
|
||||
else
|
||||
printf "%s\n" "Shell is installed."
|
||||
fi
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundler/setup"
|
||||
|
||||
load Gem.bin_path "rake", "rake"
|
||||
@@ -1,48 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Performs restoration of backups.
|
||||
|
||||
read -p "Enter the backup volume path (Example: \"/Volumes/alchemist\")? " mac_os_backup_root
|
||||
|
||||
if [[ ! -e "$mac_os_backup_root" ]]; then
|
||||
printf "%s\n" "ERROR: Backup volume cannot be found: $mac_os_backup_root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p log
|
||||
|
||||
rsync \
|
||||
--rsync-path="sudo rsync" \
|
||||
--perms \
|
||||
--recursive \
|
||||
--compress \
|
||||
--numeric-ids \
|
||||
--links \
|
||||
--hard-links \
|
||||
--files-from="$MAC_OS_CONFIG_PATH/lib/restore.bom" \
|
||||
--log-file="log/restore.log" \
|
||||
--human-readable \
|
||||
--verbose \
|
||||
"$mac_os_backup_root/" /
|
||||
|
||||
# Newsyslog
|
||||
sudo cp -p "$mac_os_backup_root/etc/newsyslog.d/alchemists.conf" "/etc/newsyslog.d"
|
||||
sudo cp -p "$mac_os_backup_root/etc/newsyslog.d/homebrew.conf" "/etc/newsyslog.d"
|
||||
|
||||
# Dotfiles
|
||||
(
|
||||
cd "$HOME/Engineering/OSS/dotfiles"
|
||||
bin/run l
|
||||
)
|
||||
|
||||
# Sublime Text
|
||||
(
|
||||
cd "$HOME/Engineering/OSS/sublime_text_setup"
|
||||
bin/run l
|
||||
)
|
||||
|
||||
# Duti
|
||||
duti "$HOME/.config/duti/configuration.duti"
|
||||
|
||||
# Reboot
|
||||
printf "%s\n" "Please reboot machine and then finish by installing all libraries."
|
||||
@@ -1,232 +0,0 @@
|
||||
# APPLICATIONS
|
||||
|
||||
# Acorn
|
||||
/Users/bkuhlmann/Library/Preferences/com.flyingmeat.Acorn5.LSSharedFileList.plist
|
||||
|
||||
# Alfred
|
||||
/Users/bkuhlmann/Library/Preferences/com.runningwithcrayons.Alfred-Preferences.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.runningwithcrayons.Alfred.plist
|
||||
|
||||
# App Cleaner
|
||||
/Users/bkuhlmann/Library/Preferences/com.freemacsoft.AppCleaner.plist
|
||||
/Users/bkuhlmann/Library/Preferences/net.freemacsoft.AppCleaner.plist
|
||||
|
||||
# Apple AirPlay
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.airplay.plist
|
||||
|
||||
# Apple App Store
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.appstore.commerce.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.appstore.plist
|
||||
|
||||
# Apple Clock
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.menuextra.clock.plist
|
||||
|
||||
# Apple Contacts
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.AddressBook.plist
|
||||
|
||||
# Apple Control Center
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.controlcenter.plist
|
||||
|
||||
# Apple Dock
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.dock.plist
|
||||
|
||||
# Apple FaceTime
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.facetime.bag.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.FaceTime.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.imservice.ids.FaceTime.plist
|
||||
|
||||
# Apple Finder
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.finder.plist
|
||||
|
||||
# Apple Image Capture
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.ImageCaptureExtension2.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.Image_Capture.plist
|
||||
|
||||
# Apple iTunes
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.iTunes.eq.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.iTunes.Gracenote.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.iTunes.Gracenote.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.iTunes.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.iTunesHelper.plist
|
||||
|
||||
# Apple Mouse and Trackpad
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.driver.AppleBluetoothMultitouch.mouse.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.driver.AppleBluetoothMultitouch.trackpad.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.driver.AppleHIDMouse.plist
|
||||
|
||||
# Apple Siri
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.Siri.plist
|
||||
|
||||
# Apple System Preferences
|
||||
/Users/bkuhlmann/Library/Preferences/com.apple.systempreferences.plist
|
||||
|
||||
# Audio Hijack
|
||||
/Users/bkuhlmann/Library/Preferences/com.rogueamoeba.audiohijack3.plist
|
||||
|
||||
# Balena Etcher
|
||||
/Users/bkuhlmann/Library/Preferences/io.balena.etcher.plist
|
||||
|
||||
# Carbon Copy Cloner
|
||||
/Users/bkuhlmann/Library/Preferences/com.bombich.ccc.plist
|
||||
|
||||
# CleanShot
|
||||
/Users/bkuhlmann/Library/Preferences/pl.maketheweb.cleanshotx.plist
|
||||
|
||||
# Discord
|
||||
/Users/bkuhlmann/Library/Preferences/com.hnc.Discord.plist
|
||||
|
||||
# Docker
|
||||
/Users/bkuhlmann/Library/Preferences/com.docker.docker.plist
|
||||
|
||||
# Doxie
|
||||
/Users/bkuhlmann/Library/Preferences/com.getdoxie.doxie.plist
|
||||
|
||||
# Firefox
|
||||
/Users/bkuhlmann/Library/Preferences/org.mozilla.firefox.plist
|
||||
|
||||
# Fission
|
||||
/Users/bkuhlmann/Library/Preferences/com.rogueamoeba.Fission.plist
|
||||
|
||||
# Google Chrome
|
||||
/Users/bkuhlmann/Library/Preferences/com.google.Chrome.plist
|
||||
|
||||
# Hazel
|
||||
/Users/bkuhlmann/Library/Application Support/Hazel
|
||||
/Users/bkuhlmann/Library/Preferences/com.noodlesoft.Hazel.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.noodlesoft.HazelHelper.plist
|
||||
|
||||
# Ice
|
||||
/Users/bkuhlmann/Library/Preferences/com.jordanbaird.Ice.plist
|
||||
|
||||
# IINA
|
||||
/Users/bkuhlmann/Library/Preferences/com.colliderli.iina.plist
|
||||
|
||||
# ImageOptim
|
||||
/Users/bkuhlmann/Library/Preferences/net.pornel.ImageOptim.plist
|
||||
|
||||
# iStat Menus
|
||||
/Users/bkuhlmann/Library/Preferences/com.bjango.istatmenus.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.bjango.istatmenus6.extras.plist
|
||||
|
||||
# iTerm
|
||||
/Users/bkuhlmann/Library/Preferences/com.googlecode.iterm2.plist
|
||||
|
||||
# Kagi
|
||||
/Users/bkuhlmann/Library/Preferences/com.kagi.kagimacOS.plist
|
||||
|
||||
# Keymou
|
||||
/Users/bkuhlmann/Library/Preferences/com.manytricks.Keymo.plist
|
||||
|
||||
# LimeChat
|
||||
/Users/bkuhlmann/Library/Preferences/net.limechat.LimeChat-AppStore.plist
|
||||
|
||||
# Max
|
||||
/Users/bkuhlmann/Library/Preferences/org.sbooth.Max.LSSharedFileList.plist
|
||||
/Users/bkuhlmann/Library/Preferences/org.sbooth.Max.plist
|
||||
|
||||
# MoneyWell
|
||||
/Users/bkuhlmann/Library/Preferences/com.nothirst.moneywell.mac.LSSharedFileList.plist
|
||||
|
||||
# Moom
|
||||
/Users/bkuhlmann/Library/Preferences/com.manytricks.Moom.plist
|
||||
|
||||
# NetNewsWire
|
||||
/Users/bkuhlmann/Library/Preferences/com.ranchero.NetNewsWire-Evergreen.plist
|
||||
|
||||
# Numi
|
||||
/Users/bkuhlmann/Library/Preferences/com.dmitrynikolaev.numi.plist
|
||||
|
||||
# Obsidian
|
||||
/Users/bkuhlmann/Library/Preferences/md.obsidian.plist
|
||||
|
||||
# Path Finder
|
||||
/Users/bkuhlmann/Library/Application Support/Path Finder
|
||||
/Users/bkuhlmann/Library/Preferences/com.cocoatech.PathFinder.LSSharedFileList.plist
|
||||
/Users/bkuhlmann/Library/Preferences/com.cocoatech.PathFinder.plist
|
||||
|
||||
# pgAdmin
|
||||
/Users/bkuhlmann/Library/Preferences/org.pgadmin.pgAdmin 4.plist
|
||||
|
||||
# Pika
|
||||
/Users/bkuhlmann/Library/Preferences/com.superhighfives.Pika.plist
|
||||
|
||||
# PixelSnap
|
||||
/Users/bkuhlmann/Library/Preferences/pl.maketheweb.pixelsnap2.plist
|
||||
|
||||
# Retrobatch
|
||||
/Users/bkuhlmann/Library/Preferences/com.flyingmeat.Retrobatch.plist
|
||||
|
||||
# Resolutionator
|
||||
/Users/bkuhlmann/Library/Preferences/com.manytricks.Resolutionator.plist
|
||||
|
||||
# Skim
|
||||
/Users/bkuhlmann/Library/Prererences/net.sourceforge.skim-aoo.skim.bookmarks.plist
|
||||
/Users/bkuhlmann/Library/Preferences/net.sourceforge.skim-app.skim.plist
|
||||
|
||||
# Signal
|
||||
/Users/bkuhlmann/Library/Preferences/org.whispersystems.signal-desktop.helper.plist
|
||||
/Users/bkuhlmann/Library/Preferences/org.whispersystems.signal-desktop.plist
|
||||
|
||||
# Sonos
|
||||
/Users/bkuhlmann/Library/Preferences/com.sonos.macController.plist
|
||||
|
||||
# Tana
|
||||
/Users/bkuhlmann/Library/Preferences/inc.tana.desktop.plist
|
||||
|
||||
# Transmit
|
||||
/Users/bkuhlmann/Library/Preferences/com.panic.Transmit.plist
|
||||
|
||||
# Viscosity
|
||||
/Users/bkuhlmann/Library/Preferences/com.viscosityvpn.Viscosity.plist
|
||||
|
||||
# Vivaldi
|
||||
/Users/bkuhlmann/Library/Preferences/com.vivaldi.Vivaldi.plist
|
||||
|
||||
# SYSTEM
|
||||
|
||||
# newsyslog
|
||||
/Users/bkuhlmann/Library/LaunchAgents/com.apple.newsyslog.plist
|
||||
|
||||
# USER
|
||||
/Users/bkuhlmann/.asciinema
|
||||
/Users/bkuhlmann/.cache/milestoner
|
||||
/Users/bkuhlmann/.cache/psql
|
||||
/Users/bkuhlmann/.cache/ruby
|
||||
/Users/bkuhlmann/.cache/zoxide
|
||||
/Users/bkuhlmann/.config/asciinema
|
||||
/Users/bkuhlmann/.config/atuin
|
||||
/Users/bkuhlmann/.config/bash
|
||||
/Users/bkuhlmann/.config/bundler
|
||||
/Users/bkuhlmann/.config/duti
|
||||
/Users/bkuhlmann/.config/gemsmith
|
||||
/Users/bkuhlmann/.config/git
|
||||
/Users/bkuhlmann/.config/hanamismith
|
||||
/Users/bkuhlmann/.config/htop
|
||||
/Users/bkuhlmann/.config/iterm2
|
||||
/Users/bkuhlmann/.config/lnav
|
||||
/Users/bkuhlmann/.config/milestoner
|
||||
/Users/bkuhlmann/.config/pennyworth
|
||||
/Users/bkuhlmann/.config/pgcli
|
||||
/Users/bkuhlmann/.config/pragmater
|
||||
/Users/bkuhlmann/.config/rubysmith
|
||||
/Users/bkuhlmann/.config/sublime_text_kit
|
||||
/Users/bkuhlmann/.gem/credentials
|
||||
/Users/bkuhlmann/.gem/gem-private_key.pem
|
||||
/Users/bkuhlmann/.gem/gem-public_cert.pem
|
||||
/Users/bkuhlmann/.gnupg
|
||||
/Users/bkuhlmann/.local/share/atuin/history.db
|
||||
/Users/bkuhlmann/.minisign
|
||||
/Users/bkuhlmann/.netrc
|
||||
/Users/bkuhlmann/.parallel
|
||||
/Users/bkuhlmann/.pgadmin
|
||||
/Users/bkuhlmann/.siege
|
||||
/Users/bkuhlmann/.ssh
|
||||
/Users/bkuhlmann/.vscode
|
||||
/Users/bkuhlmann/Apps
|
||||
/Users/bkuhlmann/Desktop
|
||||
/Users/bkuhlmann/Documents
|
||||
/Users/bkuhlmann/Downloads
|
||||
/Users/bkuhlmann/Dropbox
|
||||
/Users/bkuhlmann/Engineering
|
||||
/Users/bkuhlmann/Scratch
|
||||
/Users/bkuhlmann/Watch
|
||||
@@ -1,19 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Defines global settings.
|
||||
|
||||
# General
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Homebrew
|
||||
export HOMEBREW_CURL_RETRIES=3
|
||||
|
||||
# Custom Applications
|
||||
# Add app URLs and names here for apps not available via Homebrew or App Store.
|
||||
# Example:
|
||||
# export MY_APP_NAME="MyApp.app"
|
||||
# export MY_APP_URL="https://example.com/download/myapp.dmg"
|
||||
# export MY_APP_VOLUME_NAME="MyApp"
|
||||
82
mac_os/QUICK_INSTALL.md
Normal file
82
mac_os/QUICK_INSTALL.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Quick Install Guide
|
||||
|
||||
## One-Line Install (Recommended)
|
||||
|
||||
Upload `install.sh` to `static.due.ren`, then on a fresh Mac run:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://static.due.ren/install.sh | bash
|
||||
```
|
||||
|
||||
That's it! The script will:
|
||||
1. Install Xcode Command Line Tools
|
||||
2. Install Homebrew
|
||||
3. Install all CLI tools (atuin, bash, gemini-cli, node, ffmpeg, mas, mole, rename, ykman)
|
||||
4. Install all GUI apps (Chromium, DeepL, Element, Signal, Nextcloud, Proton apps, Codex, Nova, Transmit)
|
||||
5. Install Mac App Store apps (Bitwarden, Invoice Ninja, Numbers, Pages, PastePal, xSearch)
|
||||
6. Download and install Google Fonts (Barlow, Poppins)
|
||||
|
||||
## Notes
|
||||
|
||||
- **Mac App Store apps**: You must be signed into the App Store before running
|
||||
- **Berkeley Mono font**: This is a commercial font ($75) and must be purchased and installed manually from https://berkeleygraphics.com/typefaces/berkeley-mono/
|
||||
- **Idempotent**: Safe to run multiple times - won't reinstall existing software
|
||||
|
||||
## Manual Installation
|
||||
|
||||
If you prefer to review before running:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://static.due.ren/install.sh -o install.sh
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
```
|
||||
|
||||
## Hosting the Script
|
||||
|
||||
To host on static.due.ren:
|
||||
|
||||
1. Upload `install.sh` to your static host
|
||||
2. Ensure it's accessible at `https://static.due.ren/install.sh`
|
||||
3. Make sure the file is served with correct MIME type (text/plain or application/x-sh)
|
||||
|
||||
## What's Installed
|
||||
|
||||
### Homebrew Formulas (CLI)
|
||||
- atuin - Shell history
|
||||
- bash - Updated bash shell
|
||||
- bash-completion - Bash completions
|
||||
- gemini-cli - Gemini AI CLI
|
||||
- node - Node.js
|
||||
- ffmpeg - Media processing
|
||||
- mas - Mac App Store CLI
|
||||
- mole - SSH tunneling
|
||||
- rename - Rename utility
|
||||
- ykman - YubiKey manager
|
||||
|
||||
### Homebrew Casks (GUI)
|
||||
- eloston-chromium - Ungoogled Chromium
|
||||
- deepl - DeepL translator
|
||||
- element - Matrix client
|
||||
- signal - Signal messenger
|
||||
- nextcloud - Nextcloud sync
|
||||
- proton-drive - Proton Drive
|
||||
- proton-mail - Proton Mail
|
||||
- protonvpn - Proton VPN
|
||||
- codex - AI coding assistant
|
||||
- nova - Nova editor
|
||||
- transmit - FTP client
|
||||
|
||||
### Mac App Store
|
||||
- Bitwarden - Password manager
|
||||
- Invoice Ninja - Invoicing
|
||||
- Numbers - Spreadsheets
|
||||
- Pages - Word processor
|
||||
- PastePal - Clipboard manager
|
||||
- xSearch - Search tool
|
||||
|
||||
### Fonts
|
||||
- Barlow (Google Font) - Full family
|
||||
- Barlow Semi Condensed (Google Font) - Full family
|
||||
- Poppins (Google Font) - Full family
|
||||
- Berkeley Mono (Commercial) - Must install manually
|
||||
@@ -1,37 +0,0 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Creates macOS boot disk.
|
||||
|
||||
printf "%s\n" "macOS Boot Disk Setup"
|
||||
printf "%s\n" " 1. Insert a USB drive (8GB or higher)."
|
||||
printf "%s\n" " 2. Use Disk Utility to format as \"Mac OS Extended (Journaled)\"."
|
||||
printf "%s\n" " 3. Use Disk Utility to set the schema, if available, as \"GUID Partition Map\"."
|
||||
printf "%s\n" " 4. Use Disk Utility to label as \"Untitled\"."
|
||||
printf "%s\n" " 5. Run this script to install the OS and create a bootable USB drive."
|
||||
printf "\n%s\n" "macOS Boot Disk Usage:"
|
||||
printf "%s\n" " 1. Insert the USB drive, created above, 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 logo 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 "\n%s\n" "Creating macOS boot disk..."
|
||||
|
||||
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 "%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" --downloadassets --nointeraction
|
||||
@@ -7,11 +7,15 @@ set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_app_store"
|
||||
# Check that mas CLI is installed
|
||||
check_mas_install
|
||||
|
||||
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
|
||||
# Productivity
|
||||
mas install 1352778147 # Bitwarden
|
||||
mas install 1503970375 # Invoice Ninja
|
||||
mas install 409203825 # Numbers
|
||||
mas install 409201541 # Pages
|
||||
mas install 1503446680 # PastePal
|
||||
mas install 1579902068 # xSearch
|
||||
|
||||
printf "\n✅ Mac App Store applications installation complete!\n"
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#! /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
|
||||
@@ -2,15 +2,7 @@
|
||||
|
||||
# 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
|
||||
printf "Installing custom fonts...\n"
|
||||
mkdir -p "$HOME/Library/Fonts"
|
||||
cp -n "$MAC_OS_PATH/fonts/"* "$HOME/Library/Fonts/" 2>/dev/null || true
|
||||
printf "Fonts installed.\n"
|
||||
|
||||
@@ -11,7 +11,3 @@ if [[ "$xcode_response" != "y" ]]; then
|
||||
printf "%s\n" "ERROR: Xcode CLI tools must be installed before proceeding."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$(/usr/bin/arch)" == "arm64" ]]; then
|
||||
softwareupdate --install-rosetta --agree-to-license
|
||||
fi
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#! /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
|
||||
@@ -1,17 +1,37 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew Cask software.
|
||||
# Installs Homebrew Casks (GUI applications).
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_casks"
|
||||
# Ensure Homebrew is installed
|
||||
install_homebrew
|
||||
|
||||
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
|
||||
# Browsers
|
||||
brew install --cask eloston-chromium
|
||||
|
||||
# Communication
|
||||
brew install --cask deepl
|
||||
brew install --cask element
|
||||
brew install --cask signal
|
||||
|
||||
# Cloud & Sync
|
||||
brew install --cask nextcloud
|
||||
brew install --cask proton-drive
|
||||
brew install --cask proton-mail
|
||||
brew install --cask protonvpn
|
||||
|
||||
# Development
|
||||
brew install --cask codex
|
||||
brew tap steipete/tap
|
||||
brew install --cask steipete/tap/codexbar
|
||||
brew install --cask nova
|
||||
brew install --cask transmit
|
||||
|
||||
# Media & Utilities
|
||||
brew install --cask trimmy
|
||||
|
||||
printf "\n✅ Homebrew Casks installation complete!\n"
|
||||
|
||||
@@ -1,17 +1,33 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Installs Homebrew Formula software.
|
||||
# Installs Homebrew formulas (CLI tools).
|
||||
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
SCRIPT_PATH="$MAC_OS_CONFIG_PATH/bin/install_homebrew_formulas"
|
||||
# Ensure Homebrew is installed
|
||||
install_homebrew
|
||||
|
||||
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
|
||||
# Shell & Terminal
|
||||
brew install atuin
|
||||
brew install bash
|
||||
brew install bash-completion
|
||||
|
||||
# AI
|
||||
brew install gemini-cli
|
||||
|
||||
# Development
|
||||
brew install node
|
||||
|
||||
# Media
|
||||
brew install ffmpeg
|
||||
|
||||
# Utilities
|
||||
brew install mas
|
||||
brew install mole
|
||||
brew install rename
|
||||
brew install ykman
|
||||
|
||||
printf "\n✅ Homebrew Formulas installation complete!\n"
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#! /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
|
||||
@@ -1,17 +0,0 @@
|
||||
#! /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
|
||||
@@ -1,17 +0,0 @@
|
||||
#! /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
|
||||
@@ -1,6 +0,0 @@
|
||||
#! /usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "bundler/setup"
|
||||
|
||||
load Gem.bin_path "rake", "rake"
|
||||
@@ -1,16 +0,0 @@
|
||||
#! /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
|
||||
@@ -8,47 +8,20 @@ source lib/settings.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 "%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
|
||||
|
||||
configure_environment
|
||||
|
||||
while true; do
|
||||
if [[ $# == 0 ]]; then
|
||||
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 "\n%s\n" "macOS Installer Options:"
|
||||
printf "%s\n" " Install:"
|
||||
printf "%s\n" " b: Install basics."
|
||||
printf "%s\n" " t: Install development tools."
|
||||
printf "%s\n" " b: Install basics (fonts)."
|
||||
printf "%s\n" " t: Install development tools (Xcode CLI)."
|
||||
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" " rc: Install Rust crates."
|
||||
printf "%s\n" " rg: Install Ruby gems."
|
||||
printf "%s\n" " np: Install Node packages."
|
||||
printf "%s\n" " l: Install libraries (i.e. executes all of the above steps in order listed)."
|
||||
printf "%s\n" " i: Install all (executes all of the above steps in order)."
|
||||
printf "%s\n" " Manage:"
|
||||
printf "%s\n" " c: Check status of managed software."
|
||||
printf "%s\n" " C: Caffeinate machine."
|
||||
printf "%s\n" " c: Check status of installed software."
|
||||
printf "%s\n" " C: Caffeinate machine (prevent sleep during installation)."
|
||||
printf "%s\n" " w: Clean work (temp) directory."
|
||||
printf "%s\n\n" " q: Quit/Exit."
|
||||
read -p "Enter selection: " response
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user