Add option for defining flake-parts modules for downstream flakes.
This commit is contained in:
parent
98bec08c58
commit
f3c79bef3b
4 changed files with 80 additions and 1 deletions
45
modules/flakeModules.nix
Normal file
45
modules/flakeModules.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{ config, self, lib, flake-parts-lib, ... }:
|
||||
let
|
||||
inherit (lib)
|
||||
filterAttrs
|
||||
mapAttrs
|
||||
mkOption
|
||||
optionalAttrs
|
||||
types
|
||||
;
|
||||
inherit (flake-parts-lib)
|
||||
mkAliasOptionModule
|
||||
;
|
||||
|
||||
flakeModulesOption = mkOption {
|
||||
type = types.lazyAttrsOf types.deferredModule;
|
||||
default = { };
|
||||
apply = mapAttrs (k: v: {
|
||||
_file = "${toString self.outPath}/flake.nix#flakeModules.${k}";
|
||||
imports = [ v ];
|
||||
});
|
||||
description = ''
|
||||
flake-parts modules for use by other flakes.
|
||||
|
||||
If the flake defines only one module, it should be flakeModules.default.
|
||||
|
||||
You can not use this option in defining the flake's own `imports`. Instead, you can
|
||||
put the module in question into its own file and reference it both in `imports` and
|
||||
export it with this option.
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options = {
|
||||
flake = mkOption {
|
||||
type = types.submoduleWith {
|
||||
modules = [
|
||||
(mkAliasOptionModule [ "flakeModule" ] [ "flakeModules" "default" ])
|
||||
{
|
||||
options.flakeModules = flakeModulesOption;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue