-
-
Save tomthomasvempala/48aa2d5ddda01818e0a0252e58566c74 to your computer and use it in GitHub Desktop.
Steps to get "up and running" with new Mac OSX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env zsh | |
| # 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/tomthomasvempala/48aa2d5ddda01818e0a0252e58566c74/raw -o fresh-install.sh; chmod +x ./fresh-install.sh; ./fresh-install.sh | |
| # BEFORE STARTING TO RUN THIS SCRIPT (for the first time on a new machine) | |
| # 1. Login into Apple App store | |
| # 2. Turn on File Vault encryption in System Preferences | |
| # 3. Turn off battery from showing in the Control Center | |
| # These env vars are defined by (duplicated intentionally) since this script would bootstrap the installation | |
| USERNAME=${USERNAME:-$(whoami)} | |
| PERSONAL_PROFILES_DIR=${PERSONAL_PROFILES_DIR:-"${HOME}/Personal/${USERNAME}/profiles"} | |
| # Set DNS of 8.8.8.8 before proceeding (in some cases, for eg Jio Wifi, gist.github doesn't resolve at all and times out) | |
| sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 | |
| ################################## | |
| # 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 | |
| read "yn?$(red 'already present'). Should I override [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/tomthomasvempala/a52abe3e0b0f09dfd76114fabe5dd74c/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/tomthomasvempala/3ba865ebbf633e160e3b4800cc9e84e4/raw "${HOME}/.gitignore" | |
| override_prompt https://gist.github.com/tomthomasvempala/5d2fbc5dc0b3688d0fa752853b64ecfe/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} | |
| mkdir -p "${ZSH_CUSTOM}/plugins" | |
| clone_if_not_present() { | |
| [ ! -d "${ZSH_CUSTOM}/plugins/$(basename $1)" ] && git -C "${ZSH_CUSTOM}/plugins" clone --depth=1 $1 | |
| } | |
| clone_if_not_present https://github.com/mroth/evalcache | |
| # Note: Do not move these into 'Brewfile' - since that breaks the linking for omz plugins location | |
| clone_if_not_present https://github.com/zsh-users/zsh-syntax-highlighting | |
| clone_if_not_present https://github.com/zsh-users/zsh-autosuggestions | |
| ################################ | |
| # Prep for installing homebrew # | |
| ################################ | |
| source "${HOME}/.zshenv" | |
| source "${HOME}/.zprofile" | |
| 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 || bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" | |
| override_prompt https://gist.github.com/tomthomasvempala/63177c840018d09af9437cf59efd389d/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' | |
| # test -e "${HOMEBREW_PREFIX}/bin/codium" && ln -sf "${HOMEBREW_PREFIX}/bin/codium" "${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. Use ${HOME}/.gitconfig-template.inc as a template to create equivalent configuration files with your logins and make corresponding changes in ${HOME}/.gitconfig to reflect the same" | |
| echo "2. Go to Terminal > Preferences > Profiles > Basic > Text > Change Font to 'MesloLGS Nerd Font'" | |
| echo "3. Go to iTerm2 > Preferences > Profiles > Default > Text > Change Font to 'MesloLGS Nerd Font'" | |
| echo "4. 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