final: prev: let ffmpegGLTransitions = prev.fetchFromGitHub { owner = "transitive-bullshit"; repo = "ffmpeg-gl-transition"; rev = "3639b521aafb30b185de281f94560f298a22d420"; hash = "sha256-py6NVXw3giiRAcVRzsgxU8aKJZInWrubIUT2vOhfuco="; name = "ffmpeg-gltransition"; }; ffmpegShadertoy = prev.fetchFromGitLab { owner = "kriwkrow"; repo = "ffmpeg_shadertoy_filter"; rev = "eb297df10a104cae2d4ef3f70188d1e84f104532"; hash = "sha256-Qy5sZgNF/0uNCosj2NZEvyssXU9ln6ZsDjnt/orpt1k="; name = "ffmpeg-shadertoy"; }; in { ffmpeg-foodogsquared = prev.ffmpeg-full.overrideAttrs (finalAttrs: prevAttrs: { pname = "ffmpeg-foodogsquared"; srcs = [ prevAttrs.src ffmpegGLTransitions ffmpegShadertoy ]; buildInputs = prevAttrs.buildInputs ++ (with prev; [ libGLU glew ]); sourceRoot = "."; patches = prevAttrs.patches ++ [ ./add-custom-filters.patch ./update-ffmpeg-opengltransition.patch ]; postUnpack = '' cd ./${ffmpegGLTransitions.name} cd ../ cp --no-preserve=mode ./${ffmpegGLTransitions.name}/vf_gltransition.c ./ffmpeg/libavfilter cp --no-preserve=mode ./${ffmpegShadertoy.name}/vf_shadertoy.c ./ffmpeg/libavfilter cd ffmpeg ''; }); }