概要
HyprlandでWaybarを使用しています。デスクトップ環境が整ってくると、PCの内部情報だけでなく、日常的に使う外部のデータも表示したくなってきますよね。今回は、デスクトップに天気予報を表示させてみます。天気予報を表示するHyprland向けのアドオンや専用スクリプトはいくつか存在しますが、「既成のツールを増やすより、シンプルな単機能ツールを組み合わせて実現したい」と思い、curlとWaybarの基本機能だけで完結する仕組みを作りました。
実現方法
- ターミナルから1行で天気を取得できるAPI
wttr.inを利用する - Waybarの
customモジュール(exec)を使って定期的に(1時間に1回)curlを叩く - 取得したテキストデータをそのままステータスバーへ流し込む
wttr.inとは?
wttr.in は、curl コマンドだけでリッチな天気予報を表示できる非常に便利なWebサービス(API)です。chubin/wttr.in: ⛅ The right way to check the weather 試しに、ターミナルで以下のコマンドを実行してみてください。
curl wttr.in
端末のIPアドレスから現在地を自動判定し、以下のような美しいアスキーアートの天気予報が返ってきます。
Weather report: 35.690000,139.690000
\ / Partly cloudy
_ /"".-. +27(29) °C
\_( ). ↘ 11 km/h
/(___(__) 10 km
0.0 mm
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Fri 29 May ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ _`/"".-. Patchy rain ne…│ \ / Partly Cloudy │ _`/"".-. Patchy rain ne…│ _`/"".-. Patchy rain ne…│
│ ,\_( ). +27(28) °C │ _ /"".-. +29(28) °C │ ,\_( ). +23(25) °C │ ,\_( ). +22(25) °C │
│ /(___(__) ↘ 23-29 km/h │ \_( ). ↘ 24-32 km/h │ /(___(__) ← 16-21 km/h │ /(___(__) ← 9-12 km/h │
│ ‘ ‘ ‘ ‘ 10 km │ /(___(__) 10 km │ ‘ ‘ ‘ ‘ 10 km │ ‘ ‘ ‘ ‘ 10 km │
│ ‘ ‘ ‘ ‘ 0.0 mm | 81% │ 0.0 mm | 0% │ ‘ ‘ ‘ ‘ 0.0 mm | 85% │ ‘ ‘ ‘ ‘ 0.0 mm | 85% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sat 30 May ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Sunny │ \ / Sunny │ \ / Sunny │ \ / Clear │
│ .-. +24(25) °C │ .-. 27 °C │ .-. +25(26) °C │ .-. +23(25) °C │
│ ― ( ) ― ↑ 11-13 km/h │ ― ( ) ― ↑ 18-20 km/h │ ― ( ) ― ↑ 24-31 km/h │ ― ( ) ― ↑ 21-30 km/h │
│ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │
│ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Sun 31 May ├───────────────────────┬──────────────────────────────┐
│ Morning │ Noon └──────┬──────┘ Evening │ Night │
├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤
│ \ / Sunny │ \ / Sunny │ \ / Sunny │ \ / Clear │
│ .-. +25(26) °C │ .-. +29(27) °C │ .-. 27 °C │ .-. +25(26) °C │
│ ― ( ) ― ↙ 7-9 km/h │ ― ( ) ― ↖ 9-11 km/h │ ― ( ) ― ↑ 23-30 km/h │ ― ( ) ― ↑ 14-21 km/h │
│ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │ `-’ 10 km │
│ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │ / \ 0.0 mm | 0% │
└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘
Location: 水の広場, 西新宿二丁目, 新宿区, 東京都 160-0023, 日本 [35.6901916,139.6900375]
Follow @igor_chubin for wttr.in updates
欲しい情報だけをフォーマット指定して抜き出す
Waybarのような1行のステータスバーに表示するため、wttr.in には出力をカスタムできるフォーマットオプションが用意されています。
curl -s 'https://wttr.in/tokyo?format=%c_%C_%x_%h_%t_%f_%w_%l_%m_%M_%p_%P_%e_%u'
# 出力例: ☀️ _Sunny_o_84%_+22°C_+25°C_→45km/h_tokyo_🌔_13_0.0mm_997hPa_%e_2
Waybarで使うために、利用可能なフォーマットと設定時の補足説明を一覧にまとめました。
| Format | Description | Sample | 補足説明 |
|---|---|---|---|
c |
Weather condition | 🌦 | 天気アイコン(絵文字) |
C |
Weather condition textual name | Light rain | 天気名のテキスト |
x |
Weather condition, plain-text symbol | / | 天気予報記号(アスキーアート用) |
h |
Humidity | 70% | 湿度 |
t |
Temperature (Actual) | +11°C | 実際の気温(+ や - が必ず付く) |
f |
Temperature (Feels Like) | +11°C | 体感温度 |
w |
Wind | ↗4km/h | 風向・風速(↗ は南西の風) |
l |
Location | tokyo | 地域名 |
m |
Moon phase | 🌓 | 月の満ち欠け(絵文字) |
M |
Moon day | 7 | 月齢(0〜約29.5、0:新月, 約15:満月) |
p |
Precipitation (mm/3 hours) | 0.2mm | 過去3時間の降水量 |
P |
Pressure (hPa) | 1020hPa | 気圧 |
e |
Dew point | %e | 露点(一部地域では機能しない場合があり未確認) |
u |
UV index (1-12) | 1 | UV指数(紫外線強度) |
また、日の入りや夜明けなどの時間を詳細に取得したい場合は、以下のフォーマットを使使います。
curl -s 'https://wttr.in/tokyo?format=%D_%S_%z_%s_%d_%T_%Z'
# 出力例: 04:03:06_04:33:31_11:40:22_18:47:09_19:17:16_23:13:43+0900_Asia/Tokyo
| Format | Description | 出力例 | 意味 |
|---|---|---|---|
D |
Dawn | 05:13:04 | 夜明け(薄明の開始) |
S |
Sunrise | 05:40:06 | 日の出(太陽が地平線に現れる瞬間) |
z |
Zenith | 11:48:36 | 南中(太陽が最も高くなる時間) |
s |
Sunset | 17:57:30 | 日の入り(太陽が地平線に沈む瞬間) |
d |
Dusk | 18:24:35 | 日暮れ(黄昏時の終わり) |
T |
Current time | 12:08:07+0900 | 現地時間 |
Z |
Local timezone | Asia/Tokyo | タイムゾーン |
💡 各時間帯(薄明など)の厳密な定義については、The Different Types of Twilight, Dawn and Dusk が参考になる。
地域(Location)の指定方法
何も指定しない場合は接続元のIPアドレスから自動判定されますが、明示的に指定したい場合は、URLの末尾に都市名、エリアコード、あるいは緯度経度を渡すことで固定できます。詳細は wttr.in のヘルプ で確認できます。
Waybarへの組み込み
今回は1時間に1回、以下のフォーマットで東京(Tokyo)の天気を取得し、Waybarに表示させます。
curl -s 'https://wttr.in/tokyo?format=%c%t+%h+%p%w+%P%m'
# 出力例: ☀️ +22°C 84% 0.0mm→45km/h 997hPa🌔
config.jsonc の設定
Waybarの設定ファイル(通常は ~/.config/waybar/config.jsonc)に、カスタムモジュールを追加します。
// -*- mode: jsonc -*-
{
// ... 他の設定 ...
"modules-right": [
// ... 他のモジュール ...
"custom/weather"
],
"custom/weather": {
"format": "{}",
"tooltip": true,
"interval": 3600, // 1時間に1回更新(秒単位指定)
"exec": "curl -s 'https://wttr.in/tokyo?format=%c%t+%h+%p%w+%P%m'",
"return-type": "" // 単純なプレーンテキストを表示する場合は空文字でOK
}
}
💡
custom/*モジュールで使えるさらに詳細なオプション(JSONフォーマットでのツールチップ拡張など)については、Waybar Wiki - Module: Custom をご参照ください。
設定の再読み込み
書き換えが終わったら、以下のコマンドでWaybarを再起動して設定を反映します。
pkill waybar && waybar & disown
バーの上に現在の天気アイコンと気温、湿度などが綺麗に表示されれば成功です!
おわりに
重いデスクトップウィジェットを入れずとも、既存の Waybar と curl だけで完結するミニマルな環境が作れました。ミニマルが故、エラー周りは一切考慮していないですが…(例えば、PCがネットにつながっていなかったり、wttr.inが落ちていたりするとcurlのエラーがそのまま表示される)。「足りない機能があれば、Web上の小さなAPIとシェルを繋いでサクッと自作する」。これこそがLinuxデスクトップを運用するエンジニア最大の醍醐味だと感じています。
皆さんもぜひ、自分好みのフォーマットにカスタマイズしてみてください!