Alacritty + tdrop + sxhkd + tmux で --drop-down な爆速ターミナルを構築する on Ubuntu 16.04

# 背景
GPU-accelerated な爆速ターミナルとして知られる Alacritty．
Guake や xfce4-terminal --drop-down などのようにいつでもワンタッチで出し入れできたら便利だと思いませんか？

# 環境
Ubuntu 16.04を使っています．古くてすみません．Ubuntu 18.04や20.04でも動作するかもしれませんが，当方で確認はしていません．自己責任で検証してみてください．

# Alacritty とは

[Alacritty](https://github.com/alacritty/alacritty) は Rust 製のターミナルエミュレータ．GPU を利用した高速なレンダリングがウリという文句はググれば死ぬほど出てきます．僕にとっては，Vim でのシンタックスハイライトが遅く困り果てていたところに現れた救世主でした．Vim は CUI のエディタなので，ターミナルのハックでもってエディタ環境を無限にカスタマイズできちゃうところも良いですよね．  
Vim とはキーボード上で操作を完結するためにエンジニアが作り上げた至高のエディタです．Google で「vim meme」で検索すると，人々が Vim 沼から抜け出せなくなる様子を表した画像がたくさん出てきますよ！！……と，話が逸れました．Alacritty の話でしたね．Vimmer でなくてももちろん Alacritty の恩恵にあずかることができますので，是非お試しあれ．

とはいえ，Alacritty 以外にも様々なターミナルエミュレータが存在し，それぞれに個性があります．ドロップダウンできるもの，画面を分割できるもの，タブを作成できるもの，動作が軽量なもの．一長一短，ユーザーの好みが表れるところとも思います．が，エンジニアたるもの，不便なところは自分の技術で補完すべし！という心意気を携えたエンジニア…を友人に持つデータサイエンティストですので，彼を見習いその全てを実現したいと思うのです．好きな芸人はパンクブーブーです．

# コンポーネント
tmux 以外を使うのは今回が初めてで詳しくは知らないので，簡単に紹介します．
- [tdrop](https://github.com/noctuid/tdrop)
簡単に言えば，ターミナルエミュレータを出したり消したりできるアプリケーションです．既に生成されたターミナルエミュレータを操作するだけでなく，そのプロセスをキルしてしまっても新しく生成してくれます．`いつでもワンタッチで出し入れできたら便利だと思いませんか？`の「出し入れ」の部分を担っています．
- [sxhkd](https://github.com/baskerville/sxhkd)
好きなコマンドに好きなホットキーを割り当てられるアプリケーションです．`いつでもワンタッチで出し入れできたら便利だと思いませんか？`の「いつでもワンタッチで」の部分を担っており，柔軟な設定が可能です．
- [tmux](https://github.com/tmux/tmux)
みんな大好きなターミナルマルチプレクサ．一つのターミナルエミュレータの中で，ウィンドウを分割したり，タブに相当するものを生成したり，バックグラウンドで実行させてみたりと，オールラウンダーです．~~Vim との相性も……~~

これらを組み合わせることで，ドロップダウンでき，画面も分割可能で，自由度の高いタブも使え，それでいて動作が軽量な，夢のような環境を実現できます．

# 環境構築
## Alacritty のセットアップ
[公式のインストラクション](https://github.com/alacritty/alacritty/blob/master/INSTALL.md)に従ってインストールしましょう．インストールが完了したら，カッコよく見えるように少しだけ設定をいじります．

```yaml:~/.config/alacritty/alacritty.yml
window:
    decorations: none
    opacity: 0.9
```

タイトルバーなどの装飾が消え，透過表示になりイイ感じです（下部の画像をご覧ください）．
[Terminalの見た目を維持してAlacrittyを導入したよ](https://qiita.com/hsawaji/items/5d0ee41be1f628811e6e)を参考に，フォントやカラースキームを変えても良いかもしれません．フォントは SauceCodePro Nerd Font Mono を，カラースキームは Solarized Dark を設定しました．

## tdrop のセットアップ
[リポジトリ](https://github.com/noctuid/tdrop)を`git clone`して，tdrop ディレクトリ下で`sudo make` & `sudo make install` で一発です．

## sxhkd のセットアップ
私の環境では apt ではインストールが不可能でしたので，[Launchpad のページ](https://launchpad.net/ubuntu/bionic/amd64/sxhkd/0.5.8-1)から sxhkd_0.5.8-1_amd64.deb をダウンロードして`dpkg -i sxhkd_0.5.8-1_amd64.deb`しました．

次に，ホットキーと tdrop による Alacritty の開閉とを紐付けるため，config を設定します．

```:~/.config/sxhkd/sxhkdrc
F12
    tdrop -w -10 -h -37 -x 5 -y 32 -s tmux alacritty
```
tdrop の設定の詳細は公式 Github ページに譲ります．上の例を簡単に説明すると，
- `F12`：対応させたいホットキー
- `-w`, `-h`：幅，高さを指定ピクセル分だけ増減します．％ 表記も可能ですが，その際は`-m`をつけるとモニタサイズに応じて柔軟にサイズを変えてくれるようです．
- `-x`, `-y`：縦横のオフセットを指定ピクセル分だけ設定します．
- `-s tmux`：起動時に，tmux の新規セッションを自動でアタッチしてくれます．
上の数値は，私のディスプレイで上下に5ピクセルのマージンをもたせるための数値です．
ホットキーの設定については Github で[いい感じの dotfiles](https://github.com/dtch-/dotfiles/blob/master/config/sxhkd/sxhkdrc) を見つけてくるのも手でしょう．

## tmux のセットアップ
apt で入るよ！

# 実行

ターミナルで`sxhkd`を実行するだけです．スタートアップに登録しておくのが便利だと思います．
登録したホットキーを押下すると，[DistroTubeさんの動画](https://www.youtube.com/watch?v=PZPMvTvUf1Y&t=708s)で見たようなスマートな CUI が現れます！
![Screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213042/94dec3ca-6064-51f5-27a7-dbc36cf8083a.png)

# まとめ
Ubuntu で 高速ターミナルエミュレータ Alacritty をドロップダウン化し，いつでもワンタッチで出し入れできる環境を構築しました．表題のコンポーネントを組み合わせているだけですが，備忘として残します．
個人的には tmux のペインや Vim のウィンドウの境界線が透明化できるとカッコいいなと思っているので，方法ご存知のかたはご教示くださいませ．