61: Add option for defining flake-parts modules for downstream flakes. r=roberth a=shlevy



Co-authored-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
bors[bot] 2022-12-27 12:46:02 +00:00 committed by GitHub
commit 8bfe94414f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 97 additions and 1 deletions

45
modules/flakeModules.nix Normal file
View 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;
}
];
};
};
};
}