Skip to content

Instantly share code, notes, and snippets.

@shivashishrs
Forked from vraravam/fresh-install-of-osx.sh
Created December 28, 2023 09:58
Show Gist options
  • Save shivashishrs/a161bd2082fb15d9bfbc138e88a089f6 to your computer and use it in GitHub Desktop.
Save shivashishrs/a161bd2082fb15d9bfbc138e88a089f6 to your computer and use it in GitHub Desktop.
Steps to get "up and running" with new Mac OSX
#!/usr/bin/env bash
# This script can be used to setup a macos machine based on Vijay's configurations. As of now, this script is idempotent and will restore your local setup to the same state if run multiple times.
# If you have the same files already present, it will prompt you whether to override or not
# file location: <anywhere> (just need to invoke it from that location)
# You can run this script using this command:
# curl -L https://gist.github.com/vraravam/04fc2296b25090ea848642afbce4d168/raw -o fresh-install.sh; chmod +x ./fresh-install.sh; ./fresh-install.sh
USERNAME=${USERNAME:-$(whoami)}
##################################
# Install command line dev tools #
##################################
xcode-select -p > /dev/null
if [ $? != 0 ]; then
# install using the non-gui cmd-line alone
touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
softwareupdate -ia
rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
sudo xcodebuild -license accept || true
fi
###############################
# Do not allow rootless login #
###############################
# Note: Commented out since I am not sure if we need to do this on the office MBP or not
# ROOTLESS_STATUS=$(/usr/bin/csrutil status | awk '/status/ {print $5}' | sed 's/\.$//')
# if [[ ${ROOTLESS_STATUS} == "enabled" ]]; then
# echo "csrutil (\"rootless\") is enabled. please disable in boot screen and run again!"
# exit 1
# fi
#####################
# Turn on FileVault #
#####################
FILEVAULT_STATUS=$(fdesetup status)
if [[ ${FILEVAULT_STATUS} != "FileVault is On." ]]; then
echo "FileVault is not turned on. Please encrypt your hard disk!"
exit 1
fi
#################################
# Setup ssh scripts/directories #
#################################
mkdir -p "${HOME}/.ssh"
sudo chmod -R 600 "${HOME}"/.ssh/*
############################
# Disable macos gatekeeper #
############################
# sudo spectl --master-disable
# utility functions
green() {
printf "\033[1;32m$1\033[0m"
}
red() {
printf "\033[31m$1\033[0m"
}
yellow() {
printf "\033[33m$1\033[0m"
}
override_prompt() {
printf "$(green 'Downloading') "$2" : "
if [ ! -f "$2" ]; then
echo "" # Dummy echo for new line
curl -L "$1" -o "$2"
else
printf "$(red 'already present'). Should I override [yn]? "
read yn
case $yn in
[Yy]*) curl -L "$1" -o "$2" ;;
[Nn]*) echo "$(yellow 'skipping')";;
esac
fi
}
command_exists() {
type $1 &> /dev/null 2>&1
}
######################
# vim configurations #
######################
override_prompt https://gist.github.com/vraravam/2d8654cb21bfe506a64a05a49268d9de/raw "${HOME}/.vimrc"
######################################################################################
# Setup any sudo access password from cmd-line to also invoke the gui touchId prompt #
######################################################################################
curl -L https://gist.github.com/vraravam/0579373b2028e9b5b08ae87fb39c09d8/raw | sh
#####################
# Install oh-my-zsh #
#####################
export ZSH=
[ ! -d "${HOME}/.oh-my-zsh" ] && curl -L http://install.ohmyz.sh | sh
override_prompt https://gist.github.com/vraravam/a64d51fff250271aa7669438db5bd6a5/raw "${HOME}/.zshenv"
override_prompt https://gist.github.com/vraravam/51e0516f5d7c6beec67668d1a31b7da8/raw "${HOME}/.zlogin"
override_prompt https://gist.github.com/vraravam/ce8654afd65def117dc17e2b0a30156c/raw "${HOME}/.zprofile"
override_prompt https://gist.github.com/vraravam/657c3b94d1b04bacd2b6a38c22d6ec56/raw "${HOME}/.zshrc"
override_prompt https://gist.github.com/vraravam/9c8d9f335159f90c3fff890bcf3856d6/raw "${HOME}/.zshrc.custom"
override_prompt https://gist.github.com/vraravam/ce0dda29bb07f0504df8686cfd2755ca/raw "${HOME}/.aliases"
override_prompt https://gist.github.com/vraravam/93077cb859cdb64793cc500791da6dce/raw "${HOME}/.p10k.zsh"
override_prompt https://gist.github.com/vraravam/d8c0a88d0046225e5700f6ba7258da65/raw "${HOME}/.gitignore"
override_prompt https://gist.github.com/vraravam/eab090e70a545934f409/raw "${HOME}/.gitconfig"
override_prompt https://gist.github.com/vraravam/e9676759db46950e1fd817e49e513394/raw "${HOME}/.gitconfig-template.inc"
##################################
# Install custom plugins for zsh #
##################################
ZSH_CUSTOM=${ZSH_CUSTOM:-${HOME}/.oh-my-zsh/custom}
[ ! -d "${ZSH_CUSTOM}/plugins/evalcache" ] && git clone --depth=1 https://github.com/mroth/evalcache "${ZSH_CUSTOM}/plugins/evalcache"
# Note: Do not move these into 'Brewfile' - since that breaks the linking for omz plugins location
[ ! -d "${ZSH_CUSTOM}/plugins/zsh-syntax-highlighting" ] && git clone --depth=1 https://github.com/zsh-users/zsh-syntax-highlighting "${ZSH_CUSTOM}/plugins/zsh-syntax-highlighting"
[ ! -d "${ZSH_CUSTOM}/plugins/zsh-autosuggestions" ] && git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions "${ZSH_CUSTOM}/plugins/zsh-autosuggestions"
################################
# Prep for installing homebrew #
################################
source "${HOME}/.zshenv"
source "${HOME}/.zprofile"
# TODO: Don't run this here - it fails (need to figure out how to fix it)
# exec zsh
sudo mkdir -p "${HOMEBREW_PREFIX}/tmp" "${HOMEBREW_PREFIX}/repository" "${HOMEBREW_PREFIX}/plugins" "${HOMEBREW_PREFIX}/bin"
sudo chown -fR "${USERNAME}":admin "${HOMEBREW_PREFIX}"
# sudo rm -rf ${HOME}/.gnupg # to delete gpg keys that might have been generated from an older version of gpg
#######################################
# Install homebrew (on empty machine) #
#######################################
command_exists brew || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
override_prompt https://gist.github.com/vraravam/8c9eae91a3750bed86b81e3a4711f842/raw "${HOME}/Brewfile"
brew bundle check || brew bundle --all || true
###########################################
# Link programs to open from the cmd-line #
###########################################
replace_executable_if_exists_and_is_not_symlinked() {
test -e "$1" && rm -fv "$2"; ln -sf "$1" "$2"
}
# if we are using 'code-insiders' only, symlink it to 'code' for ease of typing
# replace_executable_if_exists_and_is_not_symlinked "${HOMEBREW_PREFIX}/bin/code-insiders" "${HOMEBREW_PREFIX}/bin/code"
# Manual: Open VS Code and turn on syncing of the preferences data
# if we are using 'vscodium-insiders' only, symlink it to 'codium' for ease of typing
replace_executable_if_exists_and_is_not_symlinked "${HOMEBREW_PREFIX}/bin/codium-insiders" "${HOMEBREW_PREFIX}/bin/codium"
# extra: also symlink for 'code'
ln -sf "${HOMEBREW_PREFIX}/bin/codium-insiders" "${HOMEBREW_PREFIX}/bin/code"
# Setup rider for use from the cmd-line
# replace_executable_if_exists_and_is_not_symlinked "/Applications/Rider.app/Contents/MacOS/rider" "${HOMEBREW_PREFIX}/bin/rider"
# Setup idea for use from the cmd-line
# replace_executable_if_exists_and_is_not_symlinked "/Applications/IntelliJ IDEA CE.app/Contents/MacOS/idea" "${HOMEBREW_PREFIX}/bin/idea"
# defaults write -g NSFileViewer -string org.yanex.marta
# To revert back to use Finder as default file manager you can enter
# defaults delete -g NSFileViewer
# ln -sf /Applications/Marta.app/Contents/Resources/launcher ${HOMEBREW_PREFIX}/bin/marta
# Setup login items
setup_login_item() {
test -d "/Applications/$1" && echo "Setting up $1 as a login item" && osascript -e "tell application \"System Events\" to make login item at end with properties {path:\"/Applications/$1\", hidden:false}" 2>&1 > /dev/null
}
setup_login_item "AlDente.app"
setup_login_item "Clocker.app"
setup_login_item "Cloudflare WARP.app"
setup_login_item "Command X.app"
setup_login_item "Flycut.app"
setup_login_item "iBar.app"
setup_login_item "Itsycal.app"
setup_login_item "KeepingYouAwake.app"
setup_login_item "Keybase.app"
setup_login_item "Rectangle.app"
setup_login_item "Stats.app"
echo "********** Finished auto installation process: MANUALLY QUIT AND RESTART iTerm2 and Terminal apps **********"
echo "1. Please ensure to edit the ${HOME}/.gitconfig* files to have your name and email configured instead of mine"
echo "2. Use ${HOME}/.gitconfig-template.inc as a template to create equivalent configuration files with your logins"
echo "3. Go to Terminal > Preferences > Profiles > Basic > Text > Change Font to 'MesloLGS Nerd Font'"
echo "4. Go to iTerm2 > Preferences > Profiles > Default > Text > Change Font to 'MesloLGS Nerd Font'"
echo "5. Go to iTerm2 > Preferences > Profiles > Default > Keys > Key Mappings > Presets (and choose 'Natural Text Editing')"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment