From 7bd2aa7e083498fee85532b68ce70de0ab90fc02 Mon Sep 17 00:00:00 2001 From: Eman Resu Date: Tue, 29 Sep 2026 22:26:55 -0400 Subject: [PATCH 1/3] lib.fixed-points.composeManyExtensions: beta reduce fold --- lib/fixed-points.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fixed-points.nix b/lib/fixed-points.nix index c80a7f72eba8..8fd3acb59813 100644 --- a/lib/fixed-points.nix +++ b/lib/fixed-points.nix @@ -409,7 +409,7 @@ rec { ``` ::: */ - composeManyExtensions = lib.foldr (x: y: composeExtensions x y) (final: prev: { }); + composeManyExtensions = lib.foldr composeExtensions (final: prev: { }); /** Create an overridable, recursive attribute set. For example: From e64ec748f1f1ebd8e9005649cb4a3b25ab4a0d4f Mon Sep 17 00:00:00 2001 From: Eman Resu Date: Tue, 29 Sep 2026 22:30:21 -0400 Subject: [PATCH 2/3] lib.fixed-points.composeExtensions: inline let variable Only used once. --- lib/fixed-points.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/fixed-points.nix b/lib/fixed-points.nix index 8fd3acb59813..699b2bc39513 100644 --- a/lib/fixed-points.nix +++ b/lib/fixed-points.nix @@ -341,9 +341,8 @@ rec { f: g: final: prev: let fApplied = f final prev; - prev' = prev // fApplied; in - fApplied // g final prev'; + fApplied // g final (prev // fApplied); /** Composes a list of [`overlays`](#chap-overlays) and returns a single overlay function that combines them. From 3647d89269bc0b0d9cc0e56da3bf33d69c4ca91a Mon Sep 17 00:00:00 2001 From: Eman Resu Date: Tue, 29 Sep 2026 22:32:34 -0400 Subject: [PATCH 3/3] lib.fixed-points.toExtension: inherit binding --- lib/fixed-points.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/fixed-points.nix b/lib/fixed-points.nix index 699b2bc39513..450b142e7d1d 100644 --- a/lib/fixed-points.nix +++ b/lib/fixed-points.nix @@ -509,13 +509,16 @@ rec { ::: */ toExtension = + let + inherit (lib) isFunction; + in f: - if lib.isFunction f then + if isFunction f then final: prev: let fPrev = f prev; in - if lib.isFunction fPrev then + if isFunction fPrev then # f is (final: prev: { ... }) f final prev else