Use submoduleWith instead of submodule

This results in not enabling shorthandOnlyDefinesConfig, allowing
imports to be set in submodules. This can, for example, allow a devShell
to import another devShell's config to extend it.
This commit is contained in:
Archit Gupta 2024-03-21 04:10:38 -07:00
parent 5fe9313894
commit fe5916eb40
3 changed files with 18 additions and 8 deletions

View File

@ -8,16 +8,18 @@ let
inherit (lib) defaultFunctor fix isFunction last mapAttrs mergeDefinitions inherit (lib) defaultFunctor fix isFunction last mapAttrs mergeDefinitions
mkIf mkMerge mkOption mkOptionType; mkIf mkMerge mkOption mkOptionType;
inherit (lib.types) coercedTo enum lazyAttrsOf inherit (lib.types) coercedTo enum lazyAttrsOf
optionDescriptionPhrase pathInStore submodule; optionDescriptionPhrase pathInStore submoduleWith;
inherit (flakelight.types) nullable optFunctionTo stringLike; inherit (flakelight.types) nullable optFunctionTo stringLike;
isStorePath = s: match "${storeDir}/[^.][^ \n]*" s != null; isStorePath = s: match "${storeDir}/[^.][^ \n]*" s != null;
app = submodule { app = submoduleWith {
options = { modules = [{
type = mkOption { type = enum [ "app" ]; default = "app"; }; options = {
program = mkOption { type = pathInStore // { check = isStorePath; }; }; type = mkOption { type = enum [ "app" ]; default = "app"; };
}; program = mkOption { type = pathInStore // { check = isStorePath; }; };
};
}];
}; };
mkApp = name: pkgs: s: mkApp = name: pkgs: s:

View File

@ -6,7 +6,7 @@
let let
inherit (lib) filterAttrs functionArgs mapAttrs mkIf mkMerge mkOption; inherit (lib) filterAttrs functionArgs mapAttrs mkIf mkMerge mkOption;
inherit (lib.types) coercedTo lazyAttrsOf lines listOf inherit (lib.types) coercedTo lazyAttrsOf lines listOf
package str submodule; package str submoduleWith;
inherit (flakelight) supportedSystem; inherit (flakelight) supportedSystem;
inherit (flakelight.types) function nullable optCallWith optFunctionTo; inherit (flakelight.types) function nullable optCallWith optFunctionTo;
@ -53,7 +53,7 @@ let
devShellType = coercedTo function wrapFn devShellType = coercedTo function wrapFn
(optFunctionTo (coercedTo package packageOverride (optFunctionTo (coercedTo package packageOverride
(submodule devShellModule))); (submoduleWith { modules = [ devShellModule ]; })));
genDevShell = pkgs: cfg: genDevShell = pkgs: cfg:
if cfg.overrideShell != null then cfg.overrideShell if cfg.overrideShell != null then cfg.overrideShell

View File

@ -400,6 +400,14 @@ in
}) })
(f: f ? devShells.x86_64-linux.default); (f: f ? devShells.x86_64-linux.default);
devShells-import = test
(flakelight ./empty ({ config, ... }: {
devShell.inputsFrom = pkgs: [ pkgs.emacs ];
devShells.shell1 = pkgs: { imports = [ (config.devShell pkgs) ]; };
}))
(f: (lib.isDerivation f.devShells.x86_64-linux.default)
&& (lib.isDerivation f.devShells.x86_64-linux.shell1));
overlay = test overlay = test
(flakelight ./empty { (flakelight ./empty {
overlay = final: prev: { testValue = "hello"; }; overlay = final: prev: { testValue = "hello"; };