2024-07-08 07:32:53 +01:00
|
|
|
{
|
2024-12-21 13:40:16 +00:00
|
|
|
helpers,
|
2024-09-12 12:55:33 +01:00
|
|
|
system,
|
2025-03-05 20:44:36 +00:00
|
|
|
nixvim,
|
2024-09-12 12:55:33 +01:00
|
|
|
nixpkgs,
|
2024-07-19 20:14:20 +02:00
|
|
|
nuschtosSearch,
|
2024-07-08 07:32:53 +01:00
|
|
|
}:
|
2024-01-12 23:22:03 +01:00
|
|
|
let
|
2024-09-12 12:55:33 +01:00
|
|
|
# We overlay a few tweaks into pkgs, for use in the docs
|
|
|
|
pkgs = import ./pkgs.nix { inherit system nixpkgs; };
|
|
|
|
inherit (pkgs) lib;
|
2024-07-06 00:22:17 +01:00
|
|
|
|
2025-01-24 21:22:01 +00:00
|
|
|
# A stub pkgs instance used while evaluating the nixvim modules for the docs
|
|
|
|
# If any non-meta attr is accessed, the eval will throw
|
|
|
|
noPkgs =
|
|
|
|
let
|
|
|
|
# Known suffixes for package sets
|
|
|
|
suffixes = [
|
|
|
|
"Plugins"
|
|
|
|
"Packages"
|
|
|
|
];
|
|
|
|
|
|
|
|
# Predicate for whether an attr name looks like a package set
|
|
|
|
# Determines whether stubPackage should recurse
|
|
|
|
isPackageSet = name: builtins.any (lib.flip lib.strings.hasSuffix name) suffixes;
|
|
|
|
|
|
|
|
# Need to retain `meta.homepage` if present
|
|
|
|
stubPackage =
|
|
|
|
prefix: name: package:
|
|
|
|
let
|
|
|
|
loc = prefix ++ [ name ];
|
|
|
|
in
|
|
|
|
if isPackageSet name then
|
|
|
|
lib.mapAttrs (stubPackage loc) package
|
|
|
|
else
|
|
|
|
lib.mapAttrs (_: throwAccessError loc) package
|
|
|
|
// lib.optionalAttrs (package ? meta) { inherit (package) meta; };
|
|
|
|
|
|
|
|
throwAccessError =
|
|
|
|
loc:
|
|
|
|
throw "Attempted to access `${
|
|
|
|
lib.concatStringsSep "." ([ "pkgs" ] ++ loc)
|
|
|
|
}` while rendering the docs.";
|
|
|
|
in
|
|
|
|
lib.fix (
|
|
|
|
self:
|
|
|
|
lib.mapAttrs (stubPackage [ ]) pkgs
|
|
|
|
// {
|
|
|
|
pkgs = self;
|
|
|
|
# The following pkgs attrs are required to eval nixvim, even for the docs:
|
|
|
|
inherit (pkgs)
|
|
|
|
_type
|
|
|
|
stdenv
|
|
|
|
stdenvNoCC
|
|
|
|
symlinkJoin
|
|
|
|
runCommand
|
|
|
|
runCommandLocal
|
|
|
|
writeShellApplication
|
|
|
|
;
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
2024-01-12 23:22:03 +01:00
|
|
|
nixvimPath = toString ./..;
|
2023-08-24 14:50:16 +03:30
|
|
|
|
2024-03-22 12:00:43 +00:00
|
|
|
gitHubDeclaration = user: repo: branch: subpath: {
|
|
|
|
url = "https://github.com/${user}/${repo}/blob/${branch}/${subpath}";
|
2024-01-12 23:22:03 +01:00
|
|
|
name = "<${repo}/${subpath}>";
|
|
|
|
};
|
2023-08-24 14:50:16 +03:30
|
|
|
|
2024-01-12 23:22:03 +01:00
|
|
|
transformOptions =
|
|
|
|
opt:
|
|
|
|
opt
|
|
|
|
// {
|
|
|
|
declarations = map (
|
|
|
|
decl:
|
2024-02-03 19:04:09 +01:00
|
|
|
if lib.hasPrefix nixvimPath (toString decl) then
|
2024-03-22 12:00:43 +00:00
|
|
|
gitHubDeclaration "nix-community" "nixvim" "main" (
|
2024-02-03 19:04:09 +01:00
|
|
|
lib.removePrefix "/" (lib.removePrefix nixvimPath (toString decl))
|
2024-05-05 19:39:35 +02:00
|
|
|
)
|
2024-01-12 23:22:03 +01:00
|
|
|
else if decl == "lib/modules.nix" then
|
2024-03-22 12:00:43 +00:00
|
|
|
gitHubDeclaration "NixOS" "nixpkgs" "master" decl
|
2024-01-12 23:22:03 +01:00
|
|
|
else
|
|
|
|
decl
|
|
|
|
) opt.declarations;
|
2023-08-07 13:18:01 +03:30
|
|
|
};
|
|
|
|
|
2024-09-20 11:47:57 +01:00
|
|
|
evaledModules = helpers.modules.evalNixvim {
|
2024-08-02 01:45:45 +01:00
|
|
|
modules = [
|
2024-08-14 05:31:27 +01:00
|
|
|
{
|
|
|
|
isDocs = true;
|
2025-01-24 21:22:01 +00:00
|
|
|
_module.args.pkgs = lib.mkForce noPkgs;
|
2024-08-14 05:31:27 +01:00
|
|
|
}
|
2024-08-02 01:45:45 +01:00
|
|
|
];
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
2024-02-03 19:04:09 +01:00
|
|
|
options-json =
|
2024-09-12 12:55:33 +01:00
|
|
|
(pkgs.nixosOptionsDoc {
|
2024-08-02 01:45:45 +01:00
|
|
|
inherit (evaledModules) options;
|
2024-02-03 19:04:09 +01:00
|
|
|
inherit transformOptions;
|
|
|
|
}).optionsJSON;
|
2024-07-19 20:14:20 +02:00
|
|
|
|
|
|
|
in
|
2024-11-18 17:48:37 +00:00
|
|
|
lib.fix (
|
|
|
|
self:
|
|
|
|
{
|
|
|
|
inherit options-json;
|
|
|
|
inherit (pkgs) nixos-render-docs;
|
2024-07-19 20:14:20 +02:00
|
|
|
|
2024-11-18 17:48:37 +00:00
|
|
|
gfm-alerts-to-admonitions = pkgs.python3.pkgs.callPackage ./gfm-alerts-to-admonitions { };
|
2024-09-11 19:12:19 +02:00
|
|
|
|
2025-05-15 14:54:58 +01:00
|
|
|
man-docs = pkgs.callPackage ./man {
|
|
|
|
inherit options-json;
|
|
|
|
inherit (self) lib-docs;
|
|
|
|
};
|
2025-03-05 20:44:36 +00:00
|
|
|
|
|
|
|
lib-docs = pkgs.callPackage ./lib {
|
|
|
|
inherit nixvim lib;
|
|
|
|
};
|
2024-11-18 17:48:37 +00:00
|
|
|
}
|
|
|
|
// lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
|
2024-07-19 20:14:20 +02:00
|
|
|
# NuschtOS/search does not seem to work on darwin
|
2024-11-18 17:48:37 +00:00
|
|
|
search = nuschtosSearch.packages.mkSearch {
|
|
|
|
optionsJSON = options-json + "/share/doc/nixos/options.json";
|
|
|
|
urlPrefix = "https://github.com/nix-community/nixvim/tree/main";
|
|
|
|
title = "Nixvim options search";
|
|
|
|
baseHref = "/";
|
|
|
|
};
|
2024-07-19 20:14:20 +02:00
|
|
|
|
|
|
|
# Do not check if documentation builds fine on darwin as it fails:
|
|
|
|
# > sandbox-exec: pattern serialization length 69298 exceeds maximum (65535)
|
2024-09-12 12:55:33 +01:00
|
|
|
docs = pkgs.callPackage ./mdbook {
|
2024-10-21 17:17:15 +01:00
|
|
|
inherit evaledModules transformOptions;
|
2025-05-15 14:24:55 +01:00
|
|
|
inherit (self) search lib-docs;
|
2024-07-19 20:14:20 +02:00
|
|
|
};
|
2025-05-21 17:27:28 +01:00
|
|
|
|
|
|
|
serve-docs = pkgs.callPackage ./server {
|
|
|
|
inherit (self) docs;
|
|
|
|
};
|
2024-07-19 20:14:20 +02:00
|
|
|
}
|
|
|
|
)
|