-
-
Save shivashishrs/a161bd2082fb15d9bfbc138e88a089f6 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 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