{lib, ...}: let rootDirs = builtins.readDir ./.; removeFiles = lib.attrsets.filterAttrs (n: v: v == "directory") rootDirs; programsToPatch = builtins.attrNames removeFiles; 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: lib.attrsets.mergeAttrsList ( lib.lists.forEach programsToPatch ( program: let unpatchedProgram = prev."${program}"; in { "${program}" = unpatchedProgram.overrideAttrs { version = "${unpatchedProgram.version}-patched"; __intentionallyOverridingVersion = true; patches = unpatchedProgram.patches ++ getPatches program; }; } ) ); in { nixpkgs.overlays = [ ( final: prev: { kdePackages = prev.kdePackages.overrideScope bigOverlay; } ) ]; }