hyprhookをインストールしたい
環境
openSUSE Tumbleweed
$ hyprpm add https://github.com/Hyprhook/Hyprhook
を実行したらビルドに失敗した。
-vオプションをつけた
$ hyprpm add -v https://github.com/Hyprhook/Hyprhook
gin(s)[v] shell returned: -> cd /run/user/1000/hyprpm/u1e2k && PKG_CONFIG_PATH="/usr//share/pkgconfig" make -C hyprhook all
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
Package pixman-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `pixman-1.pc'
to the PKG_CONFIG_PATH environment variable
Package 'pixman-1' not found
Package 'libdrm' not found
Package 'pangocairo' not found
Package 'libinput' not found
Package 'libudev' not found
Package 'wayland-server' not found
Package 'xkbcommon' not found
/bin/sh: 行 1: g++: コマンドが見つかりません
make: *** [Makefile:7: all] エラー 127
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
色々足りなかったらしい
gccから
sudo zypper install gcc-c++
一通り入れてみる
$ sudo zypper in libpixman-1-0-devel libdrm-devel pango-devel libinput-devel wayland-devel libxkbcommon-devel
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み: /usr/include/hyprland/src/desktop/DesktopTypes.hpp:2,
次から読み込み: src/Parser.cpp:1:
/usr/include/hyprland/src/helpers/memory/Memory.hpp:3:10: 致命的エラー: hyprutils/memory/WeakPtr.hpp: そのようなファイルやディレクトリはありません
3 | #include <hyprutils/memory/WeakPtr.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
src/main.cpp:1:10: 致命的エラー: hyprlang.hpp: そのようなファイルやディレクトリはありません
1 | #include <hyprlang.hpp>
| ^~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
hyprland関連の開発パッケージ足りないかも
たぶんここらへんかな?
sudo zypper install hyprland-devel hyprutils-devel hyprlang-devel
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み: /usr/include/hyprland/src/plugins/PluginAPI.hpp:23,
次から読み込み: src/Parser.cpp:4:
/usr/include/hyprland/src/helpers/Color.hpp:4:10: 致命的エラー: hyprgraphics/color/Color.hpp: そのようなファイルやディレクトリはありません
4 | #include <hyprgraphics/color/Color.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
次のファイルから読み込み: /usr/include/hyprland/src/plugins/PluginAPI.hpp:23,
次から読み込み: src/main.cpp:6:
/usr/include/hyprland/src/helpers/Color.hpp:4:10: 致命的エラー: hyprgraphics/color/Color.hpp: そのようなファイルやディレクトリはありません
4 | #include <hyprgraphics/color/Color.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
まだ足りないのか
これらしい
$ sudo zypper install hyprgraphics-devel
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み: /usr/include/hyprland/src/defines.hpp:3,
次から読み込み: /usr/include/hyprland/src/plugins/PluginAPI.hpp:26,
次から読み込み: src/Parser.cpp:4:
/usr/include/hyprland/src/includes.hpp:26:10: 致命的エラー: GLES3/gl32.h: そのようなファイルやディレクトリはありません
26 | #include <GLES3/gl32.h>
| ^~~~~~~~~~~~~~
コンパイルを停止しました。
次のファイルから読み込み: /usr/include/hyprland/src/defines.hpp:3,
次から読み込み: /usr/include/hyprland/src/plugins/PluginAPI.hpp:26,
次から読み込み: src/main.cpp:6:
/usr/include/hyprland/src/includes.hpp:26:10: 致命的エラー: GLES3/gl32.h: そのようなファイルやディレクトリはありません
26 | #include <GLES3/gl32.h>
| ^~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
なんかだんだん楽しくなってきた
sudo zypper install Mesa-libGLESv3-devel
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
次のファイルから読み込み: /usr/include/hyprland/src/render/Framebuffer.hpp:4,
次から読み込み: /usr/include/hyprland/src/render/Transformer.hpp:3,
次から読み込み: /usr/include/hyprland/src/desktop/Window.hpp:15,
次から読み込み: /usr/include/hyprland/src/debug/HyprCtl.hpp:5,
次から読み込み: src/Parser.cpp:6:
/usr/include/hyprland/src/render/Texture.hpp:4:10: 致命的エラー: aquamarine/buffer/Buffer.hpp: そのようなファイルやディレクトリはありません
4 | #include <aquamarine/buffer/Buffer.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンパイルを停止しました。
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
sudo zypper install aquamarine-devel
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' に入ります
g++ -shared -fPIC --no-gnu-unique -Wall -g -std=c++2b -O2 `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon` src/Parser.cpp src/main.cpp -o hyprhook.so
src/Parser.cpp: In function ‘std::string Parser::parseCWorkspace(std::any)’:
src/Parser.cpp:39:66: エラー: ‘class CWorkspace’ has no member named ‘m_self’; did you mean ‘m_pSelf’?
39 | const std::string& ret = parseWorkspace(workspace->m_self.lock());
| ^~~~~~
| m_pSelf
src/Parser.cpp: In function ‘std::string Parser::parseMonitor(std::any)’:
src/Parser.cpp:45:72: エラー: ‘class CMonitor’ has no member named ‘m_self’; did you mean ‘self’?
45 | const std::string& ret = CHyprCtl::getMonitorData(monitor->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
| ^~~~~~
| self
src/Parser.cpp: In function ‘std::string Parser::parseVectorWorkspaceMonitor(std::any)’:
src/Parser.cpp:56:79: エラー: ‘class CMonitor’ has no member named ‘m_self’; did you mean ‘self’?
56 | ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
| ^~~~~~
| self
make: *** [Makefile:7: all] エラー 1
make: ディレクトリ '/run/user/1000/hyprpm/u1e2k/hyprhook' から出ます
ソースコード直すことにした
39行目付近:
変更前: const std::string& ret = parseWorkspace(workspace->m_self.lock());
変更後: const std::string& ret = parseWorkspace(workspace->m_pSelf.lock()); (m_self を m_pSelf に変更)
45行目付近:
変更前: const std::string& ret = CHyprCtl::getMonitorData(monitor->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
変更後: const std::string& ret = CHyprCtl::getMonitorData(monitor->self.lock(), eHyprCtlOutputFormat::FORMAT_JSON); (m_self を self に変更)
56行目付近:
変更前: ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->m_self.lock(), eHyprCtlOutputFormat::FORMAT_JSON);
変更後: ret += CHyprCtl::getMonitorData(std::any_cast<CMonitor*>(it)->self.lock(), eHyprCtlOutputFormat::FORMAT_JSON); (m_self を self に変更)
makeし直したら
無事にファイルが書き出されたのでcp hyprhook.so ~/.config/hypr/plugins/でファイルをコピー
hyprctl plugin load %.so PATH%
したらOKが出た。
たぶん真似する人はいないだろうけどプラグイン読み込まれた状態で.soファイルを上書きするとhyprlandそのものがクラッシュします。
私はクラッシュして一度画面が真っ暗になりました。
eww入れてなかった
sudo zypper in eww
に従ってサンプルを入れる
hyprland.confに
bindd = $mainMod, C, Close Window, closeWindow
bindd = $mainMod, H, Toggle Binds Help, exec, ~/.config/hypr/scripts/which-key.sh -b
plugin {
hyprhook {
onSubmap = ~/.config/hypr/scripts/which-key.sh
}
}
bindd = $mainMod, C, Close Window, closeWindowはいらないかもしれない。
git cloneした./examples/which-key/ewwをmkdirして~/.config/eww-which-keyに配置
./examples/which-key/which-key.shを~/.config/hypr/scriptsに配置
無事に動作したけどスクリーンショットには映らなかった。
なのでgithubのリポジトリにある画像でお茶を濁す

ちなみに
bindd = $mainMod, H, キーバインドの表示を切り替え, exec, ~/.config/hypr/scripts/which-key.sh -bみたいに日本語でもちゃんと表示されました。