Diff
1diff --git a/CMakeLists.txt b/CMakeLists.txt
2index d886f50a8d00eb7ab5d2e6a046555b2fd004fea1..e4e83ac4a0734e84212dae66fe5f8dd366a95891 100644
3--- a/CMakeLists.txt
4+++ b/CMakeLists.txt
5@@ -22,6 +22,12 @@ add_library(hy3 SHARED
6 src/SelectionHook.cpp
7 )
8
9+option(HY3_NO_VERSION_CHECK "Disable hyprland version check" FALSE)
10+
11+if (HY3_NO_VERSION_CHECK)
12+ target_compile_definitions(hy3 PRIVATE -DHY3_NO_VERSION_CHECK=TRUE)
13+endif()
14+
15 target_include_directories(hy3 PRIVATE ${DEPS_INCLUDE_DIRS})
16
17 install(TARGETS hy3 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
18diff --git a/compile_commands_bear.sh b/compile_commands_bear.sh
19index 8803482c7e0b10b99768ae578ab2b43eb00d765e..83b49469823017e2efb8cc0bb341d43c5511a16b 100755
20--- a/compile_commands_bear.sh
21+++ b/compile_commands_bear.sh
22@@ -1,4 +1,4 @@
23 rm -rf build
24-cmake -DCMAKE_BUILD_TYPE=Debug -B build
25 bear -- cmake --build build
26+cmake -DCMAKE_BUILD_TYPE=Debug -DHY3_NO_VERSION_CHECK=TRUE -B build
27 sed -i 's/-std=gnu++23/-std=gnu++2b/g' compile_commands.json
28diff --git a/src/main.cpp b/src/main.cpp
29index f4e9c9e158f009b6951dca4e0b0bf1919e056c63..b0820f485937fbf525d5b085ca63bc710ad86766 100644
30--- a/src/main.cpp
31+++ b/src/main.cpp
32@@ -1,7 +1,9 @@
33 #include <optional>
34+#include <stdexcept>
35
36 #include <hyprland/src/Compositor.hpp>
37 #include <hyprland/src/plugins/PluginAPI.hpp>
38+#include <hyprland/src/version.h>
39
40 #include "SelectionHook.hpp"
41 #include "dispatchers.hpp"
42@@ -12,6 +14,19 @@ APICALL EXPORT std::string PLUGIN_API_VERSION() { return HYPRLAND_API_VERSION; }
43 APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
44 PHANDLE = handle;
45
46+#ifndef HY3_NO_VERSION_CHECK
47+ if (GIT_COMMIT_HASH != std::string(__hyprland_api_get_hash())) {
48+ HyprlandAPI::addNotification(
49+ PHANDLE,
50+ "[hy3] Hy3 was compiled for a different version of hyprland; refusing to start.",
51+ CColor {1.0, 0.2, 0.2, 1.0},
52+ 10000
53+ );
54+
55+ throw std::runtime_error("[hy3] target hyprland version mismatch");
56+ }
57+#endif
58+
59 selection_hook::init();
60
61 #define CONF(NAME, TYPE, VALUE) \