docs: add support for RTD dark mode
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 7 Dec 2021 09:53:02 +0000 (10:53 +0100)
committerJonathan Corbet <corbet@lwn.net>
Fri, 10 Dec 2021 21:05:55 +0000 (14:05 -0700)
This is actually an overlay on the top of the RTD theme, which
requires to include first the RTD theme.

It should be noticed that, when the dark theme is used, the
DOCS_CSS files won't be the last CSS themes. So, it won't
override the dark.css style by default. So, it is needed
to force the them override with "!important".

This small script, for instance, produces a nice output with
the RTD dark theme:

DOCS_THEME=sphinx_rtd_dark_mode
cat << EOF > dark_override.css
  html body {
    font-family: arial,helvetica,sans-serif;
  }
  html[data-theme='dark'] body {
    color: white !important;
  }
  html[data-theme='dark'] .sig-name {
    color: green !important;
  }
  html[data-theme='dark'] .wy-menu-vertical a {
    color: #ffcc00 !important;
  }
  html[data-theme="dark"] h1, html[data-theme="dark"] h2, html[data-theme="dark"] h3 {
    color: #ffcc00 !important;
  }
  html[data-theme="dark"] h4, html[data-theme="dark"] h5, html[data-theme="dark"] h6 {
    color: #ffcc00 !important;
  }
  html[data-theme="dark"] h7, html[data-theme="dark"] h8, html[data-theme="dark"] h9 {
    color: #ffcc00 !important;
  }
  html[data-theme="dark"] .wy-nav-content a, html[data-theme="dark"] .wy-nav-content a:visited {
    color: #ffcc00 !important;
  }
EOF

make DOCS_CSS=dark_override.css DOCS_THEME=sphinx_rtd_dark_mode htmldocs

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/90d316e055ef7f4c9021b9eada8f8d3b2e750a66.1638870323.git.mchehab+huawei@kernel.org
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Documentation/conf.py
Documentation/sphinx-static/theme_overrides.css
Documentation/sphinx-static/theme_rtd_colors.css [new file with mode: 0644]

index c8efe82d1404ede8eb45ee45c2c45a0892644c85..f07f2e9b9f2c84067ffed43761478ba6c16fe870 100644 (file)
@@ -215,7 +215,7 @@ html_css_files = []
 if "DOCS_THEME" in os.environ:
     html_theme = os.environ["DOCS_THEME"]
 
-if html_theme == 'sphinx_rtd_theme':
+if html_theme == 'sphinx_rtd_theme' or html_theme == 'sphinx_rtd_dark_mode':
     # Read the Docs theme
     try:
         import sphinx_rtd_theme
@@ -227,6 +227,19 @@ if html_theme == 'sphinx_rtd_theme':
         html_css_files = [
             'theme_overrides.css',
         ]
+
+        # Read the Docs dark mode override theme
+        if html_theme == 'sphinx_rtd_dark_mode':
+            try:
+                import sphinx_rtd_dark_mode
+                extensions.append('sphinx_rtd_dark_mode')
+            except ImportError:
+                html_theme == 'sphinx_rtd_theme'
+
+        if html_theme == 'sphinx_rtd_theme':
+                # Add color-specific RTD normal mode
+                html_css_files.append('theme_rtd_colors.css')
+
     except ImportError:
         html_theme = 'classic'
 
index 459ec5b29d68483fbd3e74b022f44daae0a7702a..f6f2b941a5d61f1b4b3279792a12243900d6d356 100644 (file)
@@ -1,14 +1,14 @@
 /* -*- coding: utf-8; mode: css -*-
  *
  * Sphinx HTML theme customization: read the doc
- *
+ * Please don't add any color definition here, as the theme should
+ * work for both normal and dark modes.
  */
 
 /* Improve contrast and increase size for easier reading. */
 
 body {
        font-family: serif;
-       color: black;
        font-size: 100%;
 }
 
@@ -16,17 +16,8 @@ h1, h2, .rst-content .toctree-wrapper p.caption, h3, h4, h5, h6, legend {
        font-family: sans-serif;
 }
 
-.wy-menu-vertical li.current a {
-       color: #505050;
-}
-
-.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a {
-       color: #303030;
-}
-
 div[class^="highlight"] pre {
        font-family: monospace;
-       color: black;
        font-size: 100%;
 }
 
@@ -104,13 +95,10 @@ div[class^="highlight"] pre {
     /* Menu selection and keystrokes */
 
     span.menuselection {
-       color: blue;
        font-family: "Courier New", Courier, monospace
     }
 
     code.kbd, code.kbd span {
-       color: white;
-       background-color: darkblue;
        font-weight: bold;
        font-family: "Courier New", Courier, monospace
     }
diff --git a/Documentation/sphinx-static/theme_rtd_colors.css b/Documentation/sphinx-static/theme_rtd_colors.css
new file mode 100644 (file)
index 0000000..55b6e1c
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*- coding: utf-8; mode: css -*-
+ *
+ * Sphinx HTML theme customization: color settings for RTD (non-dark) theme
+ *
+ */
+
+/* Improve contrast and increase size for easier reading. */
+
+body {
+       color: black;
+}
+
+.wy-menu-vertical li.current a {
+       color: #505050;
+}
+
+.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a {
+       color: #303030;
+}
+
+div[class^="highlight"] pre {
+       color: black;
+}
+
+@media screen {
+
+    /* Menu selection and keystrokes */
+
+    span.menuselection {
+       color: blue;
+    }
+
+    code.kbd, code.kbd span {
+       color: white;
+       background-color: darkblue;
+    }
+}