Last active
April 11, 2024 21:07
-
-
Save llimllib/c4dd0a98a426022b0365d4c0a9090460 to your computer and use it in GitHub Desktop.
The script I use to set up a new mac just the way I like it
This file contains 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 | |
# many settings from https://raw.githubusercontent.com/mathiasbynens/dotfiles/master/.macos | |
# many settings from https://raw.githubusercontent.com/thoughtbot/laptop/master/mac | |
# instructions on finding the default you've changed: https://pawelgrzybek.com/change-macos-user-preferences-via-command-line/ | |
# previous install notes at: | |
# https://gist.github.com/llimllib/ee591266e05bd880629a4e7511a61bb3 | |
# https://gist.github.com/llimllib/e864a92da94ceb1ef0da2e06fd1f8d70 | |
# https://gist.github.com/llimllib/3fc4fefcfc0152dad8c58201246d8802 | |
# | |
# this script's URL is: https://gist.github.com/llimllib/c4dd0a98a426022b0365d4c0a9090460 | |
fancy_echo() { | |
local fmt="$1"; shift | |
# shellcheck disable=SC2059 | |
printf "\n$fmt\n" "$@" | |
} | |
# handle failures | |
trap 'ret=$?; test $ret -ne 0 && printf "failed\n\n" >&2; exit $ret' EXIT | |
# Things I don't know how to do from the command line: | |
# * use caps lock as esc for all keyboards | |
# * increase screen resolution to retina | |
printf "What's the computer name? " | |
read -r computer_name | |
# set the computer name: | |
sudo scutil --set ComputerName "$computer_name" | |
sudo scutil --set HostName "$computer_name" | |
sudo scutil --set LocalHostName "$computer_name" | |
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "$computer_name" | |
# dark mode | |
defaults write NSGlobalDomain AppleInterfaceStyle Dark | |
# speed up key repeat | |
defaults write NSGlobalDomain KeyRepeat -int 1 | |
defaults write NSGlobalDomain InitialKeyRepeat -int 20 | |
# Disable “natural” (Lion-style) scrolling | |
defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false | |
# Disable Notification Center and remove the menu bar icon | |
launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 2> /dev/null | |
# I don't think this worked; instead I went into system preferences and | |
# set do not disturb to run from 3:01AM to 3:00AM | |
# Disable auto-correct | |
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false | |
# Set the icon size of Dock items to 16 pixels | |
defaults write com.apple.dock tilesize -int 16 | |
# Set the magnification to true | |
defaults write com.apple.dock magnification -int 1 | |
# Wipe all (default) app icons from the Dock | |
defaults write com.apple.dock persistent-apps -array | |
# Show only open applications in the dock | |
defaults write com.apple.dock static-only -bool true | |
# remove autohide delay | |
defaults write com.apple.dock autohide-delay -float 0 | |
# Automatically hide and show the Dock | |
defaults write com.apple.dock autohide -bool true | |
# show batter percentage | |
defaults write com.apple.menuextra.battery ShowPercent -bool true | |
# show the date in the toolbar | |
defaults write com.apple.menuextra.clock DateFormat -string 'EEE MMM d H:mm' | |
# Disable the sound effects on boot | |
sudo nvram SystemAudioVolume=" " | |
# Disable sound effects when changing volume | |
defaults write NSGlobalDomain com.apple.sound.beep.feedback -integer 0 | |
# Disable sounds effects for user interface changes | |
defaults write NSGlobalDomain com.apple.sound.uiaudio.enabled -int 0 | |
# Set alert volume to 0 | |
defaults write NSGlobalDomain com.apple.sound.beep.volume -float 0.0 | |
# Show volume in the menu bar | |
defaults write com.apple.systemuiserver "NSStatusItem Visible com.apple.menuextra.volume" -int 0 | |
# Show Bluetooth in the menu bar | |
defaults write com.apple.systemuiserver "NSStatusItem Visible com.apple.menuextra.bluetooth" -int 0 | |
# Avoid creating .DS_Store files on network or USB volumes | |
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true | |
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true | |
# don't hide files | |
defaults write com.apple.finder AppleShowAllFiles TRUE | |
# Show the ~/Library folder | |
chflags nohidden ~/Library | |
# Show the /Volumes folder | |
sudo chflags nohidden /Volumes | |
# mouse to max tracking speed | |
defaults write -g com.apple.mouse.scaling -int 3 | |
# disable shake to locate mouse pointer | |
defaults write ~/Library/Preferences/.GlobalPreferences CGDisableCursorLocationMagnification -bool YES | |
# disable pinch to zoom | |
defaults write com.apple.driver.AppleBluetoothMultitouch.mouse TrackpadPinch -int 0 | |
# disable trackpad rotate | |
defaults write com.apple.driver.AppleBluetoothMultitouch.mouse TrackpadRotate -int 0 | |
# disable double tap to zoom | |
defaults write com.apple.driver.AppleBluetoothMultitouch.mouse MouseOneFingerDoubleTapGesture -int 0 | |
defaults write com.apple.driver.AppleBluetoothMultitouch.mouse TrackpadTwoFingerDoubleTapGesture -int 0 | |
# fix key repeat in vs code. I don't use it that often, but this is necessary when I do | |
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false | |
# speed up window opening by disabling animation | |
defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool NO | |
# reboot systemUIServer to enable defaults to take effect | |
killall SystemUIServer | |
if ! command -v brew >/dev/null; then | |
fancy_echo "Installing Homebrew ..." | |
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" | |
fi | |
# add brew to path | |
export PATH=/opt/homebrew/bin:$PATH | |
# make sure you sign in to the app store before you get here, mas cannot work without being signed in I guess | |
brew install mas | |
# find these codes with `mas search <app name>`. They're stable, so lets' just | |
# use the app IDs | |
# | |
# Xcode | |
mas install 497799835 | |
# AdGuard for Safari | |
mas install 1440147259 | |
brew install atuin | |
# atuin requires this. It is annoying that brew doesn't install it! atuin is | |
# extremely annoying if this is not present. | |
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh | |
brew install apache-arrow | |
brew install awscli | |
brew install autoconf | |
brew install automake | |
brew install bash | |
brew install bash-completion@2 | |
brew install bat | |
brew install broot | |
brew install brotli | |
brew install caddy | |
brew install clang-format | |
brew install cmake | |
brew install coreutils | |
brew install curl | |
brew install direnv | |
brew install dos2unix | |
brew install duckdb | |
brew install efm-langserver | |
brew install fd | |
brew install ffmpeg | |
brew install findutils | |
brew install fzf && /usr/local/opt/fzf/install --all | |
brew install gcc | |
brew install gh | |
brew install git | |
brew install git-delta | |
brew install gnu-sed | |
brew install gnuplot | |
brew install grep | |
brew install gh | |
brew install htop | |
brew install imagemagick | |
brew install jless | |
brew install jq | |
brew install llvm | |
brew install neovim | |
brew install nmap | |
brew install pandoc | |
brew install postgresql@15 | |
brew install ripgrep | |
brew install rsync | |
brew install s3cmd | |
brew install shellcheck | |
brew install stylua | |
brew install sqlite | |
brew install tree | |
brew install vim | |
brew install wget | |
brew install yarn | |
brew install yt-dlp | |
# deprecated out of brew but I still use them | |
go install github.com/llimllib/devd/cmd/devd@latest | |
go install github.com/cortesi/modd/cmd/modd@latest | |
# brew's install of asdf seems to be quite terrible, so let's install it the | |
# way they want us to | |
# https://asdf-vm.com/#/core-manage-asdf | |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3 | |
export PATH=~/.asdf/bin:$PATH | |
# fzf requires an installation script to run... not sure why homebrew doesn't | |
# do this but w/e | |
"$(brew --prefix)"/opt/fzf/install --all --update-rc | |
# install dotfiles | |
mkdir code | |
cd code | |
git clone https://github.com/llimllib/personal_code.git | |
cd .. | |
cp -r code/personal_code/homedir/.* . | |
rm -rf ~/.git | |
# now set the updated bash as your login shell | |
echo /opt/homebrew/bin/bash | sudo tee -a /etc/shells | |
sudo chsh -s /opt/homebrew/bin/bash "$(whoami)" | |
brew install --cask alfred | |
brew install --cask amethyst | |
brew install --cask bitwarden | |
brew install --cask docker | |
brew install --cask firefox | |
brew install --cask google-chrome | |
brew install --cask google-cloud-sdk | |
brew install --cask iterm2 | |
brew install --cask karabiner-elements # and copy karabiner config folder into ~/.config | |
brew install --cask keepingyouawake | |
brew install --cask meetingbar | |
brew install --cask multi | |
brew install --cask obsidian | |
brew install --cask session-manager-plugin | |
brew install --cask slack | |
brew install --cask spotify | |
brew install --cask tailscale | |
brew install --cask visual-studio-code | |
brew install --cask vlc | |
# tell git to use the osx keychain | |
git config --global credential.helper osxkeychain | |
# * set iTerm ctrl-tab and ctrl-shift-tab to "next term" and "prev term" rather | |
# than cycle | |
# install `imgcat` https://iterm2.com/documentation-images.html | |
wget https://iterm2.com/utilities/imgcat -O ~/.local/bin/imgcat && chmod a+x ~/.local/bin/imgcat | |
# install base2tone space-dark and everforest | |
wget https://raw.githubusercontent.com/atelierbram/Base2Tone-iterm2/master/ColorPresets/base2tone-space-dark.itermcolors | |
wget https://raw.githubusercontent.com/icewind/everforest.iterm2/main/Everforest_medium_dark.itermcolors | |
fancy_echo "open iterm -> preferences -> profiles -> color presets and import base2tone-space-dark.itermcolors and Everforest_medium_dark.itermcolors" | |
brew tap homebrew/cask-fonts | |
fonts=(font-blex-mono-nerd-font font-iosevka-nerd-font font-hack-nerd-font font-fira-code-nerd-font font-ubuntu-mono-nerd-font font-sf-pro) | |
for font in "${fonts[@]}"; do | |
brew install --cask "$font" | |
done | |
set -euxo pipefail | |
langs=("golang" "nodejs" "python" "ruby" "rust" "terraform") | |
for lang in "${langs[@]}"; do | |
asdf plugin add "$lang" | |
asdf install "$lang" latest | |
asdf global "$lang" latest | |
done | |
asdf reshim | |
# install language servers | |
go install golang.org/x/tools/gopls@latest | |
go install mvdan.cc/gofumpt@latest | |
npm install -g bash-language-server prettier typescript typescript-language-server vscode-langservers-extracted | |
gem install solargraph | |
pip install black pyright | |
# go through the steps to get your local git auth set up | |
gh auth login |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment