1

Suppose I have some Nixpkgs overlays composed from other overlays:

overlayFoo = self: super: {
  # ...
};
overlayBar = pkgs.lib.fixedPoints.composeExtensions overlayFoo (self: super: {
  # ...
};
overlayBaz = pkgs.lib.fixedPoints.composeExtensions overlayFoo (self: super: {
  # ...
});

And the user of the overlays would like to use them like this:

pkgs = import nixpkgs {
  inherit system;
  overlays = [overlayBar overlayBaz];
};

Since both overlayBar and overlayBaz depend on overlayFoo, how can I prevent overlayFoo from being applied more than once?

Yang Bo
  • 3,586
  • 3
  • 22
  • 35

1 Answers1

1

As mentioned in https://discourse.nixos.org/t/how-to-prevent-a-overlay-from-being-applied-more-than-once/27312/2?u=atry

You could add a marker to nixpkgs to check if the overlay has been applied already:

overlayFoo = self: super: self.lib.optionalAttrs (!super.__fooHasBeenApplied or false) {
  __fooHasBeenApplied = true;
  # ...
};
Yang Bo
  • 3,586
  • 3
  • 22
  • 35