はじめに
最近、Macbook Pro を注文し、この記事が投稿されるころには、PC のセットアップをすることがわかっています。
そのため、今使っているターミナルなどの開発環境を dotfiles に移植して、引っ越し作業を簡略化したいと考えています。
前回の続きでもあります
その過程の中で、ターミナルエディタの config について完全に理解をしてしまったので記事を書きます。
成果物
先に成果物の dotfiles のリンクを
本編
僕が MacOS を使うようになってから、ターミナルはずっと iTerm2 を使っていました。
理由は特になく、「最初に使って、設定が気に入ったから使い続けてる」という一番良くない理由です。
iTerm2 の課題
課題1 設定の復元が難しい
僕の iTerm2 には
- hotkey(ctrl key 2回入力) で全画面表示
- ターミナルの opacity 設定
- alt + ←, alt + → でそれぞれ単語移動
これくらいの設定が入っていました。
設定自体は3分くらいでできるのですが、透明感の微調整などめちゃくちゃ面倒でした。
また、config file を export して、新しい端末で import するってこともできたみたいなのですが、なんだかわからないけどできませんでした。
こういう <input type="range">
みたいな要素を何度も同じ値に調整するのは、人間のやることではない。
何かのファイルに値を入れて、それをアプリが反映してくれよ。
って感じですね
課題2 色々できすぎる
iTerm2 ってめちゃくちゃリッチですよね
window のタブ管理に、分割、マウスアクションも大体できる。
この辺便利で使ってはいるのですが、多分使ってない機能もあるなと。
せっかく新しい PC にするのなら、無駄は省きたいというのが人の性。
大体、
window のタブ管理も、分割も、全部 tmux でできるじゃねえか。
と気づいてしまいました。
とすると、なんなら、これらの機能は要らない、むしろ邪魔ですよね
tmux で window 管理して、ターミナルエミュレータでも window 管理するなんて馬鹿げてる。
代わりのターミナル Alacritty
今回 Alacritty という比較的新しく、軽量なターミナルエミュレータを発見しました
これは、config を yaml で記載することができ、
ターミナルで表示する font, color, key bind まで、を管理することができます
また、タブ管理などのリッチな機能は何もありません。
そこにはターミナルエミュレータが存在するだけです。
実際に設定ファイルを編集していきます
window:
decolations: buttonless
startup_mode: SimpleFullscreen
background_opacity: 0.85
key_bindings:
- { key: Right, mods: Alt, chars: "\x1BF" }
- { key: Left, mods: Alt, chars: "\x1BB" }
こんな感じで以下の機能は満たすことができます
- ターミナルの opacity 設定
- alt + ←, alt + → でそれぞれ単語移動
hotkey(ctrl key 2回入力) で全画面表示
だけまだ満たせていません。
当然、 Alacritty には hotkey なんていうリッチな機能はありません(多分)
ではどうするのか
Hammerspoon の導入
Hammerspoon は OS X で lua で書かれたスクリプトを実行してくれるアプリケーションです。
lua でスクリプトを書いて、それを dotfiles で管理すれば、差分も追えるし、何よりターミナルエミュレータ以外の hotkey をカスタマイズできるので、使われるシーンが広いです。
設定ファイル
hs.hotkey.bind({"ctrl"}, "p", function()
local alacritty = hs.application.find('alacritty')
if alacritty:isFrontmost() then
alacritty:hide()
else
hs.application.launchOrFocus("/Applications/Alacritty.app")
end
end)
control + p で、とりあえず、 Alacritty の表示制御ができるようになりました。
でも、僕がやりたいのは、control の duble tap なんですよね。
ということで探しました。
一つの gist にたどり着きました。
https://gist.github.com/asmagill/c38f75fff9d9ef43d1226329fc1436e4
今回はこちらをちょっと修正して、
- alacritty = hs.application.find('alacritty')
- if alacritty ~= nil and alacritty:isFrontmost() then
- alacritty:hide()
- else
- hs.application.launchOrFocus("/Applications/Alacritty.app")
- local alacritty = hs.application.find('alacritty')
- alacritty.setFrontmost(alacritty)
- alacritty.activate(alacritty)
- end
+ ctrlDoublePress = require("ctrlDoublePress")
module.action = function()
- alert("You double tapped ctrl!")
+ alacritty = hs.application.find('alacritty')
+ if alacritty ~= nil and alacritty:isFrontmost() then
+ alacritty:hide()
+ else
+ hs.application.launchOrFocus("/Applications/Alacritty.app")
+ local alacritty = hs.application.open('alacritty')
+ alacritty.setFrontmost(alacritty)
+ alacritty.activate(alacritty)
+ end
end
これで control の2回入力で Alacritty が動くようになりました。
備考
書くまでもないですが、dotfiles 配下に dotfiles.sh
を用意して、
XDG_CONFIG_HOME=$HOME/.config
echo 'terminal'
if [[ ! -e $HOME/.hammerspoon/init.lua ]]; then
ln -s $PWD/hammerspoon/init.lua $HOME/.hammerspoon/init.lua
fi
if [[ ! -e $HOME/.hammerspoon/ctrlDoublePress.lua ]]; then
ln -s $PWD/hammerspoon/ctrlDoublePress.lua $HOME/.hammerspoon/ctrlDoublePress.lua
fi
if [[ ! -e $XDG_CONFIG_HOME/alacritty ]]; then
mkdir -p $XDG_CONFIG_HOME/alacritty
fi
if [[ ! -e $XDG_CONFIG_HOME/alacritty/alacritty.yml ]]; then
ln -s $PWD/alacritty/alacritty.yml $XDG_CONFIG_HOME/alacritty/alacritty.yml
fi
こんな感じのことをしてます。
mkdir をしている理由は
Alacritty は入れたら勝手に home にディレクトリを作るとかそういうリッチな機能はついt(ry
dotfiles の課題
課題1 新しい mac には git が入ってないんじゃないの??
新しい macbook には当然 git が入ってません。
ではどのように dotfiles を clone するのか。
否!
clone はしない!!
README.md に
``sh
curl -sf https://raw.githubusercontent.com/yasudanaoya/dotfiles/main/dotfile.sh | sh -s
``
<!-- Qiita で md のコードブロックの中に ``` コードブロックの記号を入れるとうまく動かないので、バッククォーツ2つにしてます。。。 -->
と記載しておきます。
あとはこれを terminal で実行するだけ。
これを思いついた時、流石に自分を天才だと思いました。
多分動くはず
その他の色々な課題
iTerm2 を卒業したことでタブ管理ができなくなった!!
tmux を入れることで解消!!!
editor の設定もなんとかしたい
VSCode が GitHub 連携できてなんかうまいこと言ってるので問題ない!!!
あと neovim も入れて、 vimrc もとい init.vim を dotfiles で管理してるので、問題ない!!!
なんか Big Sur にしてから brew-file が動かない!!!
動かないのでもう使わない!!!
知らん!!
$ brew bundle dump --force
これで動くからもういい!!!
brew-file の課題について
勢いだけですっ飛ばせない内容なので、ちょっと触れていきます。
元々 Brewfile の管理に僕は、 homebrew-file というアプリを使ってました。
homebrew-file は brew install/uninstall すると自動で Brewfile を編集してくれる便利な子だったのですが、
macOS のアップデートの影響で、どうやら mas の操作ができなくなっていることが影響です。
ちなみに mas とは、 AppStore のアプリを cli でインスコできるアプリです。
AppStore 経由なので、当然 apple ID でログインしないといけないのですが、そのログインができない issue が物凄い溜まってます。
mas にログインできないと何が困るかというと、homebrew-file が mas でインストールしたアプリの管理もできちゃうので、それがログイン情報がないので、コケる。って感じで負の連鎖が起こってます。
なので、一旦は使わない方針にしました。
終わりに
$ tree -L 2 -a
.
├── .gitconfig
├── .gitignore
├── .gitignore_global
├── .gitmodules
├── Brewfile
├── README.md
├── alacritty
│ └── alacritty.yml
├── dotfile.sh
├── hammerspoon
│ ├── ctrlDoublePress.lua
│ └── init.lua
├── images
│ └── wallpaper.jpeg
├── peco
│ └── config.json
├── settings.json
├── tmux
│ ├── installer.sh
│ └── tmux.conf
├── vim
│ ├── .vimrc
│ └── toml
└── zsh
├── .gitignore
├── .zcompdump
├── .zsh_history
├── .zsh_sessions
├── .zshenv
├── .zshrc
└── submodules
# 一部の `.git/` とかは取り除いてます。
大体こんな感じになってます。
結構いい感じに dotfiles が育ってきていて、
terminal の設定や、hotkey までもが dotfiles で管理できて幸せって感じです。
これでいつでも新しい macbook を買えるね!!
終わり!