{lib, ...}: let rootDirs = builtins.readDir ./.; removeFiles = lib.attrsets.filterAttrs (n: v: v == "directory") rootDirs; getPatches = name: builtins.map (value: ./${name}/${value}) (builtins.attrNames ( lib.attrsets.filterAttrs ( n: v: v == "regular" && lib.strings.hasSuffix ".patch" n ) (builtins.readDir ./${name}) )); bigOverlay = final: prev: builtins.mapAttrs ( name: _value: prev."${name}".overrideAttrs { version = prev."${name}".version + "-patched"; patches = prev."${name}".patches ++ getPatches name; } ) removeFiles; in { nixpkgs.overlays = [ ( final: prev: { kdePackages = prev.kdePackages.overrideScope bigOverlay; } ) ]; }