mirror of
https://github.com/nix-community/flakelight.git
synced 2025-03-10 20:18:12 +01:00
Support devShells and overriding default devShell
This commit is contained in:
parent
b2721d44d5
commit
b2d353f042
20
default.nix
20
default.nix
@ -56,13 +56,17 @@ let
|
|||||||
|
|
||||||
mkFunc = v: if isFunction v then v else _: v;
|
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'; };
|
params = exports // { inherit src inputs root'; };
|
||||||
applyParams = v: mkFunc v params;
|
applyParams = v: mkFunc v params;
|
||||||
|
|
||||||
defaultModule = {
|
moduleDefaults = {
|
||||||
withOverlays = [ ];
|
withOverlays = [ ];
|
||||||
packages = { };
|
packages = { };
|
||||||
devTools = _: [ ];
|
devTools = _: [ ];
|
||||||
|
devShells = _: { };
|
||||||
env = _: { };
|
env = _: { };
|
||||||
overlays = { };
|
overlays = { };
|
||||||
apps = _: { };
|
apps = _: { };
|
||||||
@ -75,7 +79,7 @@ let
|
|||||||
|
|
||||||
normalizeModule = module:
|
normalizeModule = module:
|
||||||
let
|
let
|
||||||
module' = defaultModule // module;
|
module' = moduleDefaults // module;
|
||||||
in
|
in
|
||||||
module' // {
|
module' // {
|
||||||
withOverlays = (applyParams module'.withOverlays)
|
withOverlays = (applyParams module'.withOverlays)
|
||||||
@ -85,6 +89,10 @@ let
|
|||||||
default = module'.package;
|
default = module'.package;
|
||||||
};
|
};
|
||||||
devTools = mkFunc module'.devTools;
|
devTools = mkFunc module'.devTools;
|
||||||
|
devShells = mergeAttrFns (mkFunc module'.devShells)
|
||||||
|
(_: optionalAttrs (module' ? devShell) {
|
||||||
|
default = module'.devShell;
|
||||||
|
});
|
||||||
env = mkFunc module'.env;
|
env = mkFunc module'.env;
|
||||||
overlays = (applyParams module'.overlays)
|
overlays = (applyParams module'.overlays)
|
||||||
// optionalAttrs (module' ? overlay) {
|
// optionalAttrs (module' ? overlay) {
|
||||||
@ -104,13 +112,11 @@ let
|
|||||||
outputs = applyParams root.outputs or { };
|
outputs = applyParams root.outputs or { };
|
||||||
};
|
};
|
||||||
|
|
||||||
mergeListFns = f1: f2: args: (f1 args) ++ (f2 args);
|
|
||||||
mergeAttrFns = f1: f2: args: (f1 args) // (f2 args);
|
|
||||||
|
|
||||||
mergeModules = m1: m2: {
|
mergeModules = m1: m2: {
|
||||||
withOverlays = m1.withOverlays ++ m2.withOverlays;
|
withOverlays = m1.withOverlays ++ m2.withOverlays;
|
||||||
packages = m1.packages // m2.packages;
|
packages = m1.packages // m2.packages;
|
||||||
devTools = mergeListFns m1.devTools m2.devTools;
|
devTools = mergeListFns m1.devTools m2.devTools;
|
||||||
|
devShells = mergeAttrFns m1.devShells m2.devShells;
|
||||||
env = mergeAttrFns m1.env m2.env;
|
env = mergeAttrFns m1.env m2.env;
|
||||||
overlays = zipAttrsWith (_: composeManyExtensions)
|
overlays = zipAttrsWith (_: composeManyExtensions)
|
||||||
[ m1.overlays m2.overlays ];
|
[ m1.overlays m2.overlays ];
|
||||||
@ -122,7 +128,7 @@ let
|
|||||||
formatters = mergeAttrFns m1.formatters m2.formatters;
|
formatters = mergeAttrFns m1.formatters m2.formatters;
|
||||||
};
|
};
|
||||||
|
|
||||||
merged = foldl mergeModules defaultModule
|
merged = foldl mergeModules moduleDefaults
|
||||||
((map (m: normalizeModule (m src inputs root'))
|
((map (m: normalizeModule (m src inputs root'))
|
||||||
([ baseModule ] ++ modules)) ++ [ root' ]);
|
([ baseModule ] ++ modules)) ++ [ root' ]);
|
||||||
|
|
||||||
@ -265,7 +271,7 @@ let
|
|||||||
prev.packages.${system}.default;
|
prev.packages.${system}.default;
|
||||||
packages = merged.devTools pkgs;
|
packages = merged.devTools pkgs;
|
||||||
});
|
});
|
||||||
}))
|
} // (genPackages pkgs (merged.devShells pkgs))))
|
||||||
|
|
||||||
(eachSystem root'.perSystem)
|
(eachSystem root'.perSystem)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user