diff --git a/docs/customization.md b/docs/customization.md index 115c2475..4c1dab5b 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -64,6 +64,7 @@ Instead of using the super-plugins, for finer-grained control you can always add - `TypelevelSitePlugin`: Sets up an [mdoc](https://scalameta.org/mdoc/)/[Laika](https://planet42.github.io/Laika/)-generated website, automatically published to GitHub pages in CI. - `tlSitePublishBranch` (setting): The branch to publish the site from on every push. Set this to `None` if you only want to update the site on tag releases. (default: `main`) - `tlSitePublishTags` (setting): Defines whether the site should be published on tag releases. Note on setting this to `true` requires the `tlSitePublishBranch` setting to be set to `None`. (default: `false`) +- `tlSiteApiLinks` (setting): Map of package prefixes to API documentation sites for use with Laika API links. (default: * -> `tlSiteApiUrl`, if available) - `tlSiteApiUrl` (setting): URL to the API docs. (default: `None`) - `tlSiteHeliumConfig` (setting): the Laika Helium config. (default: how the sbt-typelevel site looks) diff --git a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala index 122a8ce8..a22bcdf0 100644 --- a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala +++ b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala @@ -23,6 +23,8 @@ import laika.helium.config.Favicon import laika.helium.config.HeliumIcon import laika.helium.config.IconLink import laika.helium.config.ImageLink +import laika.rewrite.link.ApiLinks +import laika.rewrite.link.LinkConfig import laika.sbt.LaikaPlugin import laika.theme.ThemeProvider import mdoc.MdocPlugin @@ -45,6 +47,8 @@ object TypelevelSitePlugin extends AutoPlugin { lazy val tlSiteHeliumConfig = settingKey[Helium]("The Typelevel Helium configuration") lazy val tlSiteHeliumExtensions = settingKey[ThemeProvider]("The Typelevel Helium extensions") + lazy val tlSiteApiLinks = + settingKey[Map[String, URL]]("URLs to API doc roots, by package prefix") lazy val tlSiteApiUrl = settingKey[Option[URL]]("URL to the API docs") lazy val tlSiteApiModule = settingKey[Option[ModuleID]]("The module that publishes API docs") @@ -85,6 +89,7 @@ object TypelevelSitePlugin extends AutoPlugin { override def buildSettings = Seq( tlSitePublishBranch := Some("main"), tlSitePublishTags := tlSitePublishBranch.value.isEmpty, + tlSiteApiLinks := tlSiteApiUrl.value.map("*" -> _).toMap, tlSiteApiUrl := None, tlSiteApiPackage := None, tlSiteRelatedProjects := Seq(TypelevelProject.Cats), @@ -106,6 +111,12 @@ object TypelevelSitePlugin extends AutoPlugin { .value: @nowarn("cat=other-pure-statement"), tlSitePreview := previewTask.value, Laika / sourceDirectories := Seq(mdocOut.value), + laikaConfig := laikaConfig + .value + .withConfigValue(LinkConfig(apiLinks = tlSiteApiLinks.value.toList.map { + case (packagePrefix, baseUri) => + ApiLinks(packagePrefix = packagePrefix, baseUri = baseUri.toString) + })), laikaTheme := tlSiteHeliumConfig.value.build.extend(tlSiteHeliumExtensions.value), mdocVariables := { mdocVariables.value ++