今年の冬は本当に暖冬で、今から今年の夏が心配です。水不足的な意味で。

時事ネタは置いといて、最近デスクトップのbarをpolybarからi3blockに移行したので、なんで移行したのかとかを書いておこうかと思います。

i3blocks

i3blocksは、その説明にあるとおり、text-baseなstatus barです。polybarもだいたい同じような感じですね。これらの違いを個人的にあげてみます。

i3blocksは、組み込みmoduleとかがほぼない代わりに、moduleから返された結果を表示するだけ、というシンプルな形式に割り切っています。そのため、複雑化しやすい(個人の意見です)polybarよりも設定ファイルがシンプルになります。

polybarから乗り換えた理由

polybarは、その組み込みmoduleが多いことも相まって、コンパイル時の依存が多いです。出来るだけ依存を少なくしたいのと、利用しないmoduleが多かったというのもあり、他のstatus barを検討していました。

i3blocksは1.4まではデフォルトでmoduleを用意していましたが、1.5で大きく変更され、i3blocks本体は最小限で、moduleは全てi3blocks-contribに分割されています。(blockletと読んでいるようです)。このため、必要なものを自分でさっくり作るなり、必要なscriptだけを取得するとかが簡単です。

また、色とかもmodule内で出力することで個別に変更できるため、別ファイルにまとめておいて読み出す、とかもできます。configにまとめるのとどっちがいいか、というのはありますが・・・。

i3blocksの設定

color=#8fa1b3

[title]
command=~/.config/i3blocks/scripts/title.sh
interval=persist

[uptime]
label=
command=uptime | sed 's/.*up \([^,]*\),.*/\1/'
interval=60

[memory]
label=
command=~/.config/i3blocks/scripts/memory.sh
interval=1

[load average]
label=
command=echo "$(uptime | sed 's/.*load average: \(.*\)/\1/' | cut -d, -f1)/$(grep 'processor' /proc/cpuinfo | wc -l)"
interval=1

[date]
label=
command=echo " $(date '+%Y/%m/%d %H:%M(%a)')"
interval=1

[power]
label=
command=~/.config/i3blocks/scripts/power.sh
interval=persist

[separator]

実際に使っているconfigです。polybarと違い、各moduleの設定は同一で、違うのはcommandとかintervalの中身だけ、という統一感がいい感じです。

各command内は、シンプルにbash scriptを呼んでいるだけです。polybar同様、実行さえ出来ればPythonでもrubyでもなんでもOKです。

これからの課題

polybarの方が優れていたのが、電源周りのmoduleが用意されており、それが結構使い勝手が良かったことです。i3blocksは当然デフォルトでは用意されていないので、自分でいろいろやることになります。

interval=persist という設定を入れると、そのスクリプトを起動しっぱなしにしても大丈夫になるので、それを利用しています。一応動作はしているのですが、もうちょっとなんとかならんか・・・というところで止まっています。

デフォルトで用意されている(battery included)ことを拒絶した以上、自分で解決する必要があるのはそのとおりなので、もうちょっと試行錯誤してみようと思います。i3wmを利用している方は一回試してみると、また新しい何かが見えるかもしれませんよ?