Kawaii Terminal


ターミナルを可愛く便利にしてストレスレス

ある日、後輩が特殊フォントまで入れてターミナルをかっこよくクールにカスタマイズしているのをみて、私もやってみたくなりました
わたしも先輩としてのプライドがあります。その辺のちょっとしたプラグインに負けたくないのでフルスクラッチです。

今回作成したファイルとプログラムをgitにあげました

kawaii-term

今回実装した機能一覧

  • 任意の文字列の表示
  • 空きメモリの表示
  • CPU使用率
  • Diskの使用状況
  • 天気の表示
  • 一部のコマンドのオーバーライド[1]
  • ビッグデータ用のコマンド[2]

動作を確認しているOS

  • Ubuntu Linux (zesty, x86_64, armhf, arm64)
  • Debian Linux (sid, armhf, arm64)
  • Arch Linux (x86_64)

Requrements

python3が以下のパスに通っている必要があります

$ which python3
/usr/bin/python3

Ubuntu Linux, Debian Linuxでは以下のようにインストールしてください  

$ sudo apt install python3

curlもインストールされている必要があります  

$ which curl
/usr/bin/curl

Ubuntu Linux, Debian Linuxでは以下のようにインストールしてください  

$ sudo apt install curl

Install

HOMEディレクトリにこのプロジェクトをgit cloneで配置する必要があります  

$ git clone https://github.com/GINK03/kawaii-term

template.bashrcを~/.bashrcに追加します(アップデート時は計算時間が無駄にならないように適切に、重複等を消すなどして、軽くしてください)

$ cd kawaii-term
$ cat templte.bashrc  >> ~/.bashrc

画面イメージ

図1. ログイン時にスプラッシュでアスキーアートが流れます

template.bashrcのPS1というところを編集することで、ターミナルのテキストや詳細は変更できますが、デフォルトではこのような感じです




図2. 項目の入れ替えはPS1を編集することで行えます

標準コマンドのオーバーライド

いくつかのコマンドにて、機能を上書きしたり、追加したりして任意の動作をさせています
 
- ls (l -CFにエイリアスされています)
- clear
- explosion

ls

lだけで入力できるようにしています  

$ l
はわわ〜〜〜!💦
22/  cuda/  go/  keras-skip-though-vector/  metas/  td2.pem   テンプレート/  ビデオ/  公開/
NVIDIA_CUDA-8.0_Samples/  cudnn-8.0-linux-x64-v5.1.tgz  go1.8.3.linux-amd64.tar.gz  keras-unstructured-data  minimize.zip  v/
aws/  examples.desktop  kawaii-term/  kotlin-headlessbrowser-selenium-jsoup-parser/  sdb/

clear

clearはバッファがおかしくなった時にリセットをしますが、上の方にカーソルが行ってしまい、視線を動かす必要があるので、アスキーアートを前方に投入することで、カーソルの場所の調整を行います

$ clear

図3. clearを押すと、比較的大きなAAが表示され、結果としてカーソルが下の方にくる

explosion(ex)

ビッグデータなどを扱い、大きなデータセットを消そうとすると、rmコマンドでは消せません  
そこでexplosionという長めのコマンドで、警告なしで、OSがファイルとして認識できるのであれば、問題なく消せるコマンドを新たに追加します
(無警告なので、注意してください)

$ explosion target/*

めぐみんというキャラクタのAAをみることができます




図4. めぐみん

terminal中の天気に関して

openweathermap.orgの無料プランを用いています

サンプルに私のAPIキーがバンドルされていますが、無料で利用できるので、適切にご自身のAPIキーに書き換えてください(私がバンされてしまいます)

kawaii-term/weather.pyを編集して、中のAPIキーを変えてください

また、お住いの都市にURLを書き換えてご利用ください

これを、 

  raw = os.popen('curl -s "http://api.openweathermap.org/data/2.5/weather?q=Tokoy,jp&appid=1e240e732347c23472274dc188cd39d6"').read()

このようにします

  raw = os.popen('curl -s "http://api.openweathermap.org/data/2.5/weather?q=${YOUR_CITY}&appid=${YOUT_API}"').read()

左のプロンプトと右のプロンプトの幅について

自動で幅を計算してたのですが、tmux経由で使用すると微妙にずれるので、ハードコードしました  

お使いのディスプレイによっては適切に表示されないかもしれません  

template.bashrcの$YOUR_WIDTHを任意の値にしてみてください  

RIGHT_PRONPT() {
  # パディング幅を%*s ${COLUMNS}で指定できるが、tmux経由だと、よく破綻しているので、ハードコードでもいいかもしれない
  printf "%*s" {{$YOUR_WIDTH}} "$(tput setaf 199)$(tput bold)$(CPU_USAGE)$(tput sgr0) $(tput setaf 2)$(DISK_USAGE) $(tput setaf 123)[TENKI:$(GET_WEATHER)]$(tput sgr0)"
}

アスキーアートの差し替えや追加

asciiartsのディレクトリの中にcatでアスキーアートになっているようなファイルを追加 or 変更していただければOKです

ライセンス

WTFPL (Do What The Fuck You Want To Public License)

いろんな人からプルリク送ってもらえるというお言葉、いただきました。ちょくちょくアップデートすると思いますが、よろしくお願いします