From b2d353f042f658502e9e1a93d8aed6d77565c595 Mon Sep 17 00:00:00 2001 From: Archit Gupta Date: Sat, 15 Apr 2023 01:29:54 -0700 Subject: [PATCH] Support devShells and overriding default devShell --- default.nix | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/default.nix b/default.nix index 863fe57..764c715 100644 --- a/default.nix +++ b/default.nix @@ -56,13 +56,17 @@ let mkFunc = v: if isFunction v then v else _: v; + mergeListFns = f1: f2: args: (f1 args) ++ (f2 args); + mergeAttrFns = f1: f2: args: (f1 args) // (f2 args); + params = exports // { inherit src inputs root'; }; applyParams = v: mkFunc v params; - defaultModule = { + moduleDefaults = { withOverlays = [ ]; packages = { }; devTools = _: [ ]; + devShells = _: { }; env = _: { }; overlays = { }; apps = _: { }; @@ -75,7 +79,7 @@ let normalizeModule = module: let - module' = defaultModule // module; + module' = moduleDefaults // module; in module' // { withOverlays = (applyParams module'.withOverlays) @@ -85,6 +89,10 @@ let default = module'.package; }; devTools = mkFunc module'.devTools; + devShells = mergeAttrFns (mkFunc module'.devShells) + (_: optionalAttrs (module' ? devShell) { + default = module'.devShell; + }); env = mkFunc module'.env; overlays = (applyParams module'.overlays) // optionalAttrs (module' ? overlay) { @@ -104,13 +112,11 @@ let outputs = applyParams root.outputs or { }; }; - mergeListFns = f1: f2: args: (f1 args) ++ (f2 args); - mergeAttrFns = f1: f2: args: (f1 args) // (f2 args); - mergeModules = m1: m2: { withOverlays = m1.withOverlays ++ m2.withOverlays; packages = m1.packages // m2.packages; devTools = mergeListFns m1.devTools m2.devTools; + devShells = mergeAttrFns m1.devShells m2.devShells; env = mergeAttrFns m1.env m2.env; overlays = zipAttrsWith (_: composeManyExtensions) [ m1.overlays m2.overlays ]; @@ -122,7 +128,7 @@ let formatters = mergeAttrFns m1.formatters m2.formatters; }; - merged = foldl mergeModules defaultModule + merged = foldl mergeModules moduleDefaults ((map (m: normalizeModule (m src inputs root')) ([ baseModule ] ++ modules)) ++ [ root' ]); @@ -265,7 +271,7 @@ let prev.packages.${system}.default; packages = merged.devTools pkgs; }); - })) + } // (genPackages pkgs (merged.devShells pkgs)))) (eachSystem root'.perSystem)