diff --git a/flake.nix b/flake.nix
index 3355dc9602fb9c3ea3f29b1d4680e62346a9f19a..ce1f127522b06ae82d34e21ec7e32b029baa03d0 100644
--- a/flake.nix
+++ b/flake.nix
@@ -51,8 +51,10 @@
             secp256k1 = iohk-pkgs.secp256k1;
             libblst = iohk-pkgs.libblst;
 
+            modifiers = import ./modifiers.nix { inherit pkgs; };
+
             overrides = composeManyExtensions [
-              (import ./overlay.nix { inherit pkgs; })
+              (import ./overlay.nix { inherit pkgs; f = modifiers; })
               (import ./configuration.nix { inherit libsodium R secp256k1 libblst; } { inherit pkgs; })
             ];
 
diff --git a/horizon.dhall b/horizon.dhall
index 5a732f4374dba7c1b54a1eb26e6379a919cb7f13..1a022b8a15fec2e6b12b013f6c9bfb765f05ccb2 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -68,7 +68,6 @@ let packages =
         , pointed = H.callHackage "pointed" "5.0.4"
         , prettyprinter-configurable =
             callCHaP "prettyprinter-configurable" "1.27.0.0"
-        , protolude = H.callHackage "protolude" "0.3.3"
         , quickcheck-text = H.callHackage "quickcheck-text" "0.1.2.1"
         , quickcheck-transformer =
             H.callHackage "quickcheck-transformer" "0.3.1.2"
diff --git a/horizon.lock b/horizon.lock
index dab8f60bd89b081177adeb31e21f5acf075425da..d3b56297ce6e9db8085e203a00d08ca0e4da5e17 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -174,10 +174,6 @@
   , mapValue =
       "7bf7f4bd7e6d0611ac824d1c2ea11dd3ee00a35bbcb72bb188eb0fd8428e7ffb"
   }
-, { mapKey = "protolude"
-  , mapValue =
-      "294eadc94a2c94e1ac0bf72c1dec2cd393624c17a9c954f680d11a8590eef7c3"
-  }
 , { mapKey = "quickcheck-text"
   , mapValue =
       "d73af28cadb1937150dbcb76a49d55091c3d084ed93e4a940fe28f0945d3a8e4"
diff --git a/modifiers.nix b/modifiers.nix
new file mode 100644
index 0000000000000000000000000000000000000000..a861a45d837a368db1f34029ad2182cb8eb8e10e
--- /dev/null
+++ b/modifiers.nix
@@ -0,0 +1,5 @@
+{ pkgs, ... }:
+
+with pkgs.lib;
+
+_: prev: name: v: if hasAttr name prev then warn "${name} exists in parent set" v else v
diff --git a/overlay.nix b/overlay.nix
index ff58b14ef79eae163227ed1daa2807f6d1909cd1..1b96d54fa5f6239eb7058f75a5b43e7bae169dbe 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -1,120 +1,119 @@
-{ pkgs, ... }:
+/* This file is auto-generated by horizon-gen-nix. Do not edit. */
+{ pkgs, f ? (final: prev: n: v: v), ... }:
 
 final: prev: with pkgs.haskell.lib; {
-  HTF = final.callPackage (./pkgs/HTF.nix) { };
+  HTF = f final prev "HTF" (final.callPackage (./pkgs/HTF.nix) { });
 
-  PyF = final.callPackage (./pkgs/PyF.nix) { };
+  PyF = f final prev "PyF" (final.callPackage (./pkgs/PyF.nix) { });
 
-  Stream = final.callPackage (./pkgs/Stream.nix) { };
+  Stream = f final prev "Stream" (final.callPackage (./pkgs/Stream.nix) { });
 
-  algebraic-graphs = final.callPackage (./pkgs/algebraic-graphs.nix) { };
+  algebraic-graphs = f final prev "algebraic-graphs" (final.callPackage (./pkgs/algebraic-graphs.nix) { });
 
-  base-deriving-via = final.callPackage (./pkgs/base-deriving-via.nix) { };
+  base-deriving-via = f final prev "base-deriving-via" (final.callPackage (./pkgs/base-deriving-via.nix) { });
 
-  base-prelude = final.callPackage (./pkgs/base-prelude.nix) { };
+  base-prelude = f final prev "base-prelude" (final.callPackage (./pkgs/base-prelude.nix) { });
 
-  bytestring-strict-builder = final.callPackage (./pkgs/bytestring-strict-builder.nix) { };
+  bytestring-strict-builder = f final prev "bytestring-strict-builder" (final.callPackage (./pkgs/bytestring-strict-builder.nix) { });
 
-  canonical-json = final.callPackage (./pkgs/canonical-json.nix) { };
+  canonical-json = f final prev "canonical-json" (final.callPackage (./pkgs/canonical-json.nix) { });
 
-  cardano-binary = final.callPackage (./pkgs/cardano-binary.nix) { };
+  cardano-binary = f final prev "cardano-binary" (final.callPackage (./pkgs/cardano-binary.nix) { });
 
-  cardano-binary-test = final.callPackage (./pkgs/cardano-binary-test.nix) { };
+  cardano-binary-test = f final prev "cardano-binary-test" (final.callPackage (./pkgs/cardano-binary-test.nix) { });
 
-  cardano-crypto = final.callPackage (./pkgs/cardano-crypto.nix) { };
+  cardano-crypto = f final prev "cardano-crypto" (final.callPackage (./pkgs/cardano-crypto.nix) { });
 
-  cardano-crypto-class = final.callPackage (./pkgs/cardano-crypto-class.nix) { };
+  cardano-crypto-class = f final prev "cardano-crypto-class" (final.callPackage (./pkgs/cardano-crypto-class.nix) { });
 
-  cardano-crypto-praos = final.callPackage (./pkgs/cardano-crypto-praos.nix) { };
+  cardano-crypto-praos = f final prev "cardano-crypto-praos" (final.callPackage (./pkgs/cardano-crypto-praos.nix) { });
 
-  cardano-crypto-tests = final.callPackage (./pkgs/cardano-crypto-tests.nix) { };
+  cardano-crypto-tests = f final prev "cardano-crypto-tests" (final.callPackage (./pkgs/cardano-crypto-tests.nix) { });
 
-  cardano-prelude = final.callPackage (./pkgs/cardano-prelude.nix) { };
+  cardano-prelude = f final prev "cardano-prelude" (final.callPackage (./pkgs/cardano-prelude.nix) { });
 
-  cardano-prelude-test = final.callPackage (./pkgs/cardano-prelude-test.nix) { };
+  cardano-prelude-test = f final prev "cardano-prelude-test" (final.callPackage (./pkgs/cardano-prelude-test.nix) { });
 
-  cardano-slotting = final.callPackage (./pkgs/cardano-slotting.nix) { };
+  cardano-slotting = f final prev "cardano-slotting" (final.callPackage (./pkgs/cardano-slotting.nix) { });
 
-  cardano-strict-containers = final.callPackage (./pkgs/cardano-strict-containers.nix) { };
+  cardano-strict-containers = f final prev "cardano-strict-containers" (final.callPackage (./pkgs/cardano-strict-containers.nix) { });
 
-  checkers = final.callPackage (./pkgs/checkers.nix) { };
+  checkers = f final prev "checkers" (final.callPackage (./pkgs/checkers.nix) { });
 
-  composition-prelude = final.callPackage (./pkgs/composition-prelude.nix) { };
+  composition-prelude = f final prev "composition-prelude" (final.callPackage (./pkgs/composition-prelude.nix) { });
 
-  dependent-sum-template = final.callPackage (./pkgs/dependent-sum-template.nix) { };
+  dependent-sum-template = f final prev "dependent-sum-template" (final.callPackage (./pkgs/dependent-sum-template.nix) { });
 
-  deriving-aeson = final.callPackage (./pkgs/deriving-aeson.nix) { };
+  deriving-aeson = f final prev "deriving-aeson" (final.callPackage (./pkgs/deriving-aeson.nix) { });
 
-  dictionary-sharing = final.callPackage (./pkgs/dictionary-sharing.nix) { };
+  dictionary-sharing = f final prev "dictionary-sharing" (final.callPackage (./pkgs/dictionary-sharing.nix) { });
 
-  dom-lt = final.callPackage (./pkgs/dom-lt.nix) { };
+  dom-lt = f final prev "dom-lt" (final.callPackage (./pkgs/dom-lt.nix) { });
 
-  flat = final.callPackage (./pkgs/flat.nix) { };
+  flat = f final prev "flat" (final.callPackage (./pkgs/flat.nix) { });
 
-  groups = final.callPackage (./pkgs/groups.nix) { };
+  groups = f final prev "groups" (final.callPackage (./pkgs/groups.nix) { });
 
-  heapwords = final.callPackage (./pkgs/heapwords.nix) { };
+  heapwords = f final prev "heapwords" (final.callPackage (./pkgs/heapwords.nix) { });
 
-  hedgehog-fn = final.callPackage (./pkgs/hedgehog-fn.nix) { };
+  hedgehog-fn = f final prev "hedgehog-fn" (final.callPackage (./pkgs/hedgehog-fn.nix) { });
 
-  hex-text = final.callPackage (./pkgs/hex-text.nix) { };
+  hex-text = f final prev "hex-text" (final.callPackage (./pkgs/hex-text.nix) { });
 
-  int-cast = final.callPackage (./pkgs/int-cast.nix) { };
+  int-cast = f final prev "int-cast" (final.callPackage (./pkgs/int-cast.nix) { });
 
-  keys = final.callPackage (./pkgs/keys.nix) { };
+  keys = f final prev "keys" (final.callPackage (./pkgs/keys.nix) { });
 
-  lazy-search = final.callPackage (./pkgs/lazy-search.nix) { };
+  lazy-search = f final prev "lazy-search" (final.callPackage (./pkgs/lazy-search.nix) { });
 
-  lazysmallcheck = final.callPackage (./pkgs/lazysmallcheck.nix) { };
+  lazysmallcheck = f final prev "lazysmallcheck" (final.callPackage (./pkgs/lazysmallcheck.nix) { });
 
-  list-t = final.callPackage (./pkgs/list-t.nix) { };
+  list-t = f final prev "list-t" (final.callPackage (./pkgs/list-t.nix) { });
 
-  mtl-prelude = final.callPackage (./pkgs/mtl-prelude.nix) { };
+  mtl-prelude = f final prev "mtl-prelude" (final.callPackage (./pkgs/mtl-prelude.nix) { });
 
-  multiset = final.callPackage (./pkgs/multiset.nix) { };
+  multiset = f final prev "multiset" (final.callPackage (./pkgs/multiset.nix) { });
 
-  nonempty-vector = final.callPackage (./pkgs/nonempty-vector.nix) { };
+  nonempty-vector = f final prev "nonempty-vector" (final.callPackage (./pkgs/nonempty-vector.nix) { });
 
-  ordered-containers = final.callPackage (./pkgs/ordered-containers.nix) { };
+  ordered-containers = f final prev "ordered-containers" (final.callPackage (./pkgs/ordered-containers.nix) { });
 
-  plutus-core = final.callPackage (./pkgs/plutus-core.nix) { };
+  plutus-core = f final prev "plutus-core" (final.callPackage (./pkgs/plutus-core.nix) { });
 
-  plutus-ledger-api = final.callPackage (./pkgs/plutus-ledger-api.nix) { };
+  plutus-ledger-api = f final prev "plutus-ledger-api" (final.callPackage (./pkgs/plutus-ledger-api.nix) { });
 
-  plutus-tx = final.callPackage (./pkgs/plutus-tx.nix) { };
+  plutus-tx = f final prev "plutus-tx" (final.callPackage (./pkgs/plutus-tx.nix) { });
 
-  plutus-tx-plugin = final.callPackage (./pkgs/plutus-tx-plugin.nix) { };
+  plutus-tx-plugin = f final prev "plutus-tx-plugin" (final.callPackage (./pkgs/plutus-tx-plugin.nix) { });
 
-  pointed = final.callPackage (./pkgs/pointed.nix) { };
+  pointed = f final prev "pointed" (final.callPackage (./pkgs/pointed.nix) { });
 
-  prettyprinter-configurable = final.callPackage (./pkgs/prettyprinter-configurable.nix) { };
+  prettyprinter-configurable = f final prev "prettyprinter-configurable" (final.callPackage (./pkgs/prettyprinter-configurable.nix) { });
 
-  protolude = final.callPackage (./pkgs/protolude.nix) { };
+  quickcheck-text = f final prev "quickcheck-text" (final.callPackage (./pkgs/quickcheck-text.nix) { });
 
-  quickcheck-text = final.callPackage (./pkgs/quickcheck-text.nix) { };
+  quickcheck-transformer = f final prev "quickcheck-transformer" (final.callPackage (./pkgs/quickcheck-transformer.nix) { });
 
-  quickcheck-transformer = final.callPackage (./pkgs/quickcheck-transformer.nix) { };
+  ral = f final prev "ral" (final.callPackage (./pkgs/ral.nix) { });
 
-  ral = final.callPackage (./pkgs/ral.nix) { };
+  rebase = f final prev "rebase" (final.callPackage (./pkgs/rebase.nix) { });
 
-  rebase = final.callPackage (./pkgs/rebase.nix) { };
+  rerebase = f final prev "rerebase" (final.callPackage (./pkgs/rerebase.nix) { });
 
-  rerebase = final.callPackage (./pkgs/rerebase.nix) { };
+  singletons = f final prev "singletons" (final.callPackage (./pkgs/singletons.nix) { });
 
-  singletons = final.callPackage (./pkgs/singletons.nix) { };
+  singletons-th = f final prev "singletons-th" (final.callPackage (./pkgs/singletons-th.nix) { });
 
-  singletons-th = final.callPackage (./pkgs/singletons-th.nix) { };
+  size-based = f final prev "size-based" (final.callPackage (./pkgs/size-based.nix) { });
 
-  size-based = final.callPackage (./pkgs/size-based.nix) { };
+  testing-type-modifiers = f final prev "testing-type-modifiers" (final.callPackage (./pkgs/testing-type-modifiers.nix) { });
 
-  testing-type-modifiers = final.callPackage (./pkgs/testing-type-modifiers.nix) { };
+  th-desugar = f final prev "th-desugar" (final.callPackage (./pkgs/th-desugar.nix) { });
 
-  th-desugar = final.callPackage (./pkgs/th-desugar.nix) { };
+  timeit = f final prev "timeit" (final.callPackage (./pkgs/timeit.nix) { });
 
-  timeit = final.callPackage (./pkgs/timeit.nix) { };
+  vector-instances = f final prev "vector-instances" (final.callPackage (./pkgs/vector-instances.nix) { });
 
-  vector-instances = final.callPackage (./pkgs/vector-instances.nix) { };
-
-  word-array = final.callPackage (./pkgs/word-array.nix) { };
+  word-array = f final prev "word-array" (final.callPackage (./pkgs/word-array.nix) { });
 
 }
diff --git a/pkgs/protolude.nix b/pkgs/protolude.nix
deleted file mode 100644
index 6b2219591bcde28635074f129783e4ee5e2cd8e5..0000000000000000000000000000000000000000
--- a/pkgs/protolude.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{ mkDerivation, array, async, base, bytestring, containers, deepseq
-, ghc-prim, hashable, lib, mtl, mtl-compat, stm, text, transformers
-, transformers-compat
-}:
-mkDerivation {
-  pname = "protolude";
-  version = "0.3.3";
-  sha256 = "6c39ded2c7e9f7b1a508e4400f0151cb325f4d80e35010c1d5afa58b48971a46";
-  revision = "2";
-  editedCabalFile = "0f949f93wml7h7na9d1n9lvignwphxr2r18jwmpy33g0dxgn21h1";
-  isLibrary = true;
-  isExecutable = false;
-  enableSeparateDataOutput = false;
-  libraryHaskellDepends = [
-    array async base bytestring containers deepseq ghc-prim hashable
-    mtl mtl-compat stm text transformers transformers-compat
-  ];
-  enableLibraryProfiling = true;
-  enableExecutableProfiling = true;
-  doHaddock = true;
-  jailbreak = true;
-  doCheck = false;
-  doBenchmark = false;
-  hyperlinkSource = false;
-  homepage = "https://github.com/sdiehl/protolude";
-  description = "A small prelude";
-  license = lib.licenses.mit;
-  broken = false;
-}
\ No newline at end of file