diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e394f2e136d2e234dd5057448ff7c25ebdd5edc..6d6372216091807d817c2dc747c0db1d50b76f04 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -101,6 +101,7 @@ set(Clang_C_FLAGS
 )
 set(Clang_CXX_FLAGS
     $<$<COMPILE_LANGUAGE:CXX>:-Wno-c++98-compat-pedantic>
+    $<$<COMPILE_LANGUAGE:CXX>:-Wno-c++20-compat>
     $<$<COMPILE_LANGUAGE:CXX>:-Wno-redundant-parens>
     $<$<COMPILE_LANGUAGE:CXX>:-Wno-inconsistent-missing-override>
     $<$<COMPILE_LANGUAGE:CXX>:-Wno-suggest-override>
@@ -120,8 +121,7 @@ find_library(MPV_LIBRARY        mpv                   REQUIRED)
 find_library(SQLITE3_LIBRARY    sqlite3               REQUIRED version>=3.31.0)   # tested with 3.34.1
 
 find_package(CURL                                     REQUIRED HTTP HTTPS)        # tested with 7.74.0
-find_package(QT NAMES Qt6 Qt5      COMPONENTS Widgets REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
+find_package(Qt6      COMPONENTS REQUIRED Widgets OpenGL)
 
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTOMOC ON)
@@ -281,20 +281,15 @@ add_custom_command(OUTPUT ${SQL_GENERATED_FILE}
     COMMENT "Generating SQL included files to embed them"
 )
 
-if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
     qt_add_executable(lektord
         MANUAL_FINALIZATION
         ${lektord_SOURCES}
         ${SQL_GENERATED_FILE}
     )
-else()
-    add_executable(lektord
-        ${lektord_SOURCES}
-        ${SQL_GENERATED_FILE}
-    )
-endif()
 add_executable(lkt  ${lkt_SOURCES})
 
+set_property(TARGET lektord PROPERTY CXX_STANDARD 20)
+
 set(MANPAGES_COMMANDS)
 if(GENERATE_MANPAGES)
     message(STATUS "Generating manpages")
@@ -318,7 +313,8 @@ target_link_libraries(lektord PRIVATE
     ${CMAKE_DL_LIBS}
     ${SQLITE3_LIBRARY}
     ${CURL_LIBRARIES}
-    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt::Widgets
+    Qt::OpenGL
 )
 target_link_libraries(lkt PRIVATE
     ${OpenMP_C_LIBRARIES}
@@ -351,8 +347,6 @@ target_compile_options(lkt PRIVATE
     ${${CMAKE_C_COMPILER_ID}_${CMAKE_C_COMPILER_ID}_C_FLAGS}
 )
 
-set_property(TARGET lektord PROPERTY CXX_STANDARD 20)
-
 set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/Rust)
 
 ExternalProject_Add(amadeus_rs
@@ -384,7 +378,8 @@ add_dependencies(lektord liblektor_rs)
 target_link_libraries(lektord
     PRIVATE
     "${CMAKE_SOURCE_DIR}/src/rust/target/${RUST_BUILD_TYPE}/liblektor_rs.a"
-    Qt${QT_VERSION_MAJOR}::Widgets
+    Qt::Widgets
+    Qt::OpenGL
 )
 
 ###                    ###
@@ -414,6 +409,5 @@ foreach(CMD IN LISTS MANPAGE_COMMANDS)
     )
 endforeach()
 
-if(QT_VERSION_MAJOR EQUAL 6)
     qt_finalize_executable(lektord)
-endif()
+
diff --git a/inc/lektor/internal/os.h b/inc/lektor/internal/os.h
index c2f6d62dfb69988a4534c286e1ff4d336161e88f..49611b5248e7250662e1b033b4ef517313cac48b 100644
--- a/inc/lektor/internal/os.h
+++ b/inc/lektor/internal/os.h
@@ -74,12 +74,12 @@ enum {
 typedef void (*function_ptr)(void);
 
 /* Attributes */
-#define noreturn             __attribute__((noreturn))
+// #define noreturn             __attribute__((noreturn))
 #define UNUSED               __attribute__((unused))
 #define UNUSED_FUNCTION      UNUSED
 #define CONSTRUCTOR_FUNCTION __attribute__((constructor)) static void
 #define DESTRUCTOR_FUNCTION  __attribute__((destructor)) static void
-#define EXIT_FUNCTION        noreturn void
+#define EXIT_FUNCTION        __attribute__((noreturn)) void
 #define PRIVATE_FUNCTION     UNUSED_FUNCTION static inline
 #define FALLTHROUGH          __attribute__((fallthrough))
 
diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh
index 4814bd79eb7acad16d9cde4ee977f400dd956a49..31a5b1b7e8af961fe3617184d430b7e8838b1cc5 100644
--- a/src/module/qt_window/mpvwidget.hh
+++ b/src/module/qt_window/mpvwidget.hh
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <QtWidgets/QOpenGLWidget>
+#include <QtOpenGLWidgets/QOpenGLWidget>
 #include <mpv/client.h>
 #include <mpv/render_gl.h>
 #include <QtGui>
diff --git a/to_install b/to_install
new file mode 100644
index 0000000000000000000000000000000000000000..f1dc015bfbdf14d93e5cebaea60ddc7b8635747e
--- /dev/null
+++ b/to_install
@@ -0,0 +1,2 @@
+qt6-base qt6-declarative qt6-imageformats qt6-location qt6-multimedia qt6-quickcontrols2 qt6-sensors qt6-speech qt6-svg qt6-tools qt6-translations qt6-virtualkeyboard qt6-wayland qt6-webchannel qt6-webengine
+