diff --git a/lib/jsonschema/default.nix b/lib/jsonschema/default.nix index 66f9b8fe..8c29cf02 100644 --- a/lib/jsonschema/default.nix +++ b/lib/jsonschema/default.nix @@ -17,7 +17,7 @@ let location: ${lib.concatStringsSep "." option.loc} ''; - # Exclude the option if it's type is in the excludedTypes list + # Exclude the option if its type is in the excludedTypes list # or if the option has a defaultText attribute isExcludedOption = option: ((lib.elem (option.type.name or null) excludedTypes) || (option ? defaultText)); @@ -26,6 +26,9 @@ let filterExcludedAttrs = lib.filterAttrs (_name: opt: !isExcludedOption opt); + # Filter out options where the visible attribute is set to false + filterInvisibleOpts = lib.filterAttrs (_name: opt: opt.visible or true); + allBasicTypes = [ "boolean" "integer" @@ -50,7 +53,7 @@ rec { parseOptions = options': let - options = filterExcludedAttrs (clean options'); + options = filterInvisibleOpts (filterExcludedAttrs (clean options')); # parse options to jsonschema properties properties = lib.mapAttrs (_name: option: parseOption option) options; # TODO: figure out how to handle if prop.anyOf is used diff --git a/pkgs/schemas/flake-module.nix b/pkgs/schemas/flake-module.nix index c124f44a..a9a81426 100644 --- a/pkgs/schemas/flake-module.nix +++ b/pkgs/schemas/flake-module.nix @@ -7,7 +7,7 @@ # Uncomment if you only want one module to be available # clanModules = { - # syncthing = self.clanModules.syncthing; + # borgbackup = self.clanModules.borgbackup; # }; baseModule = { @@ -30,6 +30,7 @@ ]; }; 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 (