{ config, pkgs, lib, mkDomain, flakes, ... }: let cfg = config.services.docs-to-host; # https://pagefind.app/docs/ui-usage/ pagefind-default-ui = ''
''; # TODO: symlink dotfiles to $out # TODO: ability to set fallback for unknown languages, instead of --force-language en # TODO: for some reason pagefind is not able to work with symlinks as input. is it a one-file-system restriction? # TODO: for some reason pagefind requires write access to other files than pagefind/ addPagefindIndex = root: pkgs.runCommand "${root.name}-with-pagefind" { nativeBuildInputs = [ cfg.pagefind.package pkgs.rsync ]; } '' #mkdir $out #cd $out #ln -s ${root}/* . # workaround pagefind shortcomings... mkdir foobar cd foobar time rsync -r --chmod +rw --copy-links ${root}/ . test ! -e pagefind || { >&2 echo 'ERROR: `root` input has `pagefind` already in it!' false } pagefind --site . --force-language en mkdir $out ln -s ${root}/* $out/ cp -a pagefind $out ''; in { options = with lib; { services.docs-to-host.enable = mkEnableOption (lib.mdDoc "docs-to-host"); services.docs-to-host.pagefind = { enable = mkEnableOption (lib.mdDoc "pagefind default on index of docs"); package = mkPackageOptionMD flakes.unstable.pkgs "pagefind" { }; }; services.docs-to-host.docs = mkOption { type = types.listOf (types.submodule { options = { dirname = mkOption { type = types.str; example = "linux-doc"; description = lib.mdDoc "The relative dirname at which the documentation will be linked"; }; basename = mkOption { type = types.str; example = "foobar.html"; default = ""; description = lib.mdDoc "The basename to which the documentation entry will be linked. Not needed if index.html exists."; }; path = mkOption { type = types.path; example = lib.literalExpression "pkgs.fetchzip {...}"; description = lib.mdDoc "The static html documentation to host"; }; desc = mkOption { type = types.str; #description = "A short decription about the hosted documentation in markdown."; description = "A short decription about the hosted documentation."; }; }; }); default = [ ]; #description = lib.mdDoc ''TODO''; }; }; # TODO: host man pages (man -H) config = let mkLinkFarmEntry = {dirname, path, ...}: { name = dirname; path = path; }; mkRow = {dirname, basename, path, desc}: ''URL | Desc ${lib.concatStringsSep "\n" ( builtins.map mkRow cfg.docs ) } |
---|