Niriとは
Hyprlandと同じようにWaylandのコンポジターの一つです。コンポジターとはなんぞやと言う説明は別で個人的に検索してもらうとしてウィンドウマネージャだと思ってもらえたら正確ではないにしろ間違ってはいないと思います。
操作感や考え方のようなものはHyprlandと同じとも思えますが、大きく異なるのは無限に横にスクロールするようにウィンドウを開けば右に追加されていく所です。さらにワークスペースは縦に作られ縦横無尽に広がる画面をスクロールで切り替えて操作できるため、scrollable-tiling Wayland compositor(スクロール可能なタイル型のWayland用のコンポジター)と呼ばれます。
開いたウィンドウの順序が変えられるのはHyprlandと同じですが、やや違うのは選んだウィンドウが左右に移動しているのか、それ以外が左右に移動しているのかは定かではないものの、Super + Shift + (←/→)で移動させると横に他に開いているウィンドウがスクロールします。
横に広がるワークスペースですからSuper + Cでアクティブなウィンドウを画面のセンターにすることもできます。これはHyprlandではできませんでした。設定すればフローティングウィンドウとしてできるのですが、ワークスペースをタイル状に埋めていくHyprlandはフロートさせたウィンドウを従来のスタッキング型のようにして作業もできますがやはりワークスペースを切り替える方が主体となるでしょう。しかしNiriでは切り替えずともフルサイズにしたウィンドウの横に別のウィンドウが並びます。
ワークスペースは動的に新しく縦に作られます。それらの操作はHyprlandとほぼ同じです。これは逆にウィンドウを開きすぎてメモリを消費してしまう元にもなるのでどちらが良いかというのはなかなか評価が難しい所です。
個人的には、Super + [あるいはSuper + ]でウィンドウをまとめられるのは良いと思いました。Cosmicでもスタック((Windowsのような重なっていくウィンドウ管理))して表示している時に、Super + Yだったかでタイル状にまとめる機能があります。これが便利かどうかは使い方にもかなりよりますが、スタックするウィンドウの奥にあるウィンドウを探すのに上に重なっているものをどけてちょっと見えたらクリックしてアクティブにさせると言うのが個人的にはそれどうなん?と思うわけです。
Hyprlandに慣れているとその設定はややわかりにくい事もありますが、Wikiが充実しているので英語ではあるもののかなり細かく設定できるでしょうし、元々の設定ファイルがよくできているので多くを設定することはありません。あくまでDank Shellを適用したらの話ではあるのですけども。
CachyOSデフォルトのNiriはありますが触ったことはありません。ハイパランドよりは設定されているようですがやはり基本機能の設定だけで便利に使えるわけではないのでHyprlandにもNiriにもできるDankMaterialShellは使い勝手が良いかと。
念の為DankMaterialShellのインストールスクリプトのおさらい
curl -fsSL https://install.danklinux.com | sh
これをターミナルから実行して、Niriを選択してアカウントのパスワードを1度だけ入れる所があります。後は待つだけです。もしかするとターミナルを何にするかなどを問われるかもしれませんがなんでも良いです。
DankMaterialShellはHyprlandもNiriも同じUIです。DankMaterialShell自体の設定は同じですからいずれかで触っておけばどちせも同じようにあるいはカスタマイズして違った見た目にもできます。
DankMaterialShellはCachyOSのデフォルトのキーバインドと異なりますし、独自に設定されています。なので最初からNiriを選んでインストールする必要はありません。むしろソフト的にはGnomeなどを選んでおいた方が良いかもしれません。
fishの設定
~/.config/niri/config.kdlをテキストエディターで編集します。下の方ですが、
binds {
# === Application Launchers ===
}
とある中に、
Mod+T hotkey-overlay-title="Open Terminal" {spawn "ghostty"}
とある部分を、
Mod+T hotkey-overlay-title="Open Terminal" {spawn "ghostty" "-e" "/usr/bin/fish";}
と直すだけです。これでターミナルのghosttyがFishインタラクティブモードで起動します。他のシェルを使用する場合は前述のリンクからそれぞれのやり方を参照してください。
最初の設定
まずはHyprlandと同様にディスプレイが拡大されて表示されていると思うので、wikiを参考にして、自身の使用しているディスプレイの設定をします。
output "eDP-1" {
mode "1920x1080@60.00"
scale 1.0
}
などと書きます。使用するディスプレイが複数あるのであれば複数設定します。
次にInputの設定をして日本語配列のキーボードが使用できるようにします。
input {
keyboard {
xkb {
layout "jp"
}
numlock
}
touchpad {
tap
nanural-scroll
}
}
などと修正します。touchpadは物理ボタンは使えますが、パッドをタップしても何の反応もないのでタップしてクリックが行えるようにします。ナチュラルスクロールが不要であれば書かないか先頭に//などとしてコメントアウトしておきます。
日本語の設定
日本語はfcitx5を入れると特別何かをしなくても動作するようになっていました。ただし、それらの入力設定は自身で行う必要があります。例えば、デフォルトの入力切り替えはCtrl + Spaceですが、半角/全角キーやひらがな/カタカナキーでもできるようにしておくと便利です。Ctrl + Spaceでアプリランチャーを出して、fcitx5設定ツールを起動してもよいかと思います。
導入は、
sudo pacman -S fcitx5-im fcitx5-mozc
で、導入できます。
設定ツールでは、上部タブの「入力メソッド」に、
キーボード - 日本語
Mozc
と並ぶように設定します。英語キーボードが必要なら追加するわけですが、通常は不要です。
これらfcitx5のウィジェット(アイコン)がパッケージの導入だけで操作できるように鳴るのは、~/.config/niri/config.kdlにあるenvironment {...}部分があるからです。本来これらは自身で書く必要がありますが、niriの設定はよくできているので既に準備されています。
HyprlandにできてNiriにはできないこと

例えばですが、上記のようなレイアウトで、左上のAPP1~2のような横並びにしたウィンドウの下にAPP3を持ってくるようなレイアウトはNiriではできません。何かしらプラグインや方法がないわけではないのでしょうが、基本的には横に分割していき、そのカラムの中に垂直にいくつかのウィンドウを配置することはできます。
上記画像はHyprlandのレイアウトですがこれならワークスペースを切り替えずにAPP1とAPP2で並行してダウンロードや何かをさせて、APP3でそれらの状況を記入や確認しつつ、APP4でブラウザを開いていればそれらダウンロードをするリンクを調べたりなどができるわけですが、NiriだとAPP1とAPP2は縦並びになるので、APP3で何かを書くのがきつく、横幅を狭めることもできますが何かを書くには狭くとなってしまい、少なからずスクロールか切り替えが必要になります。
切り替えの操作は3本指スクロールですぐできますし、Hyprlandと同様にSuper + 左右矢印でできますから最小限の手間で済みます。個人的には、上記画像のようなレイアウトを使うこともあり、APP4がブラウザであった場合、違うワークスペースでファイルマネージャを開いてそれをWindowsの方に送るということもしたりするのでワークスペースの1と2を切り替えれば済むというだけでほとんどができるのは便利ではあります。
Animationの仕組み
animations {
workspace-switch {
spring
damping-ratio=1.0
stiffness=1000
epsilon=0.0001
}
// 他のアニメーション設定 (window-open, window-close など) もここに含まれます
}
- spring:スプリング(バネ)ベースのアニメーションを有効にします。弾力のある自然な動きが生まれます。
- damping-ratio (減衰比):アニメーションの減衰の速さ。値が大きいほど早く落ち着きます。
- stiffness (剛性):バネの硬さ。値が大きいほどアニメーションが速くなります。
- epsilon:アニメーションを停止する閾値。
niriの設定は上記のような書き方でそれぞれのアクションに対して設定することができます。ライブリロードに対応しているので、設定してファイルを保存すればすぐに効果が確かめられるので色々と値を変えて自分に合った設定を見つけてください。
damping-ratioの減速率は0.1~10.0までで、以下の特性があります。
- 1.0未満:減衰不足のスプリング。最終的には振動します。
- 1.0以上:減衰過剰のスプリング。振動しません。
- 1.0:臨界減衰のスプリング。振動することなく最短時間で停止します。
ただし、減衰率が1.0であっても、タッチパッドのスワイプによって十分な速度で「起動」された場合、スプリングアニメーションが振動することがあります。1.0以上の過剰減衰スプリングは数値的な問題がありグラフィックの不具合を起こす可能性があるので1.0以上に設定することは非推奨です。
これらの他に、イージングを設定する方法もあります。
animations {
workspace-switch {
duration-ms=300 # アニメーションの時間(ミリ秒)
curve="ease-out-expo" # 使用するカーブの種類
}
}
- ease-out-quad
- ease-out-cubic
- ease-out-expo
- linear
- cubic-bezier