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:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 ''
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user