Merge pull request 'remove renderClanOptions' (#2237) from Mic92-cleanup-options into main

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/2237
This commit is contained in:
Mic92
2024-10-09 13:14:03 +00:00
6 changed files with 32 additions and 77 deletions

View File

@@ -18,19 +18,6 @@
{ {
checks = checks =
let let
# ensure all options can be rendered after importing clan into nixos
renderClanOptions =
let
docs = pkgs.nixosOptionsDoc {
options =
(pkgs.nixos {
imports = [ self.nixosModules.clanCore ];
clan.core.clanDir = ./.;
}).options;
warningsAreErrors = false;
};
in
docs.optionsJSON;
nixosTestArgs = { nixosTestArgs = {
# reference to nixpkgs for the current system # reference to nixpkgs for the current system
inherit pkgs; inherit pkgs;
@@ -61,7 +48,7 @@
self'.legacyPackages.homeConfigurations or { } self'.legacyPackages.homeConfigurations or { }
); );
in in
{ inherit renderClanOptions; } // nixosTests // flakeOutputs; nixosTests // flakeOutputs;
legacyPackages = { legacyPackages = {
nixosTests = nixosTests =
let let

View File

@@ -11,11 +11,9 @@
buildClanOptions = self'.legacyPackages.clan-internals-docs; buildClanOptions = self'.legacyPackages.clan-internals-docs;
# Simply evaluated options (JSON) # Simply evaluated options (JSON)
# { clanCore = «derivation JSON»; clanModules = { ${name} = «derivation JSON» }; } # { clanCore = «derivation JSON»; clanModules = { ${name} = «derivation JSON» }; }
jsonDocs = import ./get-module-docs.nix { jsonDocs = pkgs.callPackage ./get-module-docs.nix {
inherit (inputs) nixpkgs;
inherit pkgs;
inherit (self.nixosModules) clanCore;
inherit (self) clanModules; inherit (self) clanModules;
evalClanModules = self.lib.evalClanModules;
}; };
clanModulesFileInfo = pkgs.writeText "info.json" (builtins.toJSON jsonDocs.clanModules); clanModulesFileInfo = pkgs.writeText "info.json" (builtins.toJSON jsonDocs.clanModules);

View File

@@ -1,47 +1,22 @@
{ {
nixpkgs, nixosOptionsDoc,
pkgs,
clanCore,
clanModules, clanModules,
evalClanModules,
lib,
}: }:
let {
allNixosModules = (import "${nixpkgs}/nixos/modules/module-list.nix") ++ [
"${nixpkgs}/nixos/modules/misc/assertions.nix"
{ nixpkgs.hostPlatform = "x86_64-linux"; }
];
clanCoreNixosModules = [
clanCore
{ clan.core.clanDir = ./.; }
] ++ allNixosModules;
# TODO: optimally we would not have to evaluate all nixos modules for every page
# but some of our module options secretly depend on nixos modules.
# We would have to get rid of these implicit dependencies and make them explicit
clanCoreNixos = pkgs.nixos { imports = clanCoreNixosModules; };
# using extendModules here instead of re-evaluating nixos every time
# improves eval performance slightly (10%)
getOptions = modules: (clanCoreNixos.extendModules { inherit modules; }).options;
getOptionsWithoutCore = modules: builtins.removeAttrs (getOptions modules) [ "core" ];
evalDocs =
options:
pkgs.nixosOptionsDoc {
options = options;
warningsAreErrors = true;
};
# clanModules docs # clanModules docs
clanModulesDocs = builtins.mapAttrs ( clanModules = lib.mapAttrs (
name: module: (evalDocs ((getOptionsWithoutCore [ module ]).clan.${name} or { })).optionsJSON name: module:
(nixosOptionsDoc {
options = ((evalClanModules [ module ]).options).clan.${name} or { };
warningsAreErrors = true;
}).optionsJSON
) clanModules; ) clanModules;
# clanCore docs clanCore =
clanCoreDocs = (evalDocs (getOptions [ ]).clan.core).optionsJSON; (nixosOptionsDoc {
in options = ((evalClanModules [ ]).options).clan.core or { };
{ warningsAreErrors = true;
clanCore = clanCoreDocs; }).optionsJSON;
clanModules = clanModulesDocs;
} }

View File

@@ -5,7 +5,10 @@
... ...
}: }:
let let
eval = import ./eval-clan-modules { inherit clan-core nixpkgs lib; }; eval = import ./eval-clan-modules {
inherit clan-core lib;
pkgs = nixpkgs.legacyPackages.x86_64-linux;
};
in in
{ {
inherit (eval) evalClanModules evalClanModulesWithRoles; inherit (eval) evalClanModules evalClanModulesWithRoles;

View File

@@ -1,26 +1,23 @@
{ {
nixpkgs,
clan-core, clan-core,
lib, lib,
pkgs,
}: }:
let let
inherit (import nixpkgs { system = "x86_64-linux"; }) pkgs;
inherit (clan-core) clanModules;
baseModule = { baseModule = {
imports = (import (pkgs.path + "/nixos/modules/module-list.nix")) ++ [ imports = (import (pkgs.path + "/nixos/modules/module-list.nix")) ++ [
{ {
nixpkgs.hostPlatform = "x86_64-linux"; nixpkgs.pkgs = pkgs;
clan.core.name = "dummy"; clan.core.name = "dummy";
system.stateVersion = lib.version;
} }
]; ];
}; };
# This function takes a list of module names and evaluates them # This function takes a list of module names and evaluates them
# evalClanModules :: [ String ] -> { config, options, ... } # evalClanModules :: [ module ] -> { config, options, ... }
evalClanModulesLegacy = evalClanModulesLegacy =
modulenames: modules:
let let
evaled = lib.evalModules { evaled = lib.evalModules {
modules = [ modules = [
@@ -29,7 +26,7 @@ let
clan.core.clanDir = clan-core; clan.core.clanDir = clan-core;
} }
clan-core.nixosModules.clanCore clan-core.nixosModules.clanCore
] ++ (map (name: clanModules.${name}) modulenames); ] ++ modules;
}; };
in in
# lib.warn '' # lib.warn ''

View File

@@ -12,23 +12,18 @@
# borgbackup = self.clanModules.borgbackup; # borgbackup = self.clanModules.borgbackup;
# }; # };
optionsFromModule = optionsFromModule = name: module: (self.lib.evalClanModules [ module ]).options.clan.${name} or { };
mName:
let
eval = self.lib.evalClanModules [ mName ];
in
if (eval.options.clan ? "${mName}") then eval.options.clan.${mName} else { };
clanModuleSchemas = lib.mapAttrs ( clanModuleSchemas = lib.mapAttrs (
modulename: _: jsonLib.parseOptions (optionsFromModule modulename) { } name: module: jsonLib.parseOptions (optionsFromModule name module) { }
) clanModules; ) clanModules;
clanModuleFunctionSchemas = lib.attrsets.mapAttrsToList ( clanModuleFunctionSchemas = lib.attrsets.mapAttrsToList (
modulename: _: modulename: module:
(self.lib.modules.getFrontmatter modulename) (self.lib.modules.getFrontmatter modulename)
// { // {
name = modulename; name = modulename;
parameters = jsonLib.parseOptions (optionsFromModule modulename) { }; parameters = jsonLib.parseOptions (optionsFromModule modulename module) { };
} }
) clanModules; ) clanModules;
in in