Merge pull request #12557 from ryanartecona/nixos-manual-custom-options

NixOS manual: allow options from nix packages

Changed files
+16 -8
nixos
doc
manual
+16 -8
nixos/doc/manual/default.nix
···
-
{ pkgs, options, version, revision }:
+
{ pkgs, options, version, revision, extraSources ? [] }:
with pkgs;
with pkgs.lib;
···
# Clean up declaration sites to not refer to the NixOS source tree.
optionsList' = flip map optionsList (opt: opt // {
-
declarations = map (fn: stripPrefix fn) opt.declarations;
+
declarations = map (fn: stripAnyPrefixes fn) opt.declarations;
}
// optionalAttrs (opt ? example) { example = substFunction opt.example; }
// optionalAttrs (opt ? default) { default = substFunction opt.default; }
// optionalAttrs (opt ? type) { type = substFunction opt.type; });
-
prefix = toString ../../..;
+
# We need to strip references to /nix/store/* from options,
+
# including any `extraSources` if some modules came from elsewhere,
+
# or else the build will fail.
+
#
+
# E.g. if some `options` came from modules in ${pkgs.customModules}/nix,
+
# you'd need to include `extraSources = [ "#{pkgs.customModules}" ]`
+
herePrefix = toString ../../..;
+
prefixesToStrip = [ herePrefix ] ++ extraSources;
-
stripPrefix = fn:
-
if substring 0 (stringLength prefix) fn == prefix then
-
substring (stringLength prefix + 1) 1000 fn
-
else
-
fn;
+
stripAnyPrefixes = fn:
+
flip (flip fold fn) prefixesToStrip (fn: prefix:
+
if substring 0 (stringLength prefix) fn == prefix then
+
substring (stringLength prefix + 1) 1000 fn
+
else
+
fn);
# Convert the list of options into an XML file.
optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList');