7/26 MAC環境大改善プロジェクト！！！

# Refferences

## dotfile作成で学んだこと
dotfileの作り方参考
https://zenn.dev/dani_rk/articles/19db34c9296ba7

#### Makefileとは
- Makefileがあるディレクトリ内でmakeまたはallを実行するとそのファイル内の最初の行が実行される。cが使えるならどこでも使える便利ファイル。
- dotfile内の`.sh`ファイル実行に使用される



-----

### InitファイルあれこれをInstallする

```shell:init.sh
#!/bin/zsh

# Check operating system
if [ "$(uname)" != "Darwin" ] ; then
	echo "Not macOS!"
	exit 1
fi

# Install Rosetta 2 for Apple Silicon
if [ "$(uname -m)" = "arm64" ] ; then
  /usr/sbin/softwareupdate --install-rosetta --agree-to-license
fi

# Install xcode
xcode-select --install

# Install brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
if [ "$(uname -m)" = "arm64" ] ; then
  eval "$(/opt/homebrew/bin/brew shellenv)" > /dev/null
fi
```



#### 解説
- あなたのOSはDarwin(mac)?Linux判定
- exit 1は以上終了 0は正常
- uname -mでプロセッサ確認 -> arm64はapple silicon。 x86系はその他
- > binは`ls cd`などのOSで使う処理が入ってて、sbinはsystem内部系の処理が入ってる。(losettaってコマンドとかで使わないから確かに)
- curl: 
  - さまざまなプロトコル(HTTP、HTTPS、FTP、SMTP等)に対応しているデータ転送系コマンド
  - GETやPOSTなどのリクエストメソッド、ヘッダーやリクエストボディのカスタマイズが簡単
  - SSL/TLSによる暗号化通信に対応。プロキシ経由の通信に対応
- eval:
    - 引数を1つにまとめて，コマンドとして実行したり、引数として与えられた文字列をそのままコマンドとして実行します。
- 最後のコードは呪文。。/dev/nullは出力のゴミ箱？？



--------

### linkファイル シンボリックリンクを貼ってcommandや設定をグローバルに反映する

```shell:link.sh
#!/bin/zsh

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

for dotfile in "${SCRIPT_DIR}"/.??* ; do
    [[ "$dotfile" == "${SCRIPT_DIR}/.git" ]] && continue
    [[ "$dotfile" == "${SCRIPT_DIR}/.github" ]] && continue
    [[ "$dotfile" == "${SCRIPT_DIR}/.DS_Store" ]] && continue

    ln -fnsv "$dotfile" "$HOME"
done
```
#### 解説

- `dirname "$0": $0` はスクリプトのファイル名を表します。`dirname "$0"` はスクリプトが置かれているディレクトリのパスを取得します。
- `"${SCRIPT_DIR}"/.??*: `スクリプトのディレクトリ内の隠しファイル（ドットファイル）をリストします。.??* は `.`から始まる「2文字以上のファイル」を意味します。例えば .bashrc
- それらを`dotfile`としてルーぴんぐ！
- `[[ "$dotfile" == "${SCRIPT_DIR}/.〜〜" ]] && continue`これはループしているdotfileつまり、そのドットファイルのpathが〜〜ノファイルと一致した場合、continueする ＜ーーーーー シンボリックリンクをつける必要がないから
- `ln`コマンドはお馴染みリンク貼りコマンド 左のパス -> 右のパスへ貼り付ける



-------

### defaults.sh MACの設定ファイル
詳しくは
https://memo.yammer.jp/posts/macos-defaults

```shell:defaults:sh
#!/bin/zsh

if [ "$(uname)" != "Darwin" ] ; then
	echo "Not macOS!"
	exit 1
fi

# Remap the emoji picker to the Fn key
defaults write com.apple.HIToolbox AppleFnUsageType -int 2

# Enable full keyboard access for all controls
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

~~~~~~~~~~などなど

```
***上のリンクの記事にあるように今使っているMacの設定を変えてその差分を見ることでどのパラメータが変化したか確認できる
```
defaults read > before

# GUI上で設定を変更する -> 大事！時間あけすぎも注意

defaults read > after
diff before after
colordiff(brew install colordiff)などを使うと捗る
```

--------

## あとがき
#### typeコマンド
- ls やyarn などのコマンドがどのパスに存在しているか確認できる便利

#### -d
- -d はテストオプションで、指定したパスがディレクトリかどうかをチェックします。
`if [ ! -d $DOTFILES_PATH ]; then`

#### tput装飾一覧
色番号	色
0:黒 1:赤 2:緑 3:黄色 4:青 5:マゼンタ 6:シアン 7:白
```
$ tput setaf <色番号> #文字色を色番号にする
$ tput setab <色番号> #背景色を色番号にする
$ tput cup <y座標> <x座標> # 上からx行目左からy文字目にカーソル移動
$ tput bold #太字
$ tput clear # clearコマンドと同じ効果
$ tput sgr0 # 装飾解除
$ tput cols # ターミナルの横幅を文字数で出力
$ tput lines # ターミナルの縦幅を文字数で出力
$ tput civis # カーソル非表示
$ tput cnorm # カーソル表示
```

### プロセッサアーキテクチャの違いとは
- `uname -a`で確認できる

M1Macの開発って他と違うアーキテクチャだから色んなPackageのインストールがうまくいかないことが多いよね？
Losettaとかインストールいるし
https://zenn.dev/skrikzts/articles/0e35a39a484d78
### ざっくり紹介
>ARM64
ARM64（またはAArch64）は、モバイルデバイスや組み込みシステムなど、エネルギー効率や省電力性が重視される環境向けに設計された64ビットのプロセッサアーキテクチャです。
ARMプロセッサは、スマートフォン、タブレット、IoTデバイス、クラウドサーバーなど、さまざまなデバイスで広く利用されています。 ARM64アーキテクチャは、低消費電力でありながら高性能を実現しています。

> x64
x64（またはx86-64、AMD64）は、主にデスクトップやサーバー向けに使用される64ビットのプロセッサアーキテクチャです。
x64プロセッサは、Intelのx86アーキテクチャを拡張したものであり、64ビットのアドレス空間をサポートし、大容量メモリの利用や高性能な演算が可能です。一般的なパーソナルコンピュータやサーバーでは、x64アーキテクチャが広く採用されています。




# その他の便利MAC TOOLS
- rcmd
- rectangle
- MonitorControlLite
- Arc
-