This is aimed to streamline the process of setting up a development environment for a new macOS. There are many tools for the job but this set up is my personal preference and has served me well over the years.
- **Set up Finger ID
- Set up Apple ID
Photos sync: off - Trackpad
Natural scrolling: off - Keyboard
Key repeat rate: Fast
Delay until repeat: Short
Add Input: Korean
Use smart quotes and dashes: off
Correct spelling automatically: off
Capitalize words automatically: off
Add period with double-space: off
Caps Lock key: Escape - Desktop & Dock
Position on screen: left
Automatically hide and show the Dock: on - Displays
Automatically adjust brightness: off
Hot Corners: off - Change Defaults
Show hidden files:
defaults write com.apple.finder AppleShowAllFiles YESShow path bar:
defaults write com.apple.finder ShowPathbar -bool trueShow status bar:
defaults write com.apple.finder ShowStatusBar -bool trueShow Library folder:
chflags nohidden ~/LibraryEnable repeating keys on press and hold (for VIM):
defaults write -g ApplePressAndHoldEnabled 0Set Screenshot Location (Desktop):
defaults write com.apple.screencapture "location" -string "~/Desktop" && killall SystemUIServerDisable Apple Music launch on bluetooth device connect:
launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plistTo re-enable:
launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plistDownload and configure the following in order:
Download and install from the website.
Install from the command line:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"Make sure everything is up to date:
brew updateNOTE: On the M1 install, there may be a few errors at the end. Run the
commands to add to path, then run brew doctor and run the commands listed.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"NOTE: This will overwrite your existing .zshrc. If you already have a
configured .zshrc, back it up first and restore your customizations after
installing.
Install via Homebrew:
brew install powerlevel10kRun the configuration wizard:
p10k configureThis will walk you through setting up your prompt style and save the config
to ~/.p10k.zsh. Powerlevel10k is already sourced in .zshrc.
This repo includes a configured .zshrc with aliases, PATH settings, and tool
activation (mise, Powerlevel10k, Claude Code). Copy it to your home directory:
cp .zshrc ~/.zshrcNOTE: If you already have a .zshrc you want to keep, review the differences
and merge manually instead.
Reload your shell:
source ~/.zshrcThe .zshrc sources a separate ~/.secrets file for sensitive values. See
below to set that up.
.zshrc handles shell configuration (aliases, PATH, tool activation).
.secrets handles sensitive values (API tokens, credentials) that should
never be checked into version control.
If you already have a .secrets file, keep it. If not, create one:
touch ~/.secrets
chmod 600 ~/.secretsBoilerplate for ~/.secrets:
# API tokens
# export SOME_API_TOKEN=""
# Cloud credentials
# export AWS_ACCESS_KEY_ID=""
# export AWS_SECRET_ACCESS_KEY="".secrets is already in .gitignore_global and sourced by .zshrc.
Install from the command line:
curl -fsSL https://claude.ai/install.sh | bashThis installs to ~/.local/bin. Make sure it's in your PATH (already
included in .zshrc).
Install from the command line:
npm install -g @google/gemini-clibrew install gitThe first thing you should do with Git is set your global configuration.
Keep PII (name, email, signing keys) out of .gitconfig by using a separate
.gitconfig.private file. This way .gitconfig is safe to check into version
control and .gitconfig.private stays local (already in .gitignore_global).
touch ~/.gitconfigInput your config in ~/.gitconfig:
[include]
# Load private config (name, email, signing keys, etc.)
path = ~/.gitconfig.private
[core]
editor = /usr/bin/vim
excludesfile = ~/.gitignore_global
[filter "lfs"]
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
[init]
defaultBranch = master
[push]
autoSetupRemote = trueCreate your private config:
touch ~/.gitconfig.privateInput your personal details in ~/.gitconfig.private:
[user]
name = Firstname Lastname
email = you@example.com
# vim: set ft=gitconfig:Set your global git ignore configuration:
touch ~/.gitignore_globalInput your global ignores in ~/.gitignore_global:
.DS_Store
.idea/
.secrets
.gitconfig.private- Check if you have SSH key, run:
ls -al ~/.sshIf you don't see ed25519 and ed25519.pub (or similar), generate one:
ssh-keygen -t ed25519 -C "your_email@example.com (or computer name)"- Add your SSH key to GitHub
cat ~/.ssh/id_ed25519.pub-
Add the key to GitHub SSH Settings
-
Ensure SSH agent is running
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519- Test your SSH connection
ssh -T git@github.com- If successful it should say
"Hi <username>! You've successfully authenticated..."mise is a runtime version manager that replaces nvm (Node), chruby/rbenv
(Ruby), pyenv (Python), and asdf. It lets you install and switch between
versions per-project using .mise.toml or .tool-versions files.
Install via Homebrew:
brew install miseActivation is already included in .zshrc. Verify it's working:
mise --versionNode.js:
mise use --global node@latestNOTE: npm is included with Node.js and will be available automatically.
node -v && npm -vRuby:
mise use --global ruby@latestruby -vPython:
mise use --global python@latestNOTE: pip is included with Python and will be available automatically.
python --version && pip --versionJava:
mise use --global java@latestjava --versionPer-project versions:
If a project needs a specific runtime version, navigate to the project folder and set it locally. For example:
cd <path to project folder>
mise use node@20This creates a .mise.toml in that directory. mise will automatically switch
to that version when you cd into the project.
NOTE: mise manages runtimes only. Package and dependency managers like Yarn and Poetry are installed separately via Homebrew.
brew install yarnPoetry is a Python dependency and virtual environment manager (similar to Bundler for Ruby on Rails or Yarn for JavaScript).
brew install poetrypoetry --versionThis repository includes specialized AI configuration for Claude Code and Gemini CLI. These files establish project standards, communication preferences, and custom workflows to ensure consistent and high-quality AI assistance.
CLAUDE.md/GEMINI.md: Global context files that define project standards, learning gaps, and communication rules.commands/: Custom command suites for common workflows (e.g.,/explain,/whiteboard,/summarize).
When using Claude Code or Gemini CLI in this repo, the assistants will automatically
load the context from the .md files. You can trigger custom commands defined
in the commands/ directories:
| Command | Purpose |
|---|---|
/explain |
Focused concept explanations using analogies and visuals. |
/why |
Reasoning and "bigger picture" behind a concept or architecture. |
/whiteboard |
Coaching session for drawing diagrams on paper/whiteboard. |
/summarize |
Review session changes and generate a structured summary. |
/mr or /pr |
Draft a GitLab Merge Request or GitHub Pull Request. |
/vim-help |
Memphis-style visual guide for Vim commands. |
Optional. This repo includes a .vimrc with personal settings for
VIM (PaperColor theme, custom keybindings, tab/indent preferences). Copy it to
your home directory if you use VIM:
cp .vimrc ~/.vimrcNOTE: Requires the PaperColor theme. Install it first:
git clone https://github.com/NLKNguyen/papercolor-theme.git ~/.vim/pack/colors/start/papercolor-themeThis .vimrc enables modelines, which lets vim read settings from comments at
the top or bottom of files. For example, the .secrets and .gitconfig.private
boilerplates in this repo include modelines like # vim: set ft=sh: so vim
applies the correct syntax highlighting automatically.
Google Chrome | Mozilla Firefox
Download and install both from their websites.
Code editor.
Manages JetBrains IDEs (RubyMine, DataGrip, IntelliJ, Rider, etc.). Install Toolbox first, then install individual IDEs from within it.
Password manager.
Window management. After installing, import the config from this repo:
Rectangle → Preferences → Import → select RectangleConfig.json
Launcher and productivity tool.