macOS 개발 환경 설정
Published: 2022-05-25 02:48:09

새롭게 맥을 설정할 때 어떻게 개발환경을 설정하는지 공유하는 글입니다. 주로 언어별 설정을 제외한 개발 환경을 다룰 것이고 또 개발환경 설정뿐만 아니라 몇 가지 유용한 유틸리티도 함께 소개할 예정입니다. 여기에 공유된 내용이 쓸만한 레퍼런스가 좋겠네요.

## [Homebrew](https://brew.sh)
많이 알려진 프로그램입니다. 여러 가지 다른 프로그램을 설치하기 위하여 설치해야 하는 프로그램이기 때문에 가장 먼저 설치해 주면 좋습니다.

####설치
```bash
/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)"
```

---

## [mas-cli](https://github.com/mas-cli/mas)
Mac App Store에 있는 프로그램을 명령어로 설치할 수 있게 해주는 프로그램입니다. 나중에 새로 맥을 설정하는 스크립트를 제작할 때 유용합니다.

####설치
```bash
brew install mas
```

####사용
mas를 사용하여 설치하고자 하는 프로그램을 찾고 그 결과로 나오는 고유 숫자를 사용하여 실제로 프로그램을 설치할 수 있습니다.

```bash
# Search
$ mas search $NAME
00000000 $NAME

# Install
$ mas install 00000000
```

---

## Terminal
다양한 터미널 후보가 있지만 결국 [iterm2](https://iterm2.com)를 사용하게 되네요. 혹시 다른 옵션을 찾는 분들을 위하여 후보들과 느낀 점을 간단하게 남겨 둡니다.
1. [kitty](https://sw.kovidgoyal.net/kitty/) : 단축키가 손에 잘 익지 않고 변경할 수 있지만 기본 아이콘이 별로네요.
2. [alacritty](https://github.com/alacritty/alacritty) : 빠릿하여 좋기는 하지만 설정 가이드가 그다지 친절하지 않았습니다.
3. [tabby](https://github.com/Eugeny/tabby) : 테스트할때 버벅임이 있어서 제외하였습니다.
4. [warp](https://github.com/warpdotdev/Warp) : 첫 화면에서 회원가입이 있어서 제외하였습니다. 회원가입후 사용하면 사실 좋은점도 많은 터미널인데 아쉽네요.

####설치
```bash
brew install --cask iterm2
```

####상세 설정
1. 테마 설정 : `Preference` → `Appearance` → `General` → `Theme` → `Minimal`
2. 키 맵핑 설정 : `Preference` → `Profiles` → `Keys` → `Key Mappings` → `Presets…` → `Natural Text Editing`
3. 컬럼 테마 설정 : `Preference` → `Profiles` → `Colors` → `Color Presets` → 마음에 드는 것으로

---

## [oh my zsh](https://ohmyz.sh) & [powerlevel10k](https://github.com/romkatv/powerlevel10k)
다양한 shell들이 있지만 oh my zsh, powerleve10k 조합은 커뮤니티가 비교적 크다고 생각하여 계속 사용하고 있습니다.

그리고 powerlevel9k를 사용하시던 분들은 그 프로젝트가 read-only로 변환되었기 때문에 powerlevel10k 사용을 권장합니다.

플러그인은 명령어 히스토리의 내용들을 커멘드 입력 시 힌트로 나오게 해주는 zsh-autosuggestions 이외에 필요성을 느끼지 못하여 zsh-autosuggestions만 설치하여 사용하고 있습니다.

####설치
```bash
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
```

#### p10k 설정 및 플러그인 관련 `~/.zshrc` 구성
```bash
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"

source $ZSH/oh-my-zsh.sh
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
```

---

## [lsd](https://github.com/Peltoche/lsd)
![lsd](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07bu66dfpxtjzufco6so.png)

`ls`를 좀 더 가독성 좋게 할 목적으로 만들어진 프로그램입니다. [exa](https://github.com/ogham/exa)이라는 프로그램도 있지만 개인적으로는 아이콘과 파일명 사이의 공백 처리가 lsd가 더 깔끔하다고 생각하여 lsd를 사용합니다.

####설치
```bash
brew install lsd
```
####`~/.zshrc` alias 추가 (`ls`와 동일하게 사용하기 위하여)
```bash
alias ls='lsd'
alias ll='ls -alhF'
```

---


## [bat](https://github.com/sharkdp/bat)
![bat](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3qwwre33366ciryh4lvf.png)

`cat`에서 문법 하이라이트를 추가한 프로그램입니다. 별거 아닌 것 같지만, 많이 유용한 프로그램 중 하나입니다.

다만 아무런 옵션을 사용하지 않으면 파일 용량 이름 등의 부가 정보를 표시해주기 때문에 `>`, `>>` 등 redirection을 할 때 불편한 점이 있어서 `-p` 옵션을 함께 사용합니다.

####설치
```bash
brew install bat
```
####`~/.zshrc` alias 추가 (`cat`와 동일하게 사용하기 위하여)
```bash
alias cat='bat -p'
```

---

## [peco](https://github.com/peco/peco)

![peco_demo](https://media.giphy.com/media/dxUP3PqVBDZRCbGr2J/giphy.gif)

`grep`와 비슷한 필터링 툴입니다. 다만 `peco`는 interactive하기 때문에 `grep`와 다르게 검색 목적으로 사용하면 좋은 툴입니다.

####설치
```bash
brew install peco
```

---

## [sd](https://github.com/chmln/sd)

![sd_gif](https://media.giphy.com/media/D3HPqsFOjbwQCZf3Qt/giphy.gif)

`sed`를 대체하는 툴입니다. `sed` 보다 문법이 간결하고 [속도도 빠르다](https://github.com/chmln/sd#benchmarks)고 하네요.

####설치
```bash
brew install sd
```

---

## Editor
- jetbrains-toolbox : jetbrain 제품은 toolbox로 관리하는 게 더 공식적인 느낌이라 toolbox를 설치하여 사용합니다
```bash
brew install --cask jetbrains-toolbox
```

- visual-studio-code : 보조 에디터로 많이 사용합니다.
```bash
brew install --cask visual-studio-code
```

- [spf13-vim](https://github.com/spf13/spf13-vim) : 보조 에디터로 사용합니다. 다만 여러 가지 설정에 신경 쓰고 싶지 않아서 best practice가 잘 되어있는 distribution을 사용합니다.
```bash
curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh
rm -rf spf13-vim.sh
```

- Xcode : 가끔 iOS 개발을 하므로 설치해두고 사용합니다.
```bash
mas install 497799835
```

---

## [Lazydocker](https://github.com/jesseduffield/lazydocker)
![lazydocker](https://github.com/jesseduffield/lazydocker/raw/master/docs/resources/demo3.gif)
로컬머신에서 돌아가는 docker의 리소스, 로그 등을 모니터링하고 간단한 명령어를 container에 줄 수 있는 프로그램입니다.

####설치
```bash
brew install lazydocker
```

---

## [bottom](https://github.com/ClementTsang/bottom)
![bottom](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ve9zsd65jkut2t7j5ndi.png)

터미널에서 시스템 리소스를 볼 수 있는 툴입니다. 다른 옵션도 많지만, 개인적으로는 다른 옵션에 비하면 안정적이고 리소스마다 상세 뷰 등을 제공합니다.


####설치
```bash
brew install bottom
```

####다른 옵션
- [vtop](https://github.com/MrRio/vtop)
- [gtop](https://github.com/aksakalli/gtop)

---

## ETC
- [rectangle](https://rectangleapp.com) : 윈도우의 이동과 리사이징을 할 수 있는 프로그램, 다양한 프로그램들이 있지만 오픈소스 기반이고 불필요한 UI들이 없어서 사용하는 프로그램입니다.
```bash
brew install --cask rectangle
```
    
- [iina](https://iina.io) : 오픈소스 동영상 플레이어, 대부분의 단축키가 특별한 학습 없이 생각한 것 같이 적용되어 사용합니다.
```bash
brew install --cask iina
```
    
- [keepingyouawake](https://github.com/newmarcel/KeepingYouAwake) : 맥이 잠자는 것을 막아주는 프로그램입니다.
```bash
brew install --cask keepingyouawake
```

- [vimari](https://github.com/televator-apps/vimari)
![vimari](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c6xnukvm39mukiscwpig.png)
safari에서 vim 단축키 기반 브라우징이 가능하게 해주는 프로그램입니다. 키보드만 사용하고 싶을 때 유용하네요.
```bash
mas install 1480933944
```


---

지금까지 맥을 새로 설치하였을 때 유용할만한 설정을 알아보았습니다. 각 프로그래밍 언어별 설정들도 있을 것 같은데요. 그건 커버할 범위가 넓을 수 있기 때문에 다른 글에서 알아보도록 하겠습니다. 여기에 나온 설치 명령어들을 모아서 한 번에 프로그램이 설치할 수 있는 스크립트를 만들어 봐도 좋을 것 같네요.