feat(lib/buildClan): turn lib/build-clan into a 'buildClanModule' with sub-features such as 'buildClan' and 'flakePartsModule'

This commit is contained in:
Johannes Kirschbauer
2025-04-01 15:39:02 +02:00
parent 9a7ab66b3b
commit 11701d5607
3 changed files with 54 additions and 33 deletions

View File

@@ -9,6 +9,8 @@ clan-core:
}:
let
inherit (lib) types;
buildClanModule = clan-core.clanLib.buildClanModule;
in
{
@@ -20,8 +22,7 @@ in
inherit (inputs) nixpkgs;
};
modules = [
../lib/build-clan/interface.nix
../lib/build-clan/module.nix
buildClanModule.flakePartsModule
];
};
};

View File

@@ -6,36 +6,54 @@
nixpkgs,
clan-core,
}:
{
## Inputs
self ? lib.warn "Argument: 'self' must be set when using 'buildClan'." null, # Reference to the current flake
# allows to include machine-specific modules i.e. machines.${name} = { ... }
# A map from arch to pkgs, if specified this nixpkgs will be only imported once for each system.
# This improves performance, but all nipxkgs.* options will be ignored.
# deadnix: skip
inventory ? { },
## Special inputs (not passed to the module system as config)
specialArgs ? { }, # Extra arguments to pass to nixosSystem i.e. useful to make self available # A set containing clan meta: name :: string, icon :: string, description :: string
##
...
}@attrs:
let
eval = import ./function-adapter.nix {
inherit
lib
nixpkgs
clan-core
self
;
inherit specialArgs;
};
rest = builtins.removeAttrs attrs [ "specialArgs" ];
in
eval {
imports = [
rest
# implementation
./module.nix
clanResultAttributes = [
"clanInternals"
"nixosConfigurations"
];
in
{
inherit clanResultAttributes;
flakePartsModule = {
imports = [
./interface.nix
./module.nix
];
};
/**
Function that returns the same result as the correlated flake-parts module
*/
buildClan =
{
## Inputs
self ? lib.warn "Argument: 'self' must be set when using 'buildClan'." null, # Reference to the current flake
# allows to include machine-specific modules i.e. machines.${name} = { ... }
# A map from arch to pkgs, if specified this nixpkgs will be only imported once for each system.
# This improves performance, but all nipxkgs.* options will be ignored.
# deadnix: skip
inventory ? { },
## Special inputs (not passed to the module system as config)
specialArgs ? { }, # Extra arguments to pass to nixosSystem i.e. useful to make self available # A set containing clan meta: name :: string, icon :: string, description :: string
##
...
}@attrs:
let
eval = import ./function-adapter.nix {
inherit
lib
nixpkgs
clan-core
self
;
inherit specialArgs;
};
rest = builtins.removeAttrs attrs [ "specialArgs" ];
in
eval {
imports = [
rest
# implementation
./module.nix
];
};
}

View File

@@ -20,10 +20,12 @@ lib.fix (clanLib: {
clan-core = self;
pkgs = nixpkgs.legacyPackages.x86_64-linux;
};
buildClan = import ./build-clan {
buildClanModule = import ./build-clan {
inherit lib nixpkgs;
clan-core = self;
};
buildClan = clanLib.buildClanModule.buildClan;
# ------------------------------------
# Lib functions that don't depend on 'self'
inventory = clanLib.callLib ./inventory { };