Hyperの壁紙をCLIから変更する


WindowsでHyperを使っていますが、わりと頻繁にターミナルの壁紙を変えたくなるので、CLIから移動せず(直接設定ファイルを弄らず)に変更できるようにしました。

今のところ問題は起きてませんがWSL内からWSL外のファイルを書き換えるので自己責任でお願いします。

方法

シェルスクリプトでローカルの画像ファイルを選択し、Hyperの設定ファイル .hyper.js を sed で置換するだけ。

準備

CSSの設定

そもそも背景画像が設定されていなければどうしようもないので、.hyper.js 内で設定しておく。
.terms_terms クラスに設定するといいみたいです。

【参考】実際に使っている設定

交換する壁紙の用意

どこでもいいですがサブディレクトリまでは見れないので一階層にまとめておいてください。

パスの設定

スクリプト内の以下の定数を環境に合わせて設定します。
パスはWindows形式で入力してください(/mnt/c/... とか C:/... は🙅)。

#!/usr/bin/env bash

WALLPAPER_DIR='C:\wsl\wallpaper\'
HYPER_CONFIG='C:\Users\example\AppData\Roaming\Hyper\.hyper.js'

PATH_JS=$(echo ${WALLPAPER_DIR} | sed -e "s,\\\,/,g")
PS3="Select number> "

select FILE in `\ls $(wslpath ${WALLPAPER_DIR}) | grep "^.*\.\(png\|jpe\?g\)$"` exit
do
    if [ "${FILE}" = "exit" ]; then break; fi
    sed -i -E "s,${PATH_JS}.*\"\)",${PATH_JS}${FILE:-default.png}\"\)"," $(wslpath ${HYPER_CONFIG}) 
done

動作

実行するとファイル一覧が表示されるので、対応する数字を入力すると、壁紙がその画像に切り替わります。
終了するときは最後の選択肢として表示される"exit"の番号を入力するか、C-cを入力してください。

デフォルトでは以下の仕様です。

まとめ

シェルスクリプトはたのしい

おわり

補遺

シバンにBashを指定しているのは、Zshの select に不具合があるためです。

zshのselect文で文字化け(未解決) - 何にしても生っかじりの朴念仁

別にしょーもないバグですけどこれってちゃんとIssue立ってるんですかね?謎です。

参考