From 8f7040e9d786eb3b6d49ad8598fc27029d88d39a Mon Sep 17 00:00:00 2001 From: abby-ql Date: Mon, 23 Feb 2026 21:23:41 +0000 Subject: [PATCH 1/8] Add default 404.html via theme injection (working but unstyled version) --- .../sbt/site/GenericSiteSettings.scala | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala index ba09ab6e..edd47dbb 100644 --- a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala +++ b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala @@ -54,9 +54,13 @@ object GenericSiteSettings { def build[F[_]](implicit F: Async[F]): Resource[F, Theme[F]] = ThemeBuilder[F]("sbt-typelevel-site Helium Extensions") .addInputs( - tlSiteApiUrl.value.fold(InputTree[F]) { url => - InputTree[F].addString(htmlForwarder(url), Path.Root / "api" / "index.html") - } + tlSiteApiUrl.value + .fold(InputTree[F]) { url => + InputTree[F].addString(htmlForwarder(url), Path.Root / "api" / "index.html") + } + .merge( + InputTree[F].addString(default404Html, Path.Root / "404.html") + ) ) .addExtensions( GitHubFlavor, @@ -85,6 +89,31 @@ object GenericSiteSettings { ) } +private val default404Html: String = + """| + | + | + | + | + | Page not found + | + | + | + |
+ |
+ |

Page not found

+ |

+ | The page you were looking for does not exist. + |

+ |

+ | Return to the home page + |

+ |
+ |
+ | + | + |""".stripMargin + private def htmlForwarder(to: URL) = s"""| | From 00e4ad3086917ca65232a4d919c9408a97fcbbb0 Mon Sep 17 00:00:00 2001 From: abby-ql Date: Mon, 23 Feb 2026 21:35:01 +0000 Subject: [PATCH 2/8] snapshot version for local publishing --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 53fd89ca..9cdbad2d 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ name := "sbt-typelevel" import org.typelevel.sbt.gha.{PermissionScope, PermissionValue, Permissions} import com.typesafe.tools.mima.core._ -ThisBuild / tlBaseVersion := "0.8" +ThisBuild / version := "0.8-404-test-SNAPSHOT" ThisBuild / crossScalaVersions := Seq("2.12.21") ThisBuild / developers ++= List( tlGitHubDev("armanbilge", "Arman Bilge"), From a200b01d0f762f92cf9a5c1d83413fc1b1632205 Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 00:50:36 +0000 Subject: [PATCH 3/8] refined 404 html in helium style --- .../sbt/site/GenericSiteSettings.scala | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala index edd47dbb..f13527b2 100644 --- a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala +++ b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala @@ -96,19 +96,19 @@ private val default404Html: String = | | | Page not found - | + | + | | | |
- |
- |

Page not found

- |

- | The page you were looking for does not exist. - |

- |

- | Return to the home page - |

- |
+ |

404

+ |

Page Not Found

+ |

+ | Sorry, the page you were looking for does not exist + |

+ |

+ | Click here to go back to the home page + |

|
| | From c3217e3c443a90b3dd2599a666da46b9c10b83e0 Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 00:58:40 +0000 Subject: [PATCH 4/8] remove test snapshot version --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 9cdbad2d..8a6248da 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ name := "sbt-typelevel" import org.typelevel.sbt.gha.{PermissionScope, PermissionValue, Permissions} import com.typesafe.tools.mima.core._ -ThisBuild / version := "0.8-404-test-SNAPSHOT" +ThisBuild / version := "0.8" ThisBuild / crossScalaVersions := Seq("2.12.21") ThisBuild / developers ++= List( tlGitHubDev("armanbilge", "Arman Bilge"), From cc31562bed9a6a3c89ab1c8d68f173be8cbd9276 Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 03:16:31 +0000 Subject: [PATCH 5/8] add user override if their own 404.md provided --- .../org/typelevel/sbt/site/GenericSiteSettings.scala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala index f13527b2..019a22cb 100644 --- a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala +++ b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala @@ -36,6 +36,8 @@ import sbt.Def._ import sbt.Keys.developers import sbt.Keys.scmInfo import sbt.Keys.version +import sbt.Keys.baseDirectory +import sbt._ import java.net.URL @@ -50,6 +52,11 @@ object GenericSiteSettings { } val themeExtensions: Initialize[ThemeProvider] = setting { + + val rootDir = (ThisBuild / baseDirectory).value + val docsDir = rootDir / "docs" + val userProvided404 = (docsDir / "404.md").exists() || (docsDir / "404.html").exists() + new ThemeProvider { def build[F[_]](implicit F: Async[F]): Resource[F, Theme[F]] = ThemeBuilder[F]("sbt-typelevel-site Helium Extensions") @@ -59,7 +66,10 @@ object GenericSiteSettings { InputTree[F].addString(htmlForwarder(url), Path.Root / "api" / "index.html") } .merge( - InputTree[F].addString(default404Html, Path.Root / "404.html") + if (userProvided404) + InputTree[F] + else + InputTree[F].addString(default404Html, Path.Root / "404.html") ) ) .addExtensions( From 42bcede318fa27bf0c1604011abc487b10c7b96c Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 03:44:33 +0000 Subject: [PATCH 6/8] revert accidental versio setting change --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 8a6248da..53fd89ca 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ name := "sbt-typelevel" import org.typelevel.sbt.gha.{PermissionScope, PermissionValue, Permissions} import com.typesafe.tools.mima.core._ -ThisBuild / version := "0.8" +ThisBuild / tlBaseVersion := "0.8" ThisBuild / crossScalaVersions := Seq("2.12.21") ThisBuild / developers ++= List( tlGitHubDev("armanbilge", "Arman Bilge"), From f195e692f456376c1581edd0fae2204ce86a51e2 Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 04:05:29 +0000 Subject: [PATCH 7/8] correct formating --- .../sbt/site/GenericSiteSettings.scala | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala index 019a22cb..548854ed 100644 --- a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala +++ b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala @@ -61,7 +61,8 @@ object GenericSiteSettings { def build[F[_]](implicit F: Async[F]): Resource[F, Theme[F]] = ThemeBuilder[F]("sbt-typelevel-site Helium Extensions") .addInputs( - tlSiteApiUrl.value + tlSiteApiUrl + .value .fold(InputTree[F]) { url => InputTree[F].addString(htmlForwarder(url), Path.Root / "api" / "index.html") } @@ -99,30 +100,30 @@ object GenericSiteSettings { ) } -private val default404Html: String = - """| - | - | - | - | - | Page not found - | - | - | - | - |
- |

404

- |

Page Not Found

- |

- | Sorry, the page you were looking for does not exist - |

- |

- | Click here to go back to the home page - |

- |
- | - | - |""".stripMargin + private val default404Html: String = + """| + | + | + | + | + | Page not found + | + | + | + | + |
+ |

404

+ |

Page Not Found

+ |

+ | Sorry, the page you were looking for does not exist + |

+ |

+ | Click here to go back to the home page + |

+ |
+ | + | + |""".stripMargin private def htmlForwarder(to: URL) = s"""| From 3741d4b51d97ca718b67327fa8adb98f7704419e Mon Sep 17 00:00:00 2001 From: abby-ql Date: Tue, 24 Feb 2026 04:12:25 +0000 Subject: [PATCH 8/8] correct linting --- .../main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala index 548854ed..b4771f0c 100644 --- a/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala +++ b/site/src/main/scala/org/typelevel/sbt/site/GenericSiteSettings.scala @@ -33,10 +33,10 @@ import org.typelevel.sbt.TypelevelGitHubPlugin.gitHubUserRepo import org.typelevel.sbt.TypelevelKernelPlugin.autoImport.tlIsScala3 import org.typelevel.sbt.TypelevelSitePlugin.autoImport.tlSiteApiUrl import sbt.Def._ +import sbt.Keys.baseDirectory import sbt.Keys.developers import sbt.Keys.scmInfo import sbt.Keys.version -import sbt.Keys.baseDirectory import sbt._ import java.net.URL