Hyprlandで作る美しいLinuxデスクトップ

# はじめに

フリュー Advent Calendar 2023 の20日目担当の
ふりゅーぺんぎんです

今回は題名の通りHyprlandとWaybarを用い、良い感じのLinuxデスクトップ環境を作ってみようというものです

Linuxデスクトップ元年はとうの昔に過ぎ去っているので、当然ご存知かと思いますが、Linuxでは自由にデスクトップ環境を選択したり改造することができます
(UnixPornで検索したらカッコいいのが沢山でてくるよ)

KDE PlasmaやGnomeといったデスクトップ環境以外にもウィンドウマネージャ(i3wmやXmonadなど)という選択肢がありますが、厄介なことに近年はX Window SystemからWaylandへの過渡期であり、ウィンドウマネージャ使いは乗り換えをしなければならない季節です(i3->Sway等)

その中でHyprlandなるものを見つけたのですが、日本語の記事があんまりなかったので(特に難しいものでもないと思うのでそもそも必要ないかもしれませんが)、その辺りの情報を増やしたいなぁと思った次第です

検証の環境はManjaroです

インストール方法はArch Linux系以外は異なりますが、
それ以外についてはどのディストリでも共通だと思うので適宜汲み取っていただければと思います

# ウィンドウマネージャについて

ここでは軽くウィンドウマネージャについて説明しますので、ご存知の方は飛ばしてください

デスクトップ環境は、ウィンドウマネージャだけでなくランチャーやステータスバー等様々な要素を含み、インストールするだけで不自由なくGUIでPCを操作できるようになります

対してウィンドウマネージャはその名の通りウィンドウを表示・操作する部分のみであり、必要に応じで他のパッケージを用いる必要があります

では何故ウィンドウマネージャを用いるかというと、
~~当然ロマンだ!~~ デスクトップ環境に比べると軽量で、より自由に見た目や操作を変更できるという利点があるからです

他の方が計測してくださったりしています
https://qiita.com/teresapp/items/a7988ccbf15cff00328f

今回はWayland上で動くウィンドウマネージャの中でも、いい感じの見た目やアニメーションを持つHyprlandを試してみました

# インスコ

OSのインストール方法は省略します

ググったら沢山良い感じの情報が出てくるはずです

ではまずウィンドウマネージャのインストールです

```bash
# ウィンドウマネージャのインストール
sudo pacman -S hyprland
```
https://github.com/hyprwm/Hyprland

ちなみにNvidia製GPUを利用している場合は通常のパッケージでは動かないようなので、AURのhyprland-nvidiaをご利用ください

次はステータスバーのインストール

```bash
# ステータスバーのインストール
sudo pacman -S waybar
```
https://github.com/Alexays/Waybar

ステータスバーとは、ソフトウェアのアイコンやランチャー、今日の日付等がある、だいたい一番上か下か左かにあるバーのことです(Windowsは下、Macが上、Ubuntuは左がデフォルト)

Waybar以外にも選択肢はあります

https://wiki.hyprland.org/Useful-Utilities/Status-Bars/

AURの方にwaybar-hyprland-gitというのが残っており、以前は通常のwaybarの方で問題があったようですが、現在は修正済みとのことで、公式リポジトリの方でも問題なく動きました

詳しくはこちらのコメントを参照されたい
https://aur.archlinux.org/packages/waybar-hyprland


```bash
# ランチャーのインストール
sudo pacman -S wofi
```

https://gitlab.com/dgirault/wofi

アプリケーションランチャーです

こちらからアプリケーションを選択して立ち上げます

これが無いと設定したキーバインドかターミナルくらいしか立ち上げる手段が無くなってしまいます

```bash
# WallpaperUtilityのインストール
sudo pacman -S hyprpaper
```

https://github.com/hyprwm/hyprpaper

壁紙を変更するのに必要なものです

```bash
# ネットワークアプレットのインストール
sudo pacman -S network-manager-applet
```

ステータスバーに表示するネットワークのアプレットです

network managerをCLIやTUIで設定しても良いのですが、面倒なので入れておきます

```bash
# 通知機能のインストール
sudo pacman -S dunst
```
https://github.com/dunst-project/dunst

通知機能です

```bash
# スクショツールのインストール
sudo pacman -S hyprshot
```
https://github.com/Gustash/Hyprshot

スクリーンショット機能です

```bash
# ログアウトメニューのインストール(AUR)
yay -S wlogout
```
https://github.com/ArtsyMacaw/wlogout

lock、logout、reboot、shutdown等があるログアウトメニューです

# カスタマイズ

### Hyprlandの設定

インストールを終えた後、一度ログアウトし、Hyprlandセッションでログインします

設定ファイルを書いていきます

Hyprlandの設定は保存時に適用されるので、簡単にトライ&エラーできます

```bash
# Hyprlandの設定ファイル
vim ~/.config/hypr/hyprland.conf
```
まず、ログイン時に「設定ファイルがデフォルトだよー」的な警告が出ると思うので、autogenerated = 1 という箇所を消します
この部分はデフォルトで生成されたということを表しており、これを消すことで警告が消えます

次に以下を追加します

これを書いておかないとWaylandに対応していないアプリケーションの表示がガビります

見えはしますが見づらくなるので推奨です

```bash
xwayland {
  force_zero_scaling = true
}
```

https://wiki.hyprland.org/Configuring/XWayland/

先程インストールしたステータスバーを立ち上げるために、以下も追記しましょう

```bash
exec-once = waybar
```

network-manager-appletやdunstも起動できるようにしておきます

```bash
exec-once = nm-applet --indicator
exec-once = dunst &
```

あとはデフォルトにある設定をいじっていきます

inputはキーボードの設定です
US配列の場合はus、日本語配列の場合はjpをkb_layoutに入れます

```bash
input {
    kb_layout = jp
    ...
}
```

他にもgeneral decoration animation dwinle master gesturesといった設定項目があります
この辺りはwikiのリンクもコメントで貼られているのでそちらを参照しながら自由にお書きください

最後にショートカットの設定です

```bash
$mainMod = SUPER
```
と書いてありますが、SUPERはWindowsキーのことを指します

```bash
bind = $mainMod, DISPATCHERS
```
となっているところがキーバインドです

```bash
bind = $mainMod, E, exec, dolphin
```
↑の場合はWindowsキー+Eキーでファイルマネージャであるdolphinを起動するという意味になります

もしWindowsキー+Controlキー+Eキーで同じことをしたい場合は

```bash
bind = $mainMod CTRL, E, exec, dolphin
```
のように書きます

アプリケーションランチャーであるwofiはデフォルトで用意されています

```bash
bind = $mainMod, R, exec, wofi --show drun
```

以下にDispatchersについての解説があります

https://wiki.hyprland.org/Configuring/Dispatchers/

他にもウィンドウのフォーカスやワークスペースの移動などもデフォルトで用意されていますが、ワークスペースの移動が面倒なので、以下のようにワークスペースを左右に切り替えされるキーバインドを用意しておくと良いと思います


```bash
bind = $mainMod CTRL, left,  workspace, -1
bind = $mainMod CTRL, right,  workspace, +1
```


### Waybarの設定

Waybarの設定ファイルは以下の場所にあります

```bash
# wofiの設定ファイル
vim ~/.config/waybar/config
# wofiの見た目変更
vim ~/.config/waybar/style.css
```

こちらに関してはネット上に落ちているdotfilesを見て書くとよいと思います

(Unix系のOSにおいてユーザの設定は.config等隠しファイル内に書いたり書かれるので、一般的に設定ファイル全般をdotfilesと呼びます)

### Hyprpaperの設定

Hyprpaperは壁紙を制御するツールです

まず hyprctl monitors でモニターの名前を取得します

その後、以下の設定ファイルを編集します

```bash
# Hyprpaperの設定ファイル
vim ~/.config/hypr/hyprpaper.conf
```

以下を追記します

```bash
preload = /path/to/image.png
wallpaper = MONITORNAME,/path/to/image.png
```
MONITORNAMEはモニター名、/path/to/image.pngは壁紙にしたい画像ファイルのパスです

wallpaperだけでなくpreloadも書いておかないといけないようです


もし複数のディスプレイがある時は↑の設定をディスプレイの数だけ書くと良いです

https://wiki.hyprland.org/Useful-Utilities/Wallpapers/

### Wofiの設定

Wofiの設定ファイルは以下の場所にあります

```bash
# Wofiの設定ファイル
vim ~/.config/wofi/style.css
```

https://cloudninja.pw/docs/wofi.html

こちらもdotfilesを参考にどうぞ

# 見た目とか

![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620037/ce8175fc-c770-119e-bfde-96741c164948.png)

こんな感じになりました

WaybarやWofiの設定はデフォルトのままで、特にいじってない状態です

なので統一感は皆無ですが、各々の見た目はかっこいいと思われます(主観)

壁紙は日本製Arch LinuxベースディストロのAlter Linuxから拝借しました

https://github.com/FascodeNet/alterlinux

使用感としては、アニメーションがぬるぬるでなかなか良い感じです

とはいえ実用レベルまで持ってくるには設定ファイルを結構書かなければならないので、そこは時間とかもろもろ相談した上でどうぞ

デスクトップ環境の方は何も設定しなくても普通に動いてくれて優秀ですので、大人しくそちらを選択するのもありだと思います


# 最後に

~~いかがでしたか?なにもわかりませんでした!~~

カッコいい見た目のPCを皆に自慢して、Linuxユーザを増やそう!

# 参考

Hyprlandの公式サイト
https://hyprland.org/