nix-community.nixvim/docs/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

141 lines
3.6 KiB
Nix
Raw Permalink Normal View History

2024-07-08 07:32:53 +01:00
{
helpers,
system,
nixvim,
nixpkgs,
nuschtosSearch,
2024-07-08 07:32:53 +01:00
}:
let
# 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
# 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
;
}
);
nixvimPath = toString ./..;
2023-08-24 14:50:16 +03:30
gitHubDeclaration = user: repo: branch: subpath: {
url = "https://github.com/${user}/${repo}/blob/${branch}/${subpath}";
name = "<${repo}/${subpath}>";
};
2023-08-24 14:50:16 +03:30
transformOptions =
opt:
opt
// {
declarations = map (
decl:
if lib.hasPrefix nixvimPath (toString decl) then
gitHubDeclaration "nix-community" "nixvim" "main" (
lib.removePrefix "/" (lib.removePrefix nixvimPath (toString decl))
2024-05-05 19:39:35 +02:00
)
else if decl == "lib/modules.nix" then
gitHubDeclaration "NixOS" "nixpkgs" "master" decl
else
decl
) opt.declarations;
};
2024-09-20 11:47:57 +01:00
evaledModules = helpers.modules.evalNixvim {
2024-08-02 01:45:45 +01:00
modules = [
{
isDocs = true;
_module.args.pkgs = lib.mkForce noPkgs;
}
2024-08-02 01:45:45 +01:00
];
};
2024-05-05 19:39:35 +02:00
options-json =
(pkgs.nixosOptionsDoc {
2024-08-02 01:45:45 +01:00
inherit (evaledModules) options;
inherit transformOptions;
}).optionsJSON;
in
lib.fix (
self:
{
inherit options-json;
inherit (pkgs) nixos-render-docs;
gfm-alerts-to-admonitions = pkgs.python3.pkgs.callPackage ./gfm-alerts-to-admonitions { };
2024-09-11 19:12:19 +02:00
man-docs = pkgs.callPackage ./man {
inherit options-json;
inherit (self) lib-docs;
};
lib-docs = pkgs.callPackage ./lib {
inherit nixvim lib;
};
}
// lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
# NuschtOS/search does not seem to work on darwin
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 = "/";
};
# Do not check if documentation builds fine on darwin as it fails:
# > sandbox-exec: pattern serialization length 69298 exceeds maximum (65535)
docs = pkgs.callPackage ./mdbook {
2024-10-21 17:17:15 +01:00
inherit evaledModules transformOptions;
inherit (self) search lib-docs;
};
serve-docs = pkgs.callPackage ./server {
inherit (self) docs;
};
}
)