tmux に Powerline を導入する

tmux のステータスラインをいい感じにしたくて色々といじっていましたが、Powerline を導入することで簡単にいい感じになりそうだったので導入してみました。
Powerline とは Python で書かれた Vim のステータスラインをいい感じにするものでしたが、tmux をはじめ他でも使えるようになったもののようです。
過去には tmux-powerline というものもありましたが非推奨となっており、現在は Powerline を使うようですね。
検索すると両者が混ざっている感じでちょっと混乱しましたので、インストールについて軽くまとめます。

インストール

Python のパッケージ管理ツール pip で簡単にインストール出来ます。

pip install powerline-status

なお、CPU のステータスを取るために以下のインストールも行います。
更にインストール後に再起動が必要でした。

pip install psutil

tmux の設定

tmux の設定ファイル ~/.tmux.conf に設定を書いていきますが、まずはファイルの居場所を以下で特定します。

pip show powerline-status | grep Location

ここで表示されたパスに /powerline/bindings/tmux/powerline.conf を足してあげて source で読み込んであげます。
私の環境では /opt/homebrew/lib/python3.11/site-packages でしたので以下のようになります。

source "/opt/homebrew/lib/python3.11/site-packages/powerline/bindings/tmux/powerline.conf"
run-shell "powerline-daemon -q"
set-option -g status-left-length 130
set-option -g status-right-length 60

ステータスに表示するものが多い場合は適宜 status-left-lengthstatus-right-length を調整してみて下さい。
なお、私の環境では元々以下のように色指定をしていましたが、Powerline で表示されるものと食い違って変な感じになってしまったので削除しています。

set-option -g status-fg white
set-option -g status-bg blue

ステータスラインのカスタマイズ

~/.config/powerline 以下に設定ファイルを配置してカスタマイズします。
こちらをまるまる参考にして設定しました。

天気が表示されない

標準で現在の天気を表示する機能がありますが、IP アドレスから地域を特定するサービスも終了、Yahoo! の天気 API も終了とことごとく終了していて機能しないようです。
調べてみたところ、powerline-owmweather という OpenWeather の無料 API を利用するものが使えましたのでこちらを設定します。

pip install powerline-owmweather

API を使うためには登録が必要ですが、無料で作れるので登録します。
API 用のキーが発行されますのでそれを設定に書いてあげます。
また、前述のように IP アドレスから地域を特定するサービスが終了しておりこちらも地域の自動判別に失敗しますので、"都市名, 国の2文字コード" を渡してあげる必要があります。

設定例

説明だけだと分かりにくいので、.config/powerline/themes/tmux/tmux-theme.json に設定したものを以下に置いておきます。
ご参考まで。

{
    "segments": {
        "right": [
            {
                "function": "powerline.segments.common.sys.cpu_load_percent",
                "before": "CPU: ",
                "priority": 50
            },
            {
                "function": "powerline.segments.common.bat.battery",
                "priority": 100
            },
	    {
		"function": "powerline_owmweather.weather",
		"args": {
		    "openweathermap_api_key": "(YOUR_API_KEY)",
		    "location_query": "tokyo, JP",
		    "show": "condition, temp",
		    "pre_temp": "  "

		},
                "priority": 50
	    },
            {
                "function": "powerline.segments.common.time.date",
                "args": {
                  "format": "%Y/%m/%d(%a)"
                },
                "priority": 10
            },
            {
                "function": "powerline.segments.common.time.date",
                "args": {
                    "format": "%H:%M",
                    "istime": true
                },
                "priority": 10
            }
        ]
    }
}

Powerline 対応のフォントが必要

Powerline では特殊な記号などを使っているので、Powerline 対応のフォントが必要です。
いろいろありますが、今回は Cica というフォントを導入してみました。
「ダウンロード」から zip をダウンロードしてきてインストールします。

まとめ

tmux のステータスラインは手動で設定するとなかなか骨の折れる作業ですが、Powerline によって簡単に格好良くなるので良いですね。

technical

Posted by yokky