ターミナル設定備忘録

## 新しく MacBook Air 買った
嬉しい☺️

新しい PC を起動し初期設定を終え、いざやることは、まず何よりも先にターミナルを可愛くしなければならない。


## てことで
### iTerm
なんとなくいつもこれ。
フォントの設定を Non-ASCII と分けてできるのが理由といえば理由。
良さげなのをおすすめされたら乗り換えるかもしれない。

https://iterm2.com/


### Homebrew
Mac なら入れとけなパッケージ管理ツール。
インストール先はデフォルトじゃなくてホームの下にディレクトリ作ってそこにしてる。

https://brew.sh/

```terminal
echo 'export PATH="$HOME/{mydir}/bin:$PATH"' >> ~/.zshrc
```
パスを通すのを忘れずに


### Nerd Fonts
ターミナルを可愛くするためには必須級。

https://www.nerdfonts.com/

さっき入れたばかりの Homebrew を早速使って
```terminal
brew tap homebrew/cask-fonts
brew install font-hack-nerd-font
```
インストールできたら iTerm のフォント設定に追加しておく。


### zsh-syntax-highlighting
コマンドに色付けしてくれる。
またまた brew でインストール。
```terminal
brew install zsh-syntax-highlighting
```
使えるよう設定する。
```terminal:.zshrc
source $HOME/{mydir}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
```

### exa
ls コマンドの代わりに使ってファイルのアイコンを表示したりする。
可愛いターミナルへの第一歩。
前は ColorLS 使ってたけど新しい PC にこのためだけに Ruby 入れるのもなぁと思って変えてみた。

https://the.exa.website/

またまたまた brew が活躍。
```terminal
brew install exa
```
kawaii
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581803/0e9e0648-7ce5-b7be-1b30-17ac47e7eb12.png" alt="exa" width="700px">
エイリアス設定して常にアイコン表示させるようにすればなお良し。
拡張子ごとに色を変えるとかもできる。
最近好みのくすんだ中間色にした。


### Git
ブランチの表示をいい感じにする。
vcs_infoとかをこねくり回してこうなった。
（GitHub のあのキャラクターって上半身だけ見れば可愛いよね）

何もないとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581803/2194633d-1782-19dc-a4b6-5eacf94a85db.png" alt="clean" width="600px">

新規ファイルがあるとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581803/bea4a3be-b3f7-1486-2b6a-c078fb7de325.png" alt="unstaged" width="600px">

add した変更があるとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581803/7d701757-8106-e137-f895-550bf30c51af.png" alt="staged" width="600px">

stash があるとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581803/bc26bc6f-5cd9-b149-d49f-603e5b97f514.png" alt="stash" width="600px">

<details><summary></summary>

```terminal:.zshrc
git_emoji=  #f113
staged=     #eaf4
unstaged=   #f046
stash=      #f0ca

autoload -Uz vcs_info
autoload -Uz add-zsh-hook

zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' max-exports 4

precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )

zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "${staged}"
zstyle ':vcs_info:git:*' unstagedstr "${unstaged}"
zstyle ':vcs_info:*' formats "${git_emoji} %b" '%c' '%u' '%F{081}%m%f'
zstyle ':vcs_info:*' actionformats '%B%K{015}%F{160}%b%f' '%c' '%u' '%F{160}%m | %a%f%k'

zstyle ':vcs_info:git+set-message:*' hooks \
                                     git-hook-begin \
                                     git-untracked \
                                     git-stash-count

function +vi-git-hook-begin() {
  if [[ $(command git rev-parse --is-inside-work-tree 2> /dev/null) != 'true' ]]; then
    return 1
  fi
    return 0
}

function +vi-git-untracked() {
  if [[ "$1" != "2" ]]; then
    return 0
  fi

  if command git status --porcelain 2> /dev/null \
    | awk '{print $1}' \
    | command grep -F '??' > /dev/null 2>&1 ; then
    hook_com[unstaged]+="${unstaged}"
  fi
}

function +vi-git-stash-count() {
  if [[ "$1" != "3" ]]; then
    return 0
  fi

  local count
  count=$(command git stash list 2>/dev/null | wc -l | tr -d ' ')
  if [[ "${count}" -gt 0 ]]; then
    hook_com[misc]+="${stash} ${count}"
  fi
}

function _update_vcs_info_msg() {
  if [ -z ${vcs_info_msg_0_} ]; then
    info=''
    return 0
  # clean
  elif [ -z ${vcs_info_msg_1_} ] && [ -z ${vcs_info_msg_2_} ]; then
    info="%F{036}${vcs_info_msg_0_}%f ${vcs_info_msg_3_}"
    return 0
  # staged
  elif [ -n ${vcs_info_msg_1_} ] && [ -z ${vcs_info_msg_2_} ]; then
    info="%F{190}${vcs_info_msg_0_} ${vcs_info_msg_1_}%f ${vcs_info_msg_3_}"
    return 0
  # unstaged
  elif [ -z ${vcs_info_msg_1_} ] && [ -n ${vcs_info_msg_2_} ]; then
    info="%F{196}${vcs_info_msg_0_} ${vcs_info_msg_2_}%f ${vcs_info_msg_3_}"
    return 0
  fi
}
add-zsh-hook precmd _update_vcs_info_msg

PROMPT='%B%F{086}%n%f%b: %B%F{086}%~%f%b
%D{%Y/%m/%d} %T $info
%B%F{086} %f%b'
#f101
```
</details>


## 参考にさせてもらった記事
https://qiita.com/mollifier/items/8d5a627d773758dd8078


## もっと良くできそうだったら随時追加する