読者です 読者をやめる 読者になる 読者になる

やっぱつらいのでやってもらを.- iTerm2 編

tech macos app settings vim zsh shell iterm2

は?もしかしてシリーズ化とかイキッてるの?,と睨まれても仕方ない感じですが,ホントそんなことありません,の(笑,またまた os のクリーン再インストールに端を発したイベントの話.*1

iTerm2

実はインストールは homebrewcask で楽できてはいたのですが,設定の方は相変わらず手作業でした.

これが結構煩わしいもので,いつも,ついつい後回しにしてしまう.

そして忘れた頃に必要になって起動した時,悲しい思いをし,結局手で設定をする.でも,やっぱり面倒なのには変わりなく,尚且つさっさと取掛りたいからヤッツケな設定で切り抜ける.

で,また放置...

そんなのを性懲りもなく繰り返してました.

いけません.

iTerm2 Logo

これを断ちたいと思います.



とゆことで,iTerm2 の設定も shellscript で自動化

# 作業用
readonly DIR_TEMP="${HOME}/temp"
[ ! -e ${DIR_TEMP} ] && mkdir ${DIR_TEMP}

# クリア
if [ -e ${HOME}/Library/com.googlecode.iterm2.plist ]; then
  mv ${HOME}/Library/com.googlecode.iterm2.plist \
    ${DIR_TEMP}/com.googlecode.iterm2.plist.$(date '+%Y%m%d%H%M')
fi

# 設定
url_is="https://gist.githubusercontent.com/woowee/9efd41d68bca10363d2083902ebc2f43/raw/d307b0261ec954063e2132d7beef4917a43e6f2d/com.googlecode.iterm2.xml"
## ダンロード plist
curl "${url_is}" \
  -o "${DIR_TEMP}/$(basename $url_is)"
## フォーマット変換
plutil -convert xml1 ${DIR_TEMP}/com.googlecode.iterm2.xml \
  -o ${DIR_TEMP}/com.googlecode.iterm2.plist
## 持ってく
cp -f ${DIR_TEMP}/com.googlecode.iterm2.plist \
  ${HOME}/Library/Preferences/

# 反映
defaults read com.googlecode.iterm2 >/dev/null

やっていることは,gist に置いてる xml 形式の plist を引っ張ってきて,それを元々あったオリジナルの plit と差し替えてやる,というだけ.

結構原始的(笑

したがって,これには準備が必要です.

準備1. まず初めに,一旦 iTerm2 のすべての設定を施す必要があります.手作業です(笑

「結局,手でやんなくちゃだめなんじゃん...」と突っ込まれるかもしれませんが,最初の一度だけキチンと設定をしておけば,その後は使いまわすだけなので,ここでは良しとしています.

準備2. その plist を適当な場所で管理します.

ここでは Gist を使うことにしました.

これは個々お好きなサービスやストレージ等を使うで良いと思います.

さらに Gist に置いているモノを見ればお分かりになるよう,plist ファイルは xml 形式にしてます.

これはエディタ上でも編集できるようにしたいとの考えからで,そんなことしないで plist ファイルを変換などせずに直接置いて管理しても良いと思います.

問題

設定をスマートに反映させるいい方法って無いのかしら。

killall cfprefsd も効かないようですし、何か killall iTerm って言ってる人いたけど、それって違うような気がするんだよなあ。

設定の方法は他にもある(みたい)よ

まず...

defaults コマンドや PlistBuddy ツールを使う

一番最初に思い描いていた方法はコレだったりします.

そしてコレが本当にやりたい方法でもあったりします.

また以前はこの方法を使っていたのですが,作業が結構大変なのと,設定の出来/不出来がちょっと不安定だったのでコメントにした過去があったりします.

ちなみに,コレすごい.;

» dotfiles/iterm2.sh at master · rafeca/dotfiles · GitHub

実際に試してはいないですが.

是非,今後の参考にさせてい頂こうと言うことでマーク.

[Load preferences from a custom folder or URL] 使う

iTerm2 の環境設定の [General > Preferences > Load preferences from a custom folder or URL] の機能を利用する.

この項目に指定した場所へ plist を置いておけば,ラベルの通りロードしてくれるっぽいです.

と言うことで,;

readonly DIR_TEMP="${HOME}/temp"
[ ! -e ${DIR_TEMP} ] && mkdir -p ${DIR_TEMP}
readonly DIR_CONF="${HOME}/.config/iterm2"
[ ! -e ${DIR_CONF} ] && mkdir ${DIR_CONF}

# 設定
url_is="https://gist.githubusercontent.com/woowee/9efd41d68bca10363d2083902ebc2f43/raw/d307b0261ec954063e2132d7beef4917a43e6f2d/com.googlecode.iterm2.xml"
curl "${url_is}" \
  -o "${DIR_TEMP}/$(basename $url_is)"
plutil -convert xml1 ${DIR_TEMP}/com.googlecode.iterm2.xml \
  -o ${DIR_CONF}/com.googlecode.iterm2.plist

defaults write com.googlecode.iterm2 "LoadPrefsFromCustomFolder" -bool true
defaults write com.googlecode.iterm2 "PrefsCustomFolder" -string ${DIR_CONF}

とすると,良いのかな?

ん?この方がスマートかも?(笑

Dynamic Profiles ?

こんな Issue を目にして知った機能なのですが.;

» Automatically load newly imported color preset (#5113) · Issues · George Nachman/iterm2 · GitLab

defaultsPlistBuddy 使って iTerm2 の設定をしているんだけど,うまく設定をロードしてくれないんだよね」って言う話のようで,まさにここでやろうとしていることと同じ話です.

そしてこれに対して,おそらく開発者自身だと思うのですが,「Dynamic Profiles ってえの知ってる? そんなあなたにピッタリだよ」なリプライ.

見てみたんですが,良く分かんなくて(笑,しかもなぁんかちょっと違うような気がして,今はまだ試してませんが.

貼っとこ。;

» Version 3 - iTerm2 - macOS Terminal Replacement
» Dynamic Profiles - Documentation - iTerm2 - macOS Terminal Replacement

ま,そのうち.

はいおしまい.

*1:しつこいな.