Skip to content

Instantly share code, notes, and snippets.

@ivanrodjr
Last active June 20, 2021 21:59
Show Gist options
  • Save ivanrodjr/1870167dbf0d93acd0779d9a9fe68fb5 to your computer and use it in GitHub Desktop.
Save ivanrodjr/1870167dbf0d93acd0779d9a9fe68fb5 to your computer and use it in GitHub Desktop.
Mac setup script ultimate edition

Setup for Mac OS

Ultimate setup script for setting up a new MacOS installation.

This script tries to be as flexible and as helpful as possible while keeping the user intervention to a minimum.

Use carefully

The macos-setup script will:

  • Installs apple command line tools and waits until it finishes to continue the script
  • Install and set ZSH as default shell
  • Installs brew if not yet installed
  • Installs core utilities and more if specified
  • Installs all cli and cask packages you specify
  • Configures git
    • Creates your SSH key and adds the passphrase to the keychain (copy snippet and repeat for more keys)
    • Configures GPG ~50% (only installation and config of necessary tools) *For now generation must be done manually after the script runs, when done uncomment gpgsign = true in git config file
    • Adds a git config file (edit to your preferences)
    • Adds commit msg validation hook, global ignore and commit message template
  • Configures dev environment
    • Installs and configures the java jdk you specify and jenv
    • Installs other dev tools if needed (docker, node, deno, rust etc...)
  • Adds your vimrc config
  • Installs all custom fonts you specify
  • Configures MacOS properties to your liking
  • Installs oh-my-zsh

The oh-my-custom script will:

  • Provide a way to install and configure all oh-my-custom plugins you specify
  • Install a custom shell theme like powerlevel10k or starship

Enjoy

#!/usr/bin/env bash
#
# Consolidated setup script for setting up a new MacOS installation.
#
# This script tries to be as flexible and as helpful as possible, while keeping the user intervention to a minimum.
#
# Reading/Thanks:
#
# - https://gist.github.com/MatthewMueller/e22d9840f9ea2fee4716
# - https://gist.github.com/codeinthehole/26b37efa67041e1307db
# - https://github.com/mikeprivette/yanmss/blob/master/setup.sh
# - https://gist.github.com/bradp/bea76b16d3325f5c47d4
# - https://gist.github.com/ryanhanwu/059e210f8fe15e7eadc4a28e8b3e6b27
# - https://gist.github.com/rcugut/c7abd2a425bb65da3c61d8341cd4b02d
# - https://github.com/Homebrew/homebrew-cask-fonts
# - https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
# - https://github.com/ryanoasis/nerd-fonts
# - https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
# - https://opensource.com/article/19/5/python-3-default-mac
# - https://opensource.com/article/19/5/python-3-default-mac
# - https://github.com/mathiasbynens/dotfiles
# - https://gist.github.com/simonista/8703722
# ## 0 - Either chmod this file or ask for the administrator password upfront:
sudo -v
echo "Starting setup for $(whoami)"
# # # Notes:
# # #
# # # - If installing full Xcode, it's better to install that first from the app
# # # store before running the bootstrap script. Otherwise, Homebrew can't access
# # # the Xcode libraries as the agreement hasn't been accepted yet.
# # ###############################################################################
# # # 0 - For Xcode and CLI
# # ###############################################################################
# # Install command line tools. When finished press [Enter]
xcode-select --install
read -p "Press [Enter] when apple command line tools installation is completed."
# # ###############################################################################
# # # 1 - MAIN COMPONENTS
# # ###############################################################################
# # Check for Homebrew, install if we don't have it
if test ! $(which brew); then
echo "Installing homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
fi
# Update homebrew recipes
echo "Updating homebrew recipes"
brew update
# # Install and set zsh as default shell in case we are not on big sur or above
if test ! $(which zsh); then
echo "Setting ZSH as shell..."
echo "Installing zsh as default shell..."
brew install zsh
chsh -s /bin/zsh OR sh -c "echo $(which zsh) >> /etc/shells" && chsh -s $(which zsh)
echo "zsh installed and set as default shell"
fi
## Install any system or core utility e.g. GNU core utilities (those that come with OS X are outdated)
echo "Installing system core utilities..."
brew install coreutils
brew install openssh
###################### uncomment if you understand whats below
# brew install gnu-sed --with-default-names
# brew install gnu-tar --with-default-names
# brew install gnu-indent --with-default-names
# brew install gnu-which --with-default-names
# brew install gnu-grep --with-default-names
## Install GNU `find`, `locate`, `updatedb`, and `xargs`, g-prefixed
## Installs default moreutils
# brew install moreutils
## There is a conflict between the GNU parallel utility and the shipped parallel on the moreutils package. If you want to install GNU parallel instead of the moreutils’ parallel, use the following commands:
# brew install moreutils --without-parallel
# brew install parallel
######################
brew install findutils
# Install latest Bash
brew install bash
echo "Core utilities installation complete"
# 1.2 - Add your preferred packages
PACKAGES=(
git
tree
vim
wget
speedtest-cli
)
echo "Installing CLI packages..."
brew install ${PACKAGES[@]}
echo "CLI packages installation complete"
# 1.3 - Add your preferred apps
CASKS=(
flux
iterm2
the-unarchiver
appcleaner
transmission
)
echo "Installing apps..."
brew install --cask ${CASKS[@]}
# # To install apps in a dir other than "/Applications"
# brew install --cask --appdir="/Applications" ${CASKS[@]}
echo "Apps installation complete"
###############################################################################
# 2 - Development
###############################################################################
# # ## Uncomment the ones you need or use...if any.
# # Python and Ruby should be already installed
# # #############
# # # GIT
# # #############
echo "Configuring GIT"
## To increase security of your key this will automatically add it to the keychain
echo "Creating your SSH key...add a passphrase"
ssh-keygen -t ed25519 -f ~/.ssh/github_id_ed25519 -C "[email protected]"
echo "Adding SSH key to Keychain"
ssh-add ~/.ssh/github_id_ed25519
echo "Setting SSH to always use keychain for the passphrase"
cat <<EOT >> ~/.ssh/config
Host *
IgnoreUnknown UseKeychain
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/github_id_ed25519
EOT
echo "Configuring GPG signing"
# Setup GPG - Does 50% of the signing
brew install gpg2 gnupg pinentry-mac
# Make the gnupg dir#
mkdir ~/.gnupg
# Write our configuration to it
echo 'pinentry-program /usr/local/bin/pinentry-mac' > ~/.gnupg/gpg-agent.conf
# This tells gpg to use the gpg-agent
echo 'use-agent' > ~/.gnupg/gpg.conf
export GPG_TTY=`tty`
chmod 700 ~/.gnupg
# When the script is done go here to complete the gpg setup
# https://gist.github.com/troyfontaine/18c9146295168ee9ca2b30c00bd1b41e#step-7-create-your-gpg-key
## Add your git configs below
# brew install git-extras
## Or configure aliases below
echo "Adding git global configuration file..."
cat > ~/.gitconfig <<- "EOF"
[user]
name = your name
email = your email
[color]
# Enable colors in color-supporting terminals
ui = auto
[init]
templatedir = ~/.git-templates
defaultBranch = main
[alias]
# List available aliases
aliases = !git config -l | grep alias | cut -c 7-
# Display state of working dir
s = status
# Add files to the staging area
a = add .
# Creates a commit and opens default editor e.g. vim
c = commit
# Creates a commit, bypasses default editor and adds the message e.g. git cm "Add whatever..."
cm = commit -m
# Checkout a specific branch
co = checkout
# Create branch and checkout
cob = checkout -b
# Show all remote branches
remotes = remote -v
# Show all branches
ab = branch -av
# Delete branch
db = branch -D
# Deletes all branches except master or main (change the name) CAREFUL
deleteAll = !git branch | grep -v master | xargs git branch -D
# Rename current branch
rename = branch -M
# Disables push to upstream
disable = remote set-url --push upstream DISABLED
# Log with super powers
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
# Log that shows the last 10 commits...change the number for more
lgs = log -10 --color=always --all --graph --topo-order --pretty='%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
# Push current feature branch
pb = !git push --set-upstream origin \"$(git rev-parse --abbrev-ref HEAD)\"
# Ensure that force-pushing won't lose someone else's work (only mine).
push-with-lease = push --force-with-lease
# Rebase won’t trigger hooks on each "replayed" commit.
# This is an ugly hack that will replay each commit during rebase with the
# standard `commit` command which will trigger hooks.
rebase-with-hooks = rebase -x 'git reset --soft HEAD~1 && git commit -C HEAD@{1}'
# List local commits that were not pushed to remote repository
review-local = !git lg @{push}..
# Edit last commit message
amend = commit --amend
# Undo last commit but keep changed files in stage
undo = reset --soft HEAD~1
# Remove file(s) from Git but not from disk
untrack = rm --cached
# Deletes any local branch which has been deleted from the remote
fp = fetch --prune
# Ensures that when you stash, you catch the new files you haven’t caught with a git add yet. a.k.a stash-all
sa = stash save --include-untracked
# Pop the stash in the current branch
sp = stash pop
# Removes the saved stash
sd = stash drop
# Fetch origin
fo = fetch origin
# Fetch upstream
fu = fetch upstream
# CAREFUL WITH BELOW COMMANDS >> See Rebase docs
# Rebase origin/master
ro = rebase origin/master
# Rebase upstream/master
ru = rebase upstream/master
# Rebase master
rem = rebase master
[status]
# Shows you all of the files underneath that new directory during a git status (slow in very large repos)
showUntrackedFiles = all
[commit]
# Git commit default message template
template = ~/.git-templates/.git-commit-msg-template.txt
# Prevent commit status from attaching below the custom template
status = false
# Ensures that all of your commits are signed by your GPG key.
# gpgsign = true
[merge]
# Get an error unless every merge is fast-forward
ff = only
# Intended changes from the ‘left’ and the intended changes from the ‘right, with third section of the original changes before ‘left’ and ‘right’ tried to change it.
conflictstyle = diff3
[core]
# Hooks directory
hooksPath = ~/.git-templates/hooks
# Global ignore file
excludesfile = ~/.git-templates/.gitignore_global
[diff]
# Use better, descriptive initials (c, i, w) instead of a/b.
mnemonicPrefix = true
# Show renames/moves as such
renames = true
# When using --word-diff, assume --word-diff-regex=.
wordRegex = .
# Display submodule-related information (commit listings)
submodule = log
[log]
# Use abbrev SHAs whenever possible/relevant instead of full 40 chars
abbrevCommit = true
# Automatically --follow when given a single path
follow = true
# Disable decorate for reflog
# (because there is no dedicated `reflog` section available)
decorate = false
[color "branch"]
# Blue on black is hard to read in git branch -vv: use cyan instead
upstream = cyan
[color "status"]
added = green
changed = yellow
untracked = red
[gpg]
program = /usr/local/bin/gpg
[push]
default = simple
EOF
echo "Adding commit message validation hook..."
## https://gist.github.com/ivanrodjr/e1b5454ec1593ea753776bdc5b44ce9a#file-git-commit-msg-template
mkdir -p ~/.git-templates/hooks
cat > ~/.git-templates/hooks/commit-msg <<- "EOF"
#!/bin/bash
commit_msg="${1}"
commit_msg_lines=()
error_msg="[COMMIT FAILED]"
allowed_subject_verbs=('Add' 'Create' 'Update' 'Change' 'Fix' 'Refactor' 'Clean up' 'Remove' 'Move' 'Delete' 'Resolve' 'Merge' 'Initial')
JIRA_URL="https://yourjiraurl.net/browse"
# Splits the commit msg into separate lines and adds them to an array
split_commit_msg() {
while IFS= read -r line; do
# Trim trailing spaces from lines
shopt -s extglob
line="${line%%*( )}"
shopt -u extglob
# Ignore comments (lines starting with #)
if [[ ! "${line}" =~ ^# ]]; then
commit_msg_lines+=("${line}")
fi
done < <(cat ${commit_msg})
}
# Validates the commit msg
validate_commit_msg() {
split_commit_msg
# Store the subject
local subject="${commit_msg_lines[0]}"
# Stop validation if the message is empty or no subject is set
if [[ -z "${commit_msg_lines[*]}" ]] || [[ -z "${subject}" ]]; then
exit 0
fi
# Check if the subject has leading whitespace(s)
if [[ "${subject}" =~ ^[[:space:]]+ ]]; then
echo "${error_msg} The subject can not have leading whitespace"
exit 1;
fi
# Check if the subject contains more than 1 word
if [[ $(echo "${subject}" | wc -w) -eq 1 ]]; then
echo "${error_msg} The subject has to contain more than 1 word"
exit 1
fi
# Check if the subject is separated from the body with a blank line
if [[ ${#commit_msg_lines[@]} -gt 1 ]] && [[ -n "${commit_msg_lines[1]}" ]]; then
echo "${error_msg} Separate subject from body with a blank line"
exit 1
fi
# Check if the subject line is limited to 50 characters
if [[ "${#subject}" -gt 50 ]]; then
echo "${error_msg} Limit the subject line to 50 characters (${#commit_msg_lines[0]} characters used)"
exit 1
fi
# Check if the subject line is capitalized
if [[ ! "${subject}" =~ ^[A-Z] ]]; then
echo "${error_msg} Capitalize the subject line"
exit 1
fi
# Check if the subject line does not end with a period
if [[ ! "${subject}" =~ [^\.]$ ]]; then
echo "${error_msg} Do not end the subject line with a period"
exit 1
fi
# Check if the subject starts with one of the allowed verbs
local first_word=$(echo "${subject}" | awk '{print $1;}')
local is_allowed=false
for verb in "${allowed_subject_verbs[@]}"; do
if [[ "${verb}" == "${first_word}" ]]; then
is_allowed=true
fi
done
if [[ "${is_allowed}" == false ]]; then
echo "${error_msg} Use the imperative mood in the subject line"
echo "Your subject has to start with one of the following verbs:"
printf -- ' - %s\n' "${allowed_subject_verbs[@]}"
exit 1
fi
# Check if the body is wrapped at 72 characters (except for url's)
for line in "${commit_msg_lines[@]}"; do
if [[ "${line}" =~ ^[[:space:]]*(https?|ftp|file):\/\/[-A-Za-z0-9\+\&\@\#\/\%\?\=\~\_\|\!\:\,\.\;]*[-A-Za-z0-9\+\&\@\#\/\%\=\~\_\|] ]]; then
continue
elif [[ "${#line}" -gt 72 ]]; then
echo "${error_msg} Wrap the body at 72 characters (${#line} characters used)"
exit 1
fi
done
}
validate_commit_msg
# Remove comment lines from the message
sed -i.bak '/^#/ d' $1
# Add Jira ticket number from branch to the commit message
if [ -z "$BRANCHES_TO_SKIP" ]; then
BRANCHES_TO_SKIP=(master main develop staging test)
fi
# Get the current branch name and check if it is excluded
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
# Trim it down to get the parts we're interested in
TRIMMED=$(echo $BRANCH_NAME | sed -e 's:^\([^-]*-[^-]*\)-.*:\1:' -e \
'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')
# If it isn't excluded, preprend the trimmed branch identifier to the given message
if [ -n "$BRANCH_NAME" ] && ! [[ $BRANCH_EXCLUDED -eq 1 ]]; then
sed -i.bak -e "1s/^/[$TRIMMED] /" $1
fi
# Add the ticket url at the end of the commit description
printf "\n${JIRA_URL}/${TRIMMED}" >> $1
# Remove trailing blank lines
sed -i.bak -e :a -e '/^\n*$/{$d;N;ba' -e '}' $1
EOF
# Make the above hook executable
chmod 755 ~/.git-templates/hooks/commit-msg
## Add global .gitignore file
## https://gist.github.com/jacobtomlinson/aace65a6920e44348d501da5e13a5a17#file-gitignore_global
echo "Adding git global ignore file..."
cat > ~/.git-templates/.gitignore_global<<- "EOF"
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.pyc
*.pyo
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
*.msi
# Logs and databases #
######################
*.log
*.sql
*.sqlite
npm-debug.log
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
desktop.ini
# Temporary files #
###################
*.bak
*.swp
*.swo
*~
*#
# IDE files #
#############
.vscode
.idea
.iml
*.sublime-workspace
EOF
## Add default commit message
## https://gist.github.com/ivanrodjr/e1b5454ec1593ea753776bdc5b44ce9a#file-commit-msg
echo "Adding default commit message..."
cat > ~/.git-templates/.git-commit-msg-template.txt <<- "EOF"
# If applied, this commit will... (max 50 characters long)
# Body - Explain things in more detail, possibly giving some
# background about what is being added or the issue being fixed, etc.
# (Wrap at 72 characters)
# Fixes #XXXX
# Provide links to any relevant tickets, articles or other resources
#------------------------------------------------@---------------------*
#
# Remember the seven rules of a great Git commit message:
# - Separate subject from body with a blank line
# - Limit the subject line to 50 characters (@)
# - Capitalize the subject line
# - Do not end the subject line with a period
# - Use the imperative mood in the subject line
# - Wrap the body at 72 characters (*)
# - Use the body to explain what and why vs. how
#
# More info: https://chris.beams.io/posts/git-commit/
#
# The allowed first words for the subject are:
# - Add
# - Create
# - Update
# - Change
# - Fix
# - Refactor
# - Clean up
# - Remove
# - Move
# - Delete
# - Resolve
# - Merge
# - Initial
# Edit allowed works in commit-msg hook
EOF
############
## VIM
############
## Add your vimrc config below
## https://gist.github.com/simonista/8703722
echo "Adding vimrc configuration..."
cat > ~/.vimrc <<- "EOF"
set textwidth=72
set colorcolumn=73
syntax on
EOF
# # #############
# # # JAVA
# # #############
echo "Installing Java and setting up the environment..."
JAVA_VERSION=11
brew tap AdoptOpenJDK/openjdk
## brew install --cask <version> | For version https://github.com/AdoptOpenJDK/homebrew-openjdk
echo "Installing Java $JAVA_VERSION..."
brew install --cask adoptopenjdk$JAVA_VERSION
# Set JAVA_HOME
echo "Setting JAVA_HOME environment variable..."
echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.zshrc
# # https://www.mindissoftware.com/post/2020/05/jenv-setup/
echo "Installing jenv..."
brew install jenv
echo "Configuring jenv..."
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
echo "Unsetting the JAVA_TOOL_OPTIONS environment variable..."
unset JAVA_TOOL_OPTIONS
# # #############
# # # Node
# # #############
# # ## NODE > Uncomment your preffered option
# # ## 1 . Install complete node
# # # brew install node
# # OR Install with yarn package manager
# # brew install yarn
# # ## 3. NPM new home (Optional)
# # # Normally, with Homebrew, your user should own the entire `/usr/local` folder, if not:
# # # sudo chown -R `whoami` /usr/local
# # # mkdir -p /usr/local/npm_packages
# # ## This is the root dir where all globally installed node packages will go
# # export NPM_PACKAGES="/usr/local/npm_packages"
# # export NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
# # ## Add to PATH
# # #export PATH="$NPM_PACKAGES/bin:$PATH"
# # #############
# # # Deno
# # #############
# # brew install deno
# # #############
# # # Scala
# # #############
# # brew install scala
# # #############
# # # Golang
# # #############
# # brew install golang
# # export GOPATH="${HOME}/.go"
# # export GOROOT="$(brew --prefix golang)/libexec"
# # export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"
# # #############
# # # Rust
# # #############
# # brew install rustup
# # rustup-init
# # #############
# # # Docker
# # #############
# # # brew install --cask docker
# # ###############################################################################
# # # 3 - Customization & Mac OS Configuration
# # ###############################################################################
# Get your desired fonts from: https://github.com/Homebrew/homebrew-cask-fonts/tree/master/Casks And add below
brew tap homebrew/cask-fonts
FONTS=(
font-inconsolata
font-fira-code
font-fira-code-nerd-font
font-jetbrains-mono
font-jetbrains-mono-nerd-font
)
echo "Installing FONTS..."
brew install ${FONTS[@]}
echo "Cleaning up the cellar..."
brew cleanup
echo "Configuring MacOS..."
echo ""
# FIND MORE CONFIGS HERE :
# https://gist.github.com/bradp/bea76b16d3325f5c47d4#file-setup-sh-L137
# https://gist.github.com/MatthewMueller/e22d9840f9ea2fee4716
echo "Disabling OS X Gate Keeper"
#"(You'll be able to install any app you want from here on, not just Mac App Store apps)"
sudo spctl --master-disable
sudo defaults write /var/db/SystemPolicy-prefs.plist enabled -string no
defaults write com.apple.LaunchServices LSQuarantine -bool false
echo "Expanding the save panel by default"
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true
echo "Disable smart quotes and smart dashes as they are annoying when typing code"
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
echo "Enabling full keyboard access for all controls (e.g. enable Tab in modal dialogs)"
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
echo "Showing all filename extensions in Finder by default"
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
echo "Disabling the warning when changing a file extension"
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
echo "Use column view in all Finder windows by default"
defaults write com.apple.finder FXPreferredViewStyle Clmv
echo "Avoiding the creation of .DS_Store files on network volumes"
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
echo "Setting the icon size of Dock items to 36 pixels for optimal size/screen-realestate"
defaults write com.apple.dock tilesize -int 36
echo "Speeding up Mission Control animations and grouping windows by application"
defaults write com.apple.dock expose-animation-duration -float 0.1
defaults write com.apple.dock "expose-group-by-app" -bool true
echo "Setting Dock to auto-hide and removing the auto-hiding delay"
defaults write com.apple.dock autohide -bool true
defaults write com.apple.dock autohide-delay -float 0
defaults write com.apple.dock autohide-time-modifier -float 0
echo "Setting email addresses to copy as '[email protected]' instead of 'Foo Bar <[email protected]>' in Mail.app"
defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false
echo "Preventing Time Machine from prompting to use new hard drives as backup volume"
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
echo "Speeding up wake from sleep to 24 hours from an hour"
# http://www.cultofmac.com/221392/quick-hack-speeds-up-retina-macbooks-wake-from-sleep-os-x-tips/
sudo pmset -a standbydelay 86400
echo "Disable annoying backswipe in Chrome"
defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false
echo "Setting screenshots location to ~/Desktop"
defaults write com.apple.screencapture location -string "$HOME/Desktop"
echo "Setting screenshot format to PNG"
defaults write com.apple.screencapture type -string "png"
echo "Enabling the Develop menu and the Web Inspector in Safari"
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
echo "Don't prompt for confirmation before downloading in Transmission"
defaults write org.m0k.transmission DownloadAsk -bool false
echo "Trash original torrent files"
defaults write org.m0k.transmission DeleteOriginalTorrent -bool true
echo "Hide the donate message"
defaults write org.m0k.transmission WarningDonate -bool false
echo "Hide the legal disclaimer"
defaults write org.m0k.transmission WarningLegal -bool false
echo "Disable 'natural' (Lion-style) scrolling"
defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false
echo "Don’t rearrange Spaces automatically based on most recent use"
defaults write com.apple.dock mru-spaces -bool false
echo "Show Library dir in Finder"
chflags nohidden ~/Library
echo "Show Hidden Files in Finder"
defaults write com.apple.finder AppleShowAllFiles YES
echo "Show Path Bar in Finder"
defaults write com.apple.finder ShowPathbar -bool true
echo "Show Status Bar in Finder"
defaults write com.apple.finder ShowStatusBar -bool true
echo "Require password as soon as screensaver or sleep mode starts"
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
echo "Enable tap-to-click"
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
echo ""
# ###############################################################################
# # 4 - CREATE DIR STRUCTURE - Create any addditional dirs
# ###############################################################################
echo "Creating directory structure..."
[[ ! -d Workspace ]] && mkdir Workspace
echo "Directory structure created"
echo "Setup for $(whoami) COMPLETE"
killall Finder
# ###############################################################################
# # 5 - Install oh-my-zsh
# ###############################################################################
# Install oh-my-zsh
# After installation finishes execute oh-my-custom for personalisation
echo "Installing oh-my-zsh..."
/bin/bash -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
#!/usr/bin/env bash
echo ""
echo "Starting oh-my-zsh setup for $(whoami)"
# Install oh-my-zsh plugins
echo "Installing oh-my-zsh plugins..."
# Add oh-my-zsh plugins from: https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins in the list below:
git clone git://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone git://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
echo "Plugin installation complete"
# Configure oh-my-zsh plugins
echo "Configuring plugins..."
# Add zsh-syntax-highlighting.zsh to the end of the .zshrc file
echo "source ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
# Add the plugins you want to enable below
sed -io 's/^plugins=.*/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/' ~/.zshrc
echo "Plugin configuration complete"
# Disable verbose zsh
echo 'ZSH_DISABLE_COMPFIX=true' >> ~/.zshrc
# Install custom shell theme > Substitute for yours > https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
### Powerline10k https://github.com/romkatv/powerlevel10k
echo "Installing custom shell theme..."
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
# Enable Powelevel10k as default theme
sed -io 's#^ZSH_THEME.*#ZSH_THEME="powerlevel10k/powerlevel10k"#' ~/.zshrc
## For starship theme comment above uncomment below
### Starship https://starship.rs/
#brew install starship
#sed -io 's#^ZSH_THEME.*#\#ZSH_THEME=""#' ~/.zshrc
#echo 'eval "$(starship init zsh)"'
echo "Theme installation complete"
echo "Completed oh-my-zsh setup for $(whoami)"
source $ZSH/oh-my-zsh.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment