clan-core/pkgs/schemas/flake-module.nix

68 lines
2.0 KiB
Nix
Raw Normal View History

{ self, ... }:
{
perSystem =
{ pkgs, lib, ... }:
let
clanModules = self.clanModules;
# Uncomment if you only want one module to be available
# clanModules = {
# borgbackup = self.clanModules.borgbackup;
# };
baseModule = {
imports = (import (pkgs.path + "/nixos/modules/module-list.nix")) ++ [
{
nixpkgs.hostPlatform = "x86_64-linux";
clanCore.clanName = "dummy";
}
];
};
optionsFromModule =
modulename: module:
let
evaled = lib.evalModules {
modules = [
module
baseModule
self.nixosModules.clanCore
];
};
in
# Filter out "injected" options that are not part of the module
if (evaled.options.clan ? "${modulename}") then evaled.options.clan.${modulename} else { };
clanModuleSchemas = lib.mapAttrs (
modulename: module: self.lib.jsonschema.parseOptions (optionsFromModule modulename module)
) clanModules;
clanModuleFunctionSchemas = lib.mapAttrsFlatten (modulename: module: {
name = modulename;
description = self.lib.modules.getShortDescription modulename;
parameters = self.lib.jsonschema.parseOptions (optionsFromModule modulename module);
}) clanModules;
in
rec {
checks = {
module-schema = pkgs.runCommand "schema-checks" { } ''
${pkgs.check-jsonschema}/bin/check-jsonschema \
2024-05-03 16:22:20 +00:00
--check-metaschema ${packages.module-schema}
touch $out
'';
};
packages = {
module-schema = pkgs.runCommand "jsonschema" { } ''
MSCHEMA=${builtins.toFile "module-schemas.json" (builtins.toJSON clanModuleSchemas)}
cp "$MSCHEMA" $out
'';
function-schema = pkgs.runCommand "function-schema" { } ''
FSCHEMA=${builtins.toFile "function-schemas.json" (builtins.toJSON clanModuleFunctionSchemas)}
cp "$FSCHEMA" $out
'';
};
};
}