forked from DGNum/liminix
32 lines
1,019 B
Nix
32 lines
1,019 B
Nix
{ eval, lib, pkgs }:
|
|
let
|
|
inherit (lib) types;
|
|
conf = eval.config;
|
|
rootDir = builtins.toPath ./..;
|
|
stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix)
|
|
["${rootDir}/"];
|
|
optToDoc = name: opt : {
|
|
inherit name;
|
|
description = opt.description or null;
|
|
default = opt.default or null;
|
|
visible =
|
|
if (opt ? visible && opt.visible == "shallow")
|
|
then true
|
|
else opt.visible or true;
|
|
readOnly = opt.readOnly or false;
|
|
type = opt.type.description or "unspecified";
|
|
};
|
|
spliceServiceDefn = item :
|
|
if item.type == "parametrisable s6-rc service definition"
|
|
then
|
|
let sd = lib.attrByPath item.loc ["not found"] conf;
|
|
in item // {
|
|
declarations = map stripAnyPrefixes item.declarations;
|
|
parameters =
|
|
let x = lib.mapAttrsToList optToDoc sd.parameters; in x;
|
|
}
|
|
else
|
|
item // { declarations = map stripAnyPrefixes item.declarations; };
|
|
in
|
|
builtins.map spliceServiceDefn
|
|
(pkgs.lib.optionAttrSetToDocList eval.options)
|