Files
clan-core/flakeModules/clan.nix
Johannes Kirschbauer 78563b0544 Fix(clan.nix): create public attributes from 'clan', dont expose them from clanInternals
ClanInternals is already exposed at the toplevel the API can access anything
This also deduplicated 'templates' and 'modules' into 'clan.modules' and 'clan.templates' repsectively
Only this one path is its source
2025-06-10 18:51:42 +02:00

57 lines
1.3 KiB
Nix

clan-core:
{
config,
lib,
self,
inputs,
...
}:
let
inherit (lib) types;
buildClanModule = clan-core.clanLib.buildClanModule;
publicAttrs = import ../lib/build-clan/public.nix;
# Create output options only for listed attributes
# TODO: Refactor this into an explicit module, so we can have description and other attributes to be listed in flake-parts
outputModule = {
clan = lib.genAttrs publicAttrs.clan (
name: config.clan.${name} or (throw "Output: clan.${name} not found.")
);
topLevel = {
options = lib.genAttrs publicAttrs.topLevel (_: lib.mkOption { });
config = lib.genAttrs publicAttrs.topLevel (
name: config.clan.${name} or (throw "Output: clan.${name} not found.")
);
};
};
in
{
options.clan = lib.mkOption {
default = { };
type = types.submoduleWith {
specialArgs = {
inherit clan-core self;
inherit (inputs) nixpkgs nix-darwin;
# TODO: inject the inventory interface
# inventoryInterface = {};
};
modules = [
buildClanModule.flakePartsModule
];
};
};
options.flake = {
clan = lib.mkOption { type = types.raw; };
} // outputModule.topLevel.options;
config = {
flake = {
clan = outputModule.clan;
} // outputModule.topLevel.config;
};
_file = __curPos.file;
}