MacOS 環境建置

MacOS 環境建置的細節紀錄

-8 min read

關聯: [[ 2023-02-05-dotvim ]]

1. 安裝 Apple Command Line Tools

$ xcode-select --install

2. 安裝 Homebrew

$ /bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"

3. 安裝 Homebrew 套件

$ brew install tig diff-so-fancy kind python pyenv jq ack lima
$ echo 'export HOMEBREW_NO_INSTALL_CLEANUP=TRUE' >> ~/.zshrc

4. 安裝 XCode

$ brew upgrade
$ xcode-select --install

5. 安裝 nvm & NodeJS & Pnpm

$ curl -o- <https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh> | bash
$ npm install --global pnpm
$ nvm install 18.16.0
$ nvm alias default node 18.16.0

# 設定自動依照專案載入對應 nvm 版本

# 專案底下要有 .nvmrc
18.12.1

$ code ~/.zshrc

# 把下面的程式碼貼到 ~/.zshrc
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

# 加入 nvmrc (沒事不要執行這個)
node -v > .nvmrc

6. 安裝 VSCode 的 code CLI

打開 VSCode Cmd+Shift+P shell command 選取 Shell Command: Install ‘code’ command in PATH

7. 設定 Git

# 建立第一把 SSH key (如果有 gen 過金鑰可跳過此步驟)
ssh-keygen && pbcopy < ~/.ssh/id_rsa.pub

# 貼上 ssh-key
$ cat ~/.ssh/id_rsa.pub | pbcopy
$ 打開 [User Settings > SSH Keys](<https://gitlab.com/-/profile/keys>)
$ key 到右側輸入框內
$ Done

# SSH Key 的放置位置
 ~/.ssh/ 底下

# 查看 SSH Key 的對應連結位置
$ code ~/.ssh/config

# SSH config 解說 (多組 key 時會用到)
Host foo                        # gitlab.com 的別名, 之後可以用 git@foo 來取代 git@gitlab.com  
HostName gitlab.com             # 指定要變換的 Repo domain 
User git
IdentityFile ~/.ssh/id_rsa_foo  # 可以在 keygen 的時候指定名稱
IdentitiesOnly yes

8. 安裝 cz-cli

# 安裝 [cz-cli](<https://github.com/commitizen/cz-cli>)
npm install commitizen cz-conventional-changelog cz-customizable -g

# 要加以下資訊到 package.json
"config": {
  "commitizen": {
    "path": "node_modules/cz-customizable"
  },
  "cz-customizable": {
    "config": ".cz-config.ts"
  }
}

其他 Nice to have

# pyenv 設定:把以下資訊貼到 ~/.zshrc
~~export PYENV_ROOT="$HOME/.pyenv"~~
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# pyenv 設定:向下相容安裝 python2.7
pyenv init
pyenv install 2.7.18
echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc && reload
pyenv shell 2.7.18

# 安裝 Xcode

# 安裝 gcloud
$ cd ~ && curl <https://sdk.cloud.google.com> | bash
$ gcloud init
$ gcloud auth configure-docker

# [Nice to have] M1 晶片
$ pyenv install 3.8.10
$ pyenv global 3.8.10 2.7.18

# [Nice to have] 當專案不支援 x64 時
rm -rf node_modules
yarn add node-sass@6.0.1
npm install --target_arch=x64

# [Nice to have] 安裝 tmux
# prefix + I : 安裝各類 tpm 套件
tmux source-file ~/.tmux.conf
git clone <https://github.com/tmux-plugins/tpm> ~/.tmux/plugins/tpm

# [Nice to have] zsh 自動補字 (加 `zsh-autosuggestions` 到 `~/.zshrc` 的 plugins 裡)
git clone <https://github.com/zsh-users/zsh-autosuggestions> $ZSH_CUSTOM/plugins/zsh-autosuggestions