clan services: use service modules from clan-core by default

Users will use clan-core services first before making their own. Therefore this is a better default. Also it allow us to simplify rendering of our docs
This commit is contained in:
DavHau
2025-06-30 16:03:48 +07:00
parent ae2b9313bd
commit 50cce90527
6 changed files with 43 additions and 37 deletions

View File

@@ -205,9 +205,6 @@ in
nixpkgs nixpkgs
nix-darwin nix-darwin
; ;
# By default clan.directory defaults to self, but we don't
# have a sensible default for self here
self = throw "set clan.directory in the test";
}; };
modules = [ modules = [
clan-core.modules.clan.default clan-core.modules.clan.default

View File

@@ -31,7 +31,7 @@ lib.fix (
# ------------------------------------ # ------------------------------------
# ClanLib functions # ClanLib functions
evalClan = clanLib.callLib ./modules/inventory/eval-clan-modules { }; evalClan = clanLib.callLib ./modules/inventory/eval-clan-modules { };
inventory = clanLib.callLib ./modules/inventory { }; inventory = clanLib.callLib ./modules/inventory { clan-core = self; };
modules = clanLib.callLib ./modules/inventory/frontmatter { }; modules = clanLib.callLib ./modules/inventory/frontmatter { };
test = clanLib.callLib ./test { }; test = clanLib.callLib ./test { };
# Custom types # Custom types

View File

@@ -238,7 +238,7 @@ in
imports = [ imports = [
../inventoryClass/builder/default.nix ../inventoryClass/builder/default.nix
(lib.modules.importApply ../inventoryClass/service-list-from-inputs.nix { (lib.modules.importApply ../inventoryClass/service-list-from-inputs.nix {
inherit localModuleSet flakeInputs clanLib; inherit flakeInputs clanLib localModuleSet;
}) })
{ {
inherit inventory directory; inherit inventory directory;

View File

@@ -1,6 +1,12 @@
{ lib, clanLib }: {
lib,
clanLib,
clan-core,
}:
let let
services = clanLib.callLib ./distributed-service/inventory-adapter.nix { }; services = clanLib.callLib ./distributed-service/inventory-adapter.nix {
inherit clan-core;
};
in in
{ {
inherit (services) mapInstances; inherit (services) mapInstances;

View File

@@ -12,10 +12,11 @@
{ {
lib, lib,
clanLib, clanLib,
clan-core,
... ...
}: }:
let let
resolveModule = import ./resolveModule.nix { inherit lib; }; resolveModule = import ./resolveModule.nix { inherit lib clan-core; };
in in
{ {
mapInstances = mapInstances =

View File

@@ -1,43 +1,45 @@
{ lib }: { lib, clan-core }:
{ {
moduleSpec, moduleSpec,
flakeInputs, flakeInputs,
localModuleSet, localModuleSet,
}: }:
let let
inputName = if moduleSpec.input == null then "<clan>" else moduleSpec.input;
inputError = throw ''
Flake doesn't provide input with name '${moduleSpec.input}'
Choose one of the following inputs:
- ${
builtins.concatStringsSep "\n- " (
lib.attrNames (lib.filterAttrs (_name: input: input ? clan) flakeInputs)
)
}
To import a local module from 'clan.modules' remove the 'input' attribute from the module definition
Remove the following line from the module definition:
...
- module.input = "${moduleSpec.input}"
'';
resolvedModuleSet = resolvedModuleSet =
# If the module.name is self then take the modules defined in the flake # If the module.name is self then take the modules defined in the flake
# Otherwise its an external input which provides the modules via 'clan.modules' attribute # Otherwise its an external input which provides the modules via 'clan.modules' attribute
if moduleSpec.input == null then let
localModuleSet input =
else if moduleSpec.input == null then
let clan-core
input = else if moduleSpec.input == "self" then
flakeInputs.${moduleSpec.input} or (throw '' { clan.modules = localModuleSet; }
Flake doesn't provide input with name '${moduleSpec.input}' else
flakeInputs.${moduleSpec.input} or inputError;
Choose one of the following inputs: in
- ${ input.clan.modules
builtins.concatStringsSep "\n- " ( or (throw "flake input ${moduleSpec.input} doesn't export any clan services via the `clan.modules` output attribute");
lib.attrNames (lib.filterAttrs (_name: input: input ? clan) flakeInputs)
)
}
To import a local module from 'clan.modules' remove the 'input' attribute from the module definition
Remove the following line from the module definition:
...
- module.input = "${moduleSpec.input}"
'');
clanAttrs =
input.clan
or (throw "It seems the flake input ${moduleSpec.input} doesn't export any clan resources");
in
clanAttrs.modules;
resolvedModule = resolvedModule =
resolvedModuleSet.${moduleSpec.name} resolvedModuleSet.${moduleSpec.name}
or (throw "flake doesn't provide clan-module with name ${moduleSpec.name}"); or (throw "flake input '${inputName}' doesn't provide clan-module with name ${moduleSpec.name}");
in in
resolvedModule resolvedModule