/home/amgsk

Hyprlandで役に立つウィンドウルール

· amgsk

TOC


Hyprlandはユーザーがウィンドウの挙動を細かく制御できる「ウィンドウルール」機能がある。
実際に役立つルールの例をいくつか紹介。

フローティング

よく使うユーティリティ系のアプリは float on で常にフローティングにしておくと使い勝手がいい。

rules.conf
windowrule = match:class guifetch, float on
windowrule = match:class yad, float on
windowrule = match:class zenity, float on
windowrule = match:class blueman-manager, float on
windowrule = match:class feh, float on
windowrule = match:class imv, float on
windowrule = match:class org.gnome.Loupe, float on

フローティング + サイズ調整 + センタリング

ダイアログ系のアプリはフローティングにするだけでなく、サイズと位置も合わせて指定するとキレイに表示できる。

rules.conf
windowrule = match:class foot match:title:nmtui, float on
windowrule = match:class foot match:title:nmtui, size 60% 70%
windowrule = match:class foot match:title:nmtui, center 1

windowrule = match:class org.gnome.Settings, float on
windowrule = match:class org.gnome.Settings, size 70% 80%
windowrule = match:class org.gnome.Settings, center 1

windowrule = match:class org.pulseaudio.pavucontrol, float on
windowrule = match:class org.pulseaudio.pavucontrol, size 60% 70%
windowrule = match:class org.pulseaudio.pavucontrol, center 1

ダイアログをタイトルで自動フローティング

ファイル選択ダイアログや保存ダイアログなどは、クラス名ではなくタイトルのパターンでマッチさせると幅広く対応できる。

rules.conf
windowrule = match:title (Select|Open)( a)? (File|Folder)(s)?, float on
windowrule = match:title File (Operation|Upload)( Progress)?, float on
windowrule = match:title .* Properties, float on
windowrule = match:title Save As, float on

スペシャルワークスペースへの自動割り当て

special: プレフィックスを持つワークスペースは「スクラッチパッド」として使える隠しワークスペース。 起動時から特定のワークスペースに割り当てておくと便利。

rules.conf
windowrule = match:class btop, workspace special:sysmon
windowrule = match:class Spotify, workspace special:music
windowrule = match:title Spotify, workspace special:music
windowrule = match:class discord, workspace special:communication
windowrule = match:class Todoist, workspace special:todo
windowrule = match:class Bitwarden, workspace special:bitwarden

JetBrains IDE のフォーカス問題を修正

JetBrains IDE はツールチップやタブのドラッグ中にフォーカスが奪われる問題がある。 タイトルのパターンで対象を絞り、フォーカスを無効化することで回避できる。

rules.conf
# ツールチップ (タイトルが win.<id> の形式)
windowrule = match:class ^(.*jetbrains.*)$ title:^(win.*)$, no_initial_focus on
windowrule = match:class ^(.*jetbrains.*)$ title:^(win.*)$, no_focus on

# タブドラッグ中のウィンドウ (タイトルが半角スペース1文字)
windowrule = match:class ^(.*jetbrains.*)$ title:^\\s$, no_initial_focus on
windowrule = match:class ^(.*jetbrains.*)$ title:^\\s$, no_focus on

JetBrains IDE のフォーカス問題については、以下の記事も参考に。

amgsk.dev | 小ネタ WaylandでJetbrains製のエディタを使用する
チラツキの解決方法は`-Dawt.toolkit.name=WLToolkit`を設定するとよい
/posts/wayland-on-jetbrains-ide/

ピクチャーインピクチャー (PiP)

PiP ウィンドウはフローティング + ピン留めにして、常に最前面に表示させる。
move で初期位置を画面右下に指定しておくと邪魔にならない。

rules.conf
windowrule = match:title Picture(-| )in(-| )[Pp]icture, float on
windowrule = match:title Picture(-| )in(-| )[Pp]icture, pin on
windowrule = match:title Picture(-| )in(-| )[Pp]icture, move 100%-w-2% 100%-w-3%

ピン留めウィンドウの視覚的区別

pin on で常に最前面に固定したウィンドウは、見た目で区別できると便利。 ボーダーカラーを変えてひと目でわかるようにする。
ついでに、ボーダーサイズを大きくして、半透明にしておくとさらにわかりやすい。

rules.conf
windowrule = match:pin 1, border_color rgba(ff1493AA) rgba(ff1493AA) rgba(ff1493AA)
windowrule = match:pin 1, border_size 3
windowrule = match:pin 1, opacity 0.9 override

Steam ゲームの設定

Steam ゲームにはティアリング許可とアイドル抑止を設定しておく。
immediate on でティアリングを許可すると入力遅延が下がり、idle_inhibit always でスクリーンセーバーが起動しなくなる。

rules.conf
windowrule = match:class steam_app_[0-9]+, immediate on
windowrule = match:class steam_app_[0-9]+, idle_inhibit always

Google Chrome

Google Chrome はフルスクリーンにするとタブバーも消えてしまう。 フルスクリーン時もタブバーを表示するには、fullscreen_state 0 でフルスクリーン状態でもタブバーを表示させることができる。

rules.conf
windowrule = match:class google-chrome, fullscreen_state 0 0

EOF