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
mkIf mkMerge mkOption mkOptionType;
inherit (lib.types) coercedTo enum lazyAttrsOf
optionDescriptionPhrase pathInStore submodule;
optionDescriptionPhrase pathInStore submoduleWith;
inherit (flakelight.types) nullable optFunctionTo stringLike;
isStorePath = s: match "${storeDir}/[^.][^ \n]*" s != null;
app = submodule {
app = submoduleWith {
modules = [{
options = {
type = mkOption { type = enum [ "app" ]; default = "app"; };
program = mkOption { type = pathInStore // { check = isStorePath; }; };
};
}];
};
mkApp = name: pkgs: s:

View File

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

View File

@ -400,6 +400,14 @@ in
})
(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
(flakelight ./empty {
overlay = final: prev: { testValue = "hello"; };