macOSでの開発環境の構築

## mac mini m1 spec

昨年までmacbook pro(2017, 8gb memory, 128gb ssd)を使っていましたが　　
さすがに容量の圧迫とM1 macを体験してみたいということでMac mini(M1, 2020), 16gb memory, 512gb ssdを購入しました。

## OS Update

まずはロケール設定とOSアップデートを行います。趣味でRaspberry pi 4 8gbも持っていますが
やはりLinuxより初期設定は簡単で楽でした。

## install xcode command line tools

macに基本的に設置されているターミナルを実行し適当にgitなどのコマンドを実行します。
そうしたら自動でxcodeのコマンドラインツールを設置するか聞かれるので、ダウンロードしてインストールします。
（ここで思っていたより時間がかかりました。わりと容量が大きめなのかな。）

## install [Homebrew](https://brew.sh/)  

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

Homebrewはmacのパッケージマネージャでアプリの設置や削除、依存性のなくなったアプリの整理などをやってくれるので
基本的にHomebrewにあるアプリは全部Homebrewを通して管理しています。
ここまでやったら開発環境の構築はほぼ終わりですね。
次は4月22日現場`brew list`を実行して出力されたアプリの一覧です。

### formulae  

- bat
- fzf
- git
- gh: GitHub on the command line
- gnupg
- himalaya: email client on cli. vimプラグインと連携し簡単なメールの確認の時によく使っています。
- node
- openssl
- pandoc
- ranger: vim inspired command line file exploer
- ripgrep
- tmux
- trash: move files to trash in terminal. rangerと連携して使っています。
- universal-ctags: for tagbar vim plugin
- vim
- w3m: text-based broswer
- xsel: for yank from ranger to clipboard

### casks

- discord
- iterm2
- firefox
- jumpcut: clipboard management tool
- karabiner-elements: keyboard remapping
- obsidian
- raspberry-pi-imager
- rectangle
- slack
- visual-studio-code
- webstorm

### Appstore

Homebrewで設置したアプリではありませんがAppstoreにあるアプリも一応まとめて記載しておきます。

- spark: 普段からよく使っているアプリです。macとiPhoneとの連携も楽でいろんなメールアドレスを使っている方におすすめです。
- menubar x

## keyboard remapping

今使っているキーボードはLEOPOLD社のFC900Rスタンダードモデルです。
個人的にはvimも好きだしHHKBキーボードが欲しいのですがまだ持っていないので
Windows, mac, linuxそれぞれの環境で似たようなレイアウトを組んで使っております。
![hhkb_layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634554/56241d35-e974-5fd7-b98f-b8ec4382b7b0.png)
まずDIP Switchで物理的にリーマッピングをしてからkarabiner-elementsでさらにリーマッピングをする感じです。
ただしVimではコントロールをそのままコントロールとし使いますので
検索や他のアプリをmacで使う時はcmdとctrlをスワップしたプロフィールを、Vimやターミナルで作業する時はスワップしていないプロフィールを使っています。

### DIP switch

1番 on: LCtrl <-> CapsLock  
2番 on: LAlt <-> Win  
3番 off: Win <-> Fn  
4番 off: kill win key  

### karabiner settings  

| from key                 | to key                   |
| ------------------------ | ------------------------ |
| application              | sticky fn                |
| backslash \              | delete or backspace      |
| caps lock                | grave accent and tilde ~ |
| delete or backspace      | backslash \              |
| escape                   | caps lock                |
| grave accent and tilde ~ | escape                   |
| right control            | apple vendor keyboard key code language |

 | function keys | to key           |
 | ------------- | ---------------- |
 | f3            | mission control  |
 | f4            | launchpad        |
 | f5            | spotlight        |
 | f10           | mute             |
 | f11           | volume decrement |
 | f12           | volume increment |

これだと結局escの代わりにCapsLockが、``の代わりにesc가、CapsLockの代わりにLCtrlが、LCtrlの代わりに`が入ります。
**（USレイアウト基準です！）**
あとBSも\とスウィッチングしこれなら大体HHKBのレイアウトの真似はできたかなと思います。
リモートワークの実施で、自分のキーボードにいろんなOSのPCと繋ぐことが多いですが
自分で思っているHHKBのレイアウトの良いところはESC、LCtrl、BSだと思いますのでOSにより微妙に違うところがあってもそこまで問題は感じてないです。
ただしメカニカルキーボードあるあるで、fnキーはハードウェア段階でF1~F12との組み合わせが決められるのでwindows以外のlinux、mac osでは
fnキーの認識すらできません。なので右クリックキーとRCtrlキーをそれぞれfnと言語変換キー（地球儀マークのそれです。）にしました。が、
fnキーを押すたびに言語変換も一緒にされてしまったので結局fnキーはsticky fn（トグルする形）でリーマッピングすることになりました。