diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 34b4ce4..be85adf 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -17,8 +17,13 @@ repos:
hooks:
- id: pyproject-fmt
groups: [format]
+ - repo: https://github.com/djlint/djLint
+ rev: v1.46.2
+ hooks:
+ - id: djlint-reformat
+ - id: djlint
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.16.8
+ rev: v0.16.9
hooks:
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
@@ -51,7 +56,6 @@ repos:
# Check that there are no merge conflicts (could be generated by template sync)
- id: check-merge-conflict
args: [--assume-in-merge]
-
- repo: https://github.com/zizmorcore/zizmor-pre-commit
rev: v1.30.1
hooks:
diff --git a/biome.jsonc b/biome.jsonc
index 74b4277..fdb3aed 100644
--- a/biome.jsonc
+++ b/biome.jsonc
@@ -10,6 +10,11 @@
],
},
"formatter": { "useEditorconfig": true },
+ "javascript": {
+ "formatter": {
+ "semicolons": "asNeeded",
+ },
+ },
"overrides": [
{
"includes": ["./.vscode/*.json", "**/*.jsonc"],
@@ -21,5 +26,12 @@
},
},
},
+ // HTML formatting is opt-in; most templates contain Jinja inside tags, which Biome can't parse.
+ {
+ "includes": [
+ "src/scverse_doc/theme/scverse/components/sidebar-versions.html",
+ ],
+ "html": { "formatter": { "enabled": true } },
+ },
],
}
diff --git a/pyproject.toml b/pyproject.toml
index a934e74..58f5509 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -97,6 +97,10 @@ envs.hatch-test.overrides.matrix.deps.env-vars = [
envs.hatch-test.default-args = []
envs.hatch-test.dependency-groups = [ "dev", "test" ]
+[tool.djlint]
+indent = 2
+single_attribute_per_line = true
+
[tool.ruff]
line-length = 120
src = [ "src" ]
diff --git a/src/scverse_doc/theme/scverse/components/scverse-ecosystem.html b/src/scverse_doc/theme/scverse/components/scverse-ecosystem.html
index db83408..c0d5094 100644
--- a/src/scverse_doc/theme/scverse/components/scverse-ecosystem.html
+++ b/src/scverse_doc/theme/scverse/components/scverse-ecosystem.html
@@ -5,31 +5,31 @@
without any package touching its own conf.py.
-#}
{%- if theme_show_ecosystem_dropdown | tobool and scverse_ecosystem -%}
-
-
-
-
+
+
+
+
{%- endif -%}
diff --git a/src/scverse_doc/theme/scverse/components/scverse-footer.html b/src/scverse_doc/theme/scverse/components/scverse-footer.html
index 823cfe1..f1a5d26 100644
--- a/src/scverse_doc/theme/scverse/components/scverse-footer.html
+++ b/src/scverse_doc/theme/scverse/components/scverse-footer.html
@@ -1,20 +1,18 @@
{#- Shared footer: the boilerplate every scverse README already carries, rendered identically on every docs site. -#}
diff --git a/src/scverse_doc/theme/scverse/components/sidebar-versions.html b/src/scverse_doc/theme/scverse/components/sidebar-versions.html
new file mode 100644
index 0000000..3e059c2
--- /dev/null
+++ b/src/scverse_doc/theme/scverse/components/sidebar-versions.html
@@ -0,0 +1,20 @@
+
+
diff --git a/src/scverse_doc/theme/scverse/layout.html b/src/scverse_doc/theme/scverse/layout.html
new file mode 100644
index 0000000..4048c6e
--- /dev/null
+++ b/src/scverse_doc/theme/scverse/layout.html
@@ -0,0 +1,5 @@
+{%- extends "pydata_sphinx_theme/layout.html" %}
+{%- block extrahead %}
+ {{ super() }}
+
+{%- endblock %}
diff --git a/src/scverse_doc/theme/scverse/static/styles/scverse.css b/src/scverse_doc/theme/scverse/static/styles/scverse.css
index b1a631e..a8af92b 100644
--- a/src/scverse_doc/theme/scverse/static/styles/scverse.css
+++ b/src/scverse_doc/theme/scverse/static/styles/scverse.css
@@ -107,6 +107,29 @@ html {
}
}
+/* --- Sidebar ------------------------------------------------------------ */
+
+/* pydata hides the sidebar when it has no toctree (e.g. the root page), but the version selector should stay */
+@media (min-width: 960px) {
+ .bd-sidebar-primary.hide-on-wide:has(readthedocs-flyout) {
+ display: flex;
+ }
+}
+.sidebar-primary-item:has(> :only-child:empty) {
+ display: none;
+}
+.sidebar-primary-item readthedocs-flyout {
+ --readthedocs-flyout-background-color: transparent;
+ --readthedocs-flyout-font-family: inherit;
+ --readthedocs-flyout-divider-color: var(--scverse-color-border);
+ --readthedocs-flyout-color: var(--scverse-color-text-muted);
+ --readthedocs-flyout-section-heading-color: var(--scverse-color-text-muted);
+ --readthedocs-flyout-link-color: var(--pst-color-link-higher-contrast);
+ --readthedocs-flyout-item-link-color: var(--pst-color-link);
+
+ padding: 0;
+}
+
/* --- Cards -------------------------------------------------------------- */
/* .bd-content exists to beat sphinx-design in selector specificity */
diff --git a/src/scverse_doc/theme/scverse/theme.conf b/src/scverse_doc/theme/scverse/theme.conf
deleted file mode 100644
index 09bb675..0000000
--- a/src/scverse_doc/theme/scverse/theme.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-[theme]
-inherit = pydata_sphinx_theme
-stylesheet = styles/scverse.css
-pygments_style = tango
-
-[options]
-package =
-accent =
-show_ecosystem_dropdown = True
-
-navbar_align = left
-navbar_start = navbar-logo
-navbar_center = navbar-nav
-navbar_end = scverse-ecosystem, theme-switcher, navbar-icon-links
-navbar_persistent = search-button
-secondary_sidebar_items = page-toc, edit-this-page, sourcelink
-footer_start = scverse-footer
-footer_center =
-footer_end =
-show_nav_level = 0
-show_toc_level = 2
-navigation_depth = 3
-collapse_navigation = False
-pygments_light_style = tango
-pygments_dark_style = monokai
-announcement = https://scverse.org/announcement.html
diff --git a/src/scverse_doc/theme/scverse/theme.toml b/src/scverse_doc/theme/scverse/theme.toml
new file mode 100644
index 0000000..aeaa1fb
--- /dev/null
+++ b/src/scverse_doc/theme/scverse/theme.toml
@@ -0,0 +1,28 @@
+[theme]
+inherit = "pydata_sphinx_theme"
+stylesheets = [
+ "styles/scverse.css",
+]
+pygments_style = { default = "tango" }
+
+[options]
+package = ""
+accent = ""
+show_ecosystem_dropdown = "True"
+navbar_align = "left"
+navbar_start = "navbar-logo"
+navbar_center = "navbar-nav"
+navbar_end = "scverse-ecosystem, theme-switcher, navbar-icon-links"
+navbar_persistent = "search-button"
+primary_sidebar_end = ["sidebar-ethical-ads", "sidebar-versions"]
+secondary_sidebar_items = ["page-toc", "edit-this-page", "sourcelink"]
+footer_start = "scverse-footer"
+footer_center = ""
+footer_end = ""
+show_nav_level = "0"
+show_toc_level = "2"
+navigation_depth = "3"
+collapse_navigation = "False"
+pygments_light_style = "tango"
+pygments_dark_style = "monokai"
+announcement = "https://scverse.org/announcement.html"