{ lib, pkgs, inputs ? null, ... }: pkgs.kdePackages.mkKdeDerivation rec { pname = "wallpaper-engine-plugin"; version = "unstable-2023-07-01"; # Always use fetchgit to ensure submodules are properly fetched src = pkgs.fetchgit { url = "https://github.com/catsout/wallpaper-engine-kde-plugin.git"; rev = "9e60b364e268814a1a778549c579ad45a9b9c7bb"; hash = "sha256-zEpELmuK+EvQ1HIWxCSAGyJAjmGgp0yqjtNuC2DTES8="; fetchSubmodules = true; }; extraNativeBuildInputs = [ pkgs.kdePackages.kpackage pkgs.pkg-config (pkgs.python3.withPackages (ps: with ps; [ websockets ])) ]; extraBuildInputs = [ pkgs.kdePackages.extra-cmake-modules pkgs.kdePackages.libplasma pkgs.lz4 pkgs.mpv pkgs.lua pkgs.libass pkgs.libsysprof-capture pkgs.fribidi pkgs.ffmpeg pkgs.libplacebo pkgs.libunwind pkgs.shaderc pkgs.lcms2 pkgs.libdovi pkgs.libdvdnav pkgs.libdvdread pkgs.vulkan-headers pkgs.vulkan-loader pkgs.spirv-tools pkgs.gst_all_1.gstreamer pkgs.gst_all_1.gst-plugins-base pkgs.gst_all_1.gst-plugins-good pkgs.gst_all_1.gst-plugins-bad pkgs.gst_all_1.gst-plugins-ugly pkgs.gst_all_1.gst-libav pkgs.mujs # Additional dependencies for scene backend pkgs.libGL pkgs.mesa pkgs.eigen pkgs.nlohmann_json pkgs.libarchive pkgs.libbluray pkgs.rubberband pkgs.libuchardet pkgs.zimg pkgs.alsa-lib pkgs.openal pkgs.pipewire pkgs.libpulseaudio pkgs.libcaca pkgs.libdisplay-info pkgs.libgbm pkgs.xorg.libXScrnSaver pkgs.xorg.libXpresent pkgs.xorg.libXv pkgs.xorg.libXext pkgs.xorg.libXinerama pkgs.xorg.libXrandr pkgs.libdrm pkgs.wayland pkgs.wayland-protocols pkgs.jack2 pkgs.libsndfile pkgs.libsamplerate pkgs.libvorbis pkgs.flac pkgs.libopus pkgs.libmad pkgs.libmodplug pkgs.speex pkgs.libtheora pkgs.libvpx pkgs.x264 pkgs.x265 pkgs.libaom pkgs.dav1d pkgs.svt-av1 pkgs.nv-codec-headers-12 pkgs.libva pkgs.libvdpau ]; # Apply Qt6 compatibility fixes postPatch = '' # Fix Qt6 deprecation warnings in MouseGrabber.cpp sed -i 's|event->localPos()|event->position()|g' src/MouseGrabber.cpp sed -i 's|event->screenPos()|event->globalPosition()|g' src/MouseGrabber.cpp sed -i 's|event->posF()|event->position()|g' src/MouseGrabber.cpp # Fix QMouseEvent and QHoverEvent constructors for Qt6 (cast device to QPointingDevice*) sed -i 's|event->modifiers());|event->modifiers(), static_cast(event->device()));|g' src/MouseGrabber.cpp # Fix Qt6 deprecation warning in qthelper.hpp sed -i 's|v.type()|v.metaType().id()|g' src/backend_mpv/qthelper.hpp # Fix Qt6 qplatformnativeinterface.h removal in MpvBackend.cpp # Wrap the Qt5-only header in version check sed -i '/# include /{ i\#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) a\#endif }' src/backend_mpv/MpvBackend.cpp # Remove TODO comments sed -i '/TODO.*QX11Application/d' src/backend_mpv/MpvBackend.cpp sed -i '/same for wayland/d' src/backend_mpv/MpvBackend.cpp # Fix X11 display access for Qt6 sed -i '/params\[2\].type = MPV_RENDER_PARAM_X11_DISPLAY;/,/params\[2\].data = QX11Info::display();/{ s|auto\* native = QGuiApplication::platformNativeInterface();|auto* x11App = qApp->nativeInterface();| s|params\[2\].data = native->nativeResourceForWindow("display", nullptr);|params[2].data = x11App ? x11App->display() : nullptr;| }' src/backend_mpv/MpvBackend.cpp # Fix Wayland display access for Qt6 sed -i '/params\[2\].type = MPV_RENDER_PARAM_WL_DISPLAY;/,/params\[2\].data = native->nativeResourceForWindow("display", nullptr);/{ /params\[2\].type = MPV_RENDER_PARAM_WL_DISPLAY;/a\#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))\ auto* waylandApp = qApp->nativeInterface();\ params[2].data = waylandApp ? waylandApp->display() : nullptr;\ #else /params\[2\].data = native->nativeResourceForWindow/a\#endif }' src/backend_mpv/MpvBackend.cpp ''; cmakeFlags = [ "-DQt6_DIR=${pkgs.kdePackages.qtbase}/lib/cmake/Qt6" "-DUSE_PLASMAPKG=OFF" "-DQT_MAJOR_VERSION=6" "-DBUILD_QML=ON" "-DBUILD_SCENE=ON" ]; dontWrapQtApps = true; postInstall = '' cd $out/share/plasma/wallpapers/com.github.catsout.wallpaperEngineKde chmod +x ./contents/pyext.py patchShebangs --build ./contents/pyext.py cd - ''; meta = with lib; { description = "KDE wallpaper plugin integrating Wallpaper Engine"; homepage = "https://github.com/catsout/wallpaper-engine-kde-plugin"; license = licenses.gpl2Plus; platforms = platforms.linux; maintainers = []; }; }