{ config, pkgs, lib, mkDomain, ... }: { options = with lib; { #services.docs-to-host.enable = mkEnable "docs-to-host"; 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 at which the documentation will be linked"; }; 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''; }; }; config = let cfg = config.services.docs-to-host; mkRow = {dirname, basename, path, desc}: ''${dirname}${desc}''; mkEntry = {dirname, basename, path, desc}: { name = dirname; path = path; }; in { services.nginx.virtualHosts.${mkDomain "docs"} = { forceSSL = true; # addSSL = true; enableACME = true; #useACMEHost = acmeDomain; root = pkgs.linkFarm "docs-html" ([{name = "index.html"; path = pkgs.writeText "docs-index.html" ''
URLDesc ${lib.concatStringsSep "\n" ( builtins.map mkRow cfg.docs ) }
''; }] ++ (builtins.map mkEntry cfg.docs)); }; }; }