diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 9e2e9d0a7..320ab762b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -7,9 +7,9 @@ RUN apk add --no-cache \ py3-pip \ tzdata -ENV USER node +ENV USER=node USER ${USER} -# python packages (as mkdocs) are installed in the user's home directory +# python packages (as zensical) are installed in the user's home directory # but we need them to be accessible from ${PATH} ENV PATH="${PATH}:/home/${USER}/.local/bin" diff --git a/.editorconfig b/.editorconfig index c5cd13007..e3bc703b9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,8 +15,11 @@ trim_trailing_whitespace = true [*.yml] tab_width = 2 -[*.md] +[*.toml] tab_width = 2 + +[*.md] +tab_width = 4 trim_trailing_whitespace = false [*.json] diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 870c372ce..720ca8166 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -17,4 +17,4 @@ jobs: uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 #v2.2 with: ignore_words_file: .codespellignore - skip: ./docs/routers/fritzbox-de.md,./mkdocs.yml,./package.json,./package-lock.json,./.markdownlint.json,./requirements.txt, ./MathJax-es5/* + skip: ./docs/routers/fritzbox-de.md,./zensical.toml,./package.json,./package-lock.json,./.markdownlint.json,./requirements.txt diff --git a/README.md b/README.md index 90b4ce398..845c56d7c 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This repo is the source for the official [Pi-hole documentation](https://docs.pi ### How to contribute -To add a new link on the navigation panel you need to edit the `mkdocs.yml` file in the root of the repo. There is a guide for building the navbar [on the mkdocs wiki](https://www.mkdocs.org/user-guide/configuration/#nav) +To add a new link on the navigation panel you need to edit the `zensical.toml` file in the root of the repo. There is a guide for building the navbar [on the zensical documentation](https://zensical.org/docs/setup/navigation/) To add a new document or guide. @@ -26,7 +26,7 @@ To add a new document or guide. ### Testing your changes -When working on this repo, it is advised that you review your changes locally before committing them. The `mkdocs serve` command can be used to live preview your changes (as you type) on your local machine. +When working on this repo, it is advised that you review your changes locally before committing them. The `zensical serve` command can be used to live preview your changes (as you type) on your local machine. Please make sure you fork the repo and change the clone URL in the example below for your fork: @@ -51,7 +51,7 @@ Please make sure you fork the repo and change the clone URL in the example below - Running the docs server: ```bash - mkdocs serve --dev-addr 0.0.0.0:8000 + zensical serve --dev-addr 0.0.0.0:8000 ``` - Fedora Linux instructions (tested on Fedora Linux 28): @@ -66,20 +66,12 @@ Please make sure you fork the repo and change the clone URL in the example below - Running the docs server: ```bash - mkdocs serve --dev-addr 0.0.0.0:8000 + zensical serve --dev-addr 0.0.0.0:8000 ``` -- Docker instructions: - - One-shot run: +- Docker devcontainer instructions: + - We provide a `devcontainer.json` and a dockerfile which will setup the required development environment for an easy deployment. Devcontainers can be used with various editors, e.g. VS Code - ```bash - docker run -v `pwd`:/opt/app/ -w /opt/app/ -p 8000:8000 -it nikolaik/python-nodejs:python3.7-nodejs16 \ - sh -c "pip install --user -r requirements.txt && \ - /root/.local/bin/mkdocs build && \ - npm ci && \ - npm test && \ - /root/.local/bin/mkdocs serve --dev-addr 0.0.0.0:8000" - ``` After these commands, the current branch is accessible through your favorite browser at diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 297dda3c2..000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.pi-hole.net diff --git a/docs/api/auth.md b/docs/api/auth.md index 18f9b70ff..70bf4df06 100644 --- a/docs/api/auth.md +++ b/docs/api/auth.md @@ -418,4 +418,3 @@ Session-based authentication, while convenient and widely used, does have severa Remember, no security measure is foolproof, but by understanding the potential risks and the multiple layers of defense your Pi-hole implemented against these risks, you can make an informed decision about how to use the Pi-hole API securely in the context of your own scripts. Always use the secure transmission method (HTTPS) offered by your Pi-hole to access the API. The strong encryption will prevent attackers from eavesdropping on your requests and makes stealing your session ID basically impossible. -{!abbreviations.md!} diff --git a/docs/api/index.md b/docs/api/index.md index f3d291589..7b8c2b493 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -200,4 +200,3 @@ Code | Description | Interpretation We recommend writing code that gracefully handles all possible API exceptions. The Pi-hole API is designed to support this by standardized error messages and human-readable hints for errors. -{!abbreviations.md!} diff --git a/docs/database/domain-database/groups.md b/docs/database/domain-database/groups.md index 1368ece90..fb635ad6b 100644 --- a/docs/database/domain-database/groups.md +++ b/docs/database/domain-database/groups.md @@ -1,7 +1,3 @@ ---- -title: Group Management ---- - Groups are defined in the `group` table and can have an optional description in addition to the mandatory name of the group. Label | Type | Uniqueness enforced | Content diff --git a/docs/database/domain-database/index.md b/docs/database/domain-database/index.md index 25888b725..0c67a427e 100644 --- a/docs/database/domain-database/index.md +++ b/docs/database/domain-database/index.md @@ -1,7 +1,3 @@ ---- -title: Domain Database ---- - Pi-hole uses the well-known relational database management system SQLite3 for managing the various domains that are used to control the DNS filtering system. The database-based domain management has been added with Pi-hole v5.0. The ability to subscribe to external *allow*lists has been added with Pi-hole v6.0. ## Priorities diff --git a/docs/docker/DHCP.md b/docs/docker/DHCP.md index 366343bee..7f5f8e78d 100644 --- a/docs/docker/DHCP.md +++ b/docs/docker/DHCP.md @@ -1,9 +1,3 @@ ---- -title: Docker DHCP and Network Modes -description: Setting up DHCP for Docker Pi-hole -last_updated: Sat Feb 09 00:00:00 2019 UTC ---- - # Docker DHCP and Network Modes Docker runs in a separate network by default called a docker bridge network, which makes DHCP want to serve addresses to that network and not your LAN network where you probably want it. This document details why Docker Pi-hole DHCP is different from normal Pi-hole and how to fix the problem. diff --git a/docs/docker/configuration.md b/docs/docker/configuration.md index ed042dac1..f3656a840 100644 --- a/docs/docker/configuration.md +++ b/docs/docker/configuration.md @@ -59,7 +59,7 @@ An example of how some of these variables may look in your compose file | :--- | :--- | | `TZ` | Set your [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) to make sure logs rotate at local midnight instead of at UTC midnight. | | `FTLCONF_webserver_api_password` | To set a specific password for the web interface (per the quick-start example).

If this variable is not detected, and you have not already set one previously inside the container via `pihole setpassword` or `pihole-FTL --config webserver.api.password`, then a random password will be assigned on startup, and will be printed to the log.

You can find this password by running `docker logs pihole` and looking for "random password". See [Setting the Web Interface Password](#setting-the-web-interface-password) below for usage examples. | -| `FTLCONF_dns_upstreams` | Upstream DNS server(s) for Pi-hole to forward queries to, separated by a semicolon

Supports non-standard ports with #[port number] e.g `127.0.0.1#5053;8.8.8.8;8.8.4.4`

Supports [Docker service names and links](https://docs.docker.com/compose/networking/) instead of IPs e.g `upstream0;upstream1` where upstream0 and upstream1 are the service names of or links to docker services | +| `FTLCONF_dns_upstreams` | Upstream DNS server(s) for Pi-hole to forward queries to, separated by a semicolon

Supports non-standard ports with #\[port\] number e.g `127.0.0.1#5053;8.8.8.8;8.8.4.4`

Supports [Docker service names and links](https://docs.docker.com/compose/networking/) instead of IPs e.g `upstream0;upstream1` where upstream0 and upstream1 are the service names of or links to docker services | ## Setting the Web Interface Password {: #setting-the-web-interface-password } diff --git a/docs/guides/vpn/openvpn/android-client.md b/docs/guides/vpn/openvpn/android-client.md index 87699d6be..128e75ca3 100644 --- a/docs/guides/vpn/openvpn/android-client.md +++ b/docs/guides/vpn/openvpn/android-client.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- - Install the official OpenVPN App from the [App Store](https://play.google.com/store/apps/details?id=net.openvpn.openvpn) diff --git a/docs/guides/vpn/openvpn/clients.md b/docs/guides/vpn/openvpn/clients.md index c3fd90f1d..56686986e 100644 --- a/docs/guides/vpn/openvpn/clients.md +++ b/docs/guides/vpn/openvpn/clients.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ## Create a client config file (`.ovpn`) diff --git a/docs/guides/vpn/openvpn/dual-VPN.md b/docs/guides/vpn/openvpn/dual-VPN.md index 1b9757cc3..ff4b2810a 100644 --- a/docs/guides/vpn/openvpn/dual-VPN.md +++ b/docs/guides/vpn/openvpn/dual-VPN.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ### Dual VPN Setup - Separate DNS and VPN Traffic diff --git a/docs/guides/vpn/openvpn/dual-operation.md b/docs/guides/vpn/openvpn/dual-operation.md index 3facb2959..e93af3a4a 100644 --- a/docs/guides/vpn/openvpn/dual-operation.md +++ b/docs/guides/vpn/openvpn/dual-operation.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- **Up until now, this wiki has been about a server set up on a cloud host, available on the public Internet. This section is aimed at a server set up in a private network like on a Raspberry Pi.** diff --git a/docs/guides/vpn/openvpn/dynDNS.md b/docs/guides/vpn/openvpn/dynDNS.md index ebcdb5bc5..b54842740 100644 --- a/docs/guides/vpn/openvpn/dynDNS.md +++ b/docs/guides/vpn/openvpn/dynDNS.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- If you operate your Pi-hole + OpenVPN at home, you are likely sitting behind a NAT / dynamically changing IP address. In this case, you should set up a dynamic DNS record, which allows you to reach your server. You can exchange the address that has been configured during the setup of OpenVPN like this: diff --git a/docs/guides/vpn/openvpn/firewall.md b/docs/guides/vpn/openvpn/firewall.md index cb24905da..e4bc466f2 100644 --- a/docs/guides/vpn/openvpn/firewall.md +++ b/docs/guides/vpn/openvpn/firewall.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ### (optional) Secure the server with firewall rules (`iptables`) diff --git a/docs/guides/vpn/openvpn/index.md b/docs/guides/vpn/openvpn/index.md index 64eba7fa9..8671c2d3b 100644 --- a/docs/guides/vpn/openvpn/index.md +++ b/docs/guides/vpn/openvpn/index.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- This tutorial is tailored for setting up OpenVPN on a cloud-hosted virtual server. If you wish to have this working on your home network, you will need to tailor Pi-hole to listen on `eth0` (or similar), which we explain in [this section of the tutorial](dual-operation.md). diff --git a/docs/guides/vpn/openvpn/installation.md b/docs/guides/vpn/openvpn/installation.md index dc85e0c5e..d27c5ac1d 100644 --- a/docs/guides/vpn/openvpn/installation.md +++ b/docs/guides/vpn/openvpn/installation.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ## Install an operating system diff --git a/docs/guides/vpn/openvpn/only-dns-via-vpn.md b/docs/guides/vpn/openvpn/only-dns-via-vpn.md index f7c64b68c..3873a10b2 100644 --- a/docs/guides/vpn/openvpn/only-dns-via-vpn.md +++ b/docs/guides/vpn/openvpn/only-dns-via-vpn.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ### Optional: Only route DNS via VPN diff --git a/docs/guides/vpn/openvpn/setup-openvpn-server.md b/docs/guides/vpn/openvpn/setup-openvpn-server.md index 15876f66b..bf9df979c 100644 --- a/docs/guides/vpn/openvpn/setup-openvpn-server.md +++ b/docs/guides/vpn/openvpn/setup-openvpn-server.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ### Change OpenVPN's resolvers diff --git a/docs/guides/vpn/openvpn/troubleshooting.md b/docs/guides/vpn/openvpn/troubleshooting.md index 40deeec5f..580d84c48 100644 --- a/docs/guides/vpn/openvpn/troubleshooting.md +++ b/docs/guides/vpn/openvpn/troubleshooting.md @@ -1,4 +1,6 @@ -{!guides/vpn/openvpn/deprecation_notice.md!} +--8<-- +docs/guides/vpn/openvpn/deprecation_notice.md +--8<-- ### CRL expired diff --git a/docs/index.md b/docs/index.md index 088a613fa..77fc9e188 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,8 +1,3 @@ ---- -title: Overview of Pi-hole -description: Brief overview of Pi-hole ---- -

Pi-hole diff --git a/docs/main/contact.md b/docs/main/contact.md index a24ad50b1..03e946ed2 100644 --- a/docs/main/contact.md +++ b/docs/main/contact.md @@ -1,9 +1,3 @@ ---- -title: Getting in touch -description: Pi-hole contacts and social media -last_updated: Sun Jan 13 18:33:27 2019 UTC ---- - While we are primarily reachable on our [Discourse User Forum](https://discourse.pi-hole.net/), we can also be found on a variety of social media outlets. **Please be sure to check the FAQ's** before starting a new discussion, as we do not have the spare time to reply to every request for assistance. - [Frequently Asked Questions](https://discourse.pi-hole.net/c/faqs) diff --git a/docs/main/coverage.md b/docs/main/coverage.md index efa0ee9cb..52448dfcc 100644 --- a/docs/main/coverage.md +++ b/docs/main/coverage.md @@ -1,9 +1,3 @@ ---- -title: Pi-hole News and Blogs -description: Sites and articles about Pi-hole -last_updated: Sun Jan 13 19:20:35 2019 UTC ---- - ## YouTube/Twit/Video - [Security Now Netcast: Pi-hole](https://www.youtube.com/watch?v=p7-osq_y8i8&t=100m26s) _Oct 13, 2015_ @@ -11,7 +5,6 @@ last_updated: Sun Jan 13 19:20:35 2019 UTC - [Foolish Tech Show](https://www.youtube.com/watch?v=bYyena0I9yc&t=2m4s) _Dec 23, 2015_ - [Digital Trends: 5 Fun, Easy Projects You Can Try With a $35 Raspberry Pi](https://www.youtube.com/watch?v=QwrKlyC2kdM&t=1m42s) _Mar 22, 2016_ - [Adafruit: Raspberry Pi Quick Look at Pi Hole ad blocking server with Tony D](https://www.youtube.com/watch?v=eg4u2j1HYlI) _Jun 20, 2016_ -- [The Defrag Show: Endoscope USB Camera, The Final \[HoloLens\] Vote, Adblock Pi and more](https://channel9.msdn.com/Shows/The-Defrag-Show/Defrag-Endoscope-USB-Camera-The-Final-HoloLens-Vote-Adblock-Pi-and-more#time=20m39s) _Jan 27, 2016_ - [Know How 355: Killing ads with a Raspberry Pi-Hole!](https://www.twit.tv/shows/know-how/episodes/355) _Nov 9, 2017_ - [Linus Tech Tips: Block EVERY Online Ad with THIS](https://www.youtube.com/watch?v=KBXTnrD_Zs4) _Aug 28, 2019_ diff --git a/docs/main/origins.md b/docs/main/origins.md index b9fd10cf3..2048ef338 100644 --- a/docs/main/origins.md +++ b/docs/main/origins.md @@ -1,9 +1,3 @@ ---- -title: Pi-hole Origins -description: Software packages used in Pi-hole -last_updated: Sun Jan 13 18:35:14 2019 UTC ---- - Pi-hole being a **advertising-aware DNS/Web server**, makes use of the following technologies: - [`dnsmasq`](https://www.thekelleys.org.uk/dnsmasq/doc.html) - a lightweight DNS and DHCP server diff --git a/docs/main/prerequisites.md b/docs/main/prerequisites.md index 685f8f784..883c019d6 100644 --- a/docs/main/prerequisites.md +++ b/docs/main/prerequisites.md @@ -1,9 +1,3 @@ ---- -title: Prerequisites -description: Operating system and network requirements -last_updated: May 25 2020 ---- - ## Hardware Pi-hole is very lightweight and does not require much processing power diff --git a/docs/main/projects.md b/docs/main/projects.md index 0b75197fb..df3097a07 100644 --- a/docs/main/projects.md +++ b/docs/main/projects.md @@ -1,9 +1,3 @@ ---- -title: Community Projects -description: Things built with Pi-hole -last_updated: Sun Sep 06 14:28:14 2020 UTC ---- - - [The Big Blocklist Collection](https://firebog.net/) - [Pi-Hole in the cloud](https://blog.codybunch.com/2015/07/28/Pi-Hole-in-the-cloud/) - [Minibian Pi-hole](https://munkjensen.net/wiki/index.php/See_my_Pi-Hole#Minibian_Pi-hole) diff --git a/mkdocs.yml b/mkdocs.yml deleted file mode 100644 index e5c157fdc..000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,291 +0,0 @@ -site_name: 'Pi-hole documentation' -site_url: 'https://docs.pi-hole.net/' -repo_url: 'https://github.com/pi-hole/pi-hole' -edit_uri: '../docs/blob/master/docs/' -copyright: -remote_branch: gh-pages -validation: - links: - anchors: warn -theme: - name: 'material' - custom_dir: overrides -# icon: -# repo: fontawesome/brands/github-alt - favicon: 'images/favicon.ico' - logo: 'images/logo.svg' - language: 'en' - font: - text: 'Source Sans Pro' - code: 'Roboto Mono' - features: - - navigation.top - - navigation.instant - - navigation.indexes - - search.suggest - - search.highlight - - search.share - - content.action.edit - - content.code.copy - palette: - - # Light mode - - media: "(prefers-color-scheme: light)" - scheme: default - primary: indigo - accent: indigo - toggle: - icon: material/lightbulb-outline - name: Switch to dark mode - - # Dark mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - primary: indigo - accent: indigo - toggle: - icon: material/lightbulb - name: Switch to light mode - -markdown_extensions: - # Code highlighting in ``` ``` blocks, superseeds codehilite - - pymdownx.highlight - # allows for the nesting of code blocks inside other blocks - - pymdownx.superfences - - pymdownx.inlinehilite - # Table of Contents - # https://python-markdown.github.io/extensions/toc/ - - toc: - permalink: true - # block-styled side content - # https://squidfunk.github.io/mkdocs-material/reference/admonitions/ - - admonition - # https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#details - - pymdownx.details - - # linkifies URL and email links without having to wrap them in Markdown syntax. Also, allows shortens repository issue, pull request, and commit links. - - pymdownx.magiclink - # Task lists (https://facelessuser.github.io/pymdown-extensions/extensions/tasklist/) - - pymdownx.tasklist: - custom_checkbox: true - # Highlight words with ==mark me== - - pymdownx.mark - # Adds support for deletion ~~Delete me~~ and subscript text~a\ subscript~ - - pymdownx.tilde - # This extension is a convenience extension which includes many pymdownx extensions - # (https://facelessuser.github.io/pymdown-extensions/extensions/extra/) - - pymdownx.extra - - # Tabbed provides a syntax to easily add tabbed Markdown content. - # https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/ - - pymdownx.tabbed: - alternate_style: true - # Adds syntax for defining footnotes in Markdown documents (https://squidfunk.github.io/mkdocs-material/reference/footnotes/) - - footnotes - # Adds the ability to define abbreviations (https://squidfunk.github.io/mkdocs-material/reference/tooltips/) - - abbr - - attr_list - # Include files in other documents like {!some/dir/in/docs/filename.md!} - - markdown_include.include: - base_path: docs - - pymdownx.snippets: - # auto_append abbreviations.md to every file - # https://squidfunk.github.io/mkdocs-material/reference/tooltips/#adding-a-glossary - auto_append: - - docs/abbreviations.md - # Include files in other documents like {!some/dir/in/docs/filename.md!} - - markdown_include.include: - base_path: docs - # Metadata support in pages - # (https://squidfunk.github.io/mkdocs-material/extensions/metadata/) - - meta - # Tabbed provides a syntax to easily add tabbed Markdown content. - # (https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/) - - pymdownx.tabbed - # InlineHilite is an inline code highlighter inspired by CodeHilite. - # (https://facelessuser.github.io/pymdown-extensions/extensions/inlinehilite/) - - pymdownx.inlinehilite - - pymdownx.arithmatex: - generic: true - -nav: - - 'About Pi-hole': - - 'About Pi-hole': index.md - - 'Contact Us': main/contact.md - - 'Pi-hole Origins': main/origins.md - - 'On the Web': main/coverage.md - - 'Getting Started': - - 'Getting Started': main/index.md - - 'Prerequisites': main/prerequisites.md - - 'Installation': main/basic-install.md - - 'Post-Install': main/post-install.md - - 'Updating': main/update.md - - 'Uninstalling': main/uninstall.md - - 'The  pihole  Command': main/pihole-command.md - - 'Databases': - - 'Databases': database/index.md - - 'Query Database': database/query-database.md - - 'Domain Database': - - 'Domain Database': database/domain-database/index.md - - 'Group Management': database/domain-database/groups.md - - 'Database Recovery': database/domain-database/recovery.md - - 'Pi-hole API': - - 'Pi-hole API': api/index.md - - 'Authentication': api/auth.md - - 'TLS/SSL': api/tls.md - - 'FTLDNS': - - 'FTLDNS': ftldns/index.md - - 'Configuration': ftldns/configfile.md - - 'Interfaces': ftldns/interfaces.md - - 'DNS cache': ftldns/dns-cache.md - - 'DNS resolver': ftldns/dns-resolver.md - - 'Blocking mode': ftldns/blockingmode.md - - 'Privacy levels': ftldns/privacylevels.md - - 'dnsmasq warnings': ftldns/dnsmasq_warn.md - - 'Webserver': ftldns/webserver.md - - 'Advanced': - - 'Install from source': ftldns/compile.md - - 'Signals': 'ftldns/signals.md' - - 'Cache dump': ftldns/cache_dump.md - - 'Packet dump': ftldns/package_dump.md - - 'Debugging': - - 'gdb': ftldns/gdb.md - - 'valgrind': ftldns/valgrind.md - - 'Group Management': - - 'Group Management': group_management/index.md - - 'Examples': group_management/example.md - - 'RegEx Blocking': - - "Regex Blocking": regex/index.md - - "Testing": regex/testmode.md - - "Tutorial": regex/tutorial.md - - "Pi-hole extensions": regex/pi-hole.md - - "Approximate matching": regex/approximate.md - - 'Docker': - - 'Docker': docker/index.md - - 'Configuration': docker/configuration.md - - 'Upgrading': - - 'Upgrading': docker/upgrading/index.md - - 'Upgrading from v5.x': docker/upgrading/v5-v6.md - - 'Building': docker/build-image.md - - 'DHCP': docker/DHCP.md - - 'Tips and Tricks': docker/tips-and-tricks.md - - 'Contributing': - - 'Contributing': guides/github/index.md - - 'Developer Certificate of Origin (DCO)': guides/github/dco.md - - 'How to sign-off commits': guides/github/how-to-signoff.md - - 'How to fork and rebase': guides/github/how-to-fork-rebase.md - - 'Guides': - - 'DNS': - - 'unbound': guides/dns/unbound.md - - 'cloudflared (DoH)': guides/dns/cloudflared.md - - 'dnscrypt-proxy (DoH)': guides/dns/dnscrypt-proxy.md - - 'Upstream DNS Providers': guides/dns/upstream-dns-providers.md - - 'VPN': - - 'WireGuard': - - 'Wireguard': guides/vpn/wireguard/index.md - - 'Concept': guides/vpn/wireguard/concept.md - - 'Install server': guides/vpn/wireguard/server.md - - 'Add client(s)': guides/vpn/wireguard/client.md - - 'Optional extra features': - - 'Make local devices accessible': guides/vpn/wireguard/internal.md - - 'Tunnel all Internet traffic': guides/vpn/wireguard/route-everything.md - - 'Troubleshooting': guides/vpn/wireguard/faq.md - - 'OpenVPN': - - 'OpenVPN': guides/vpn/openvpn/index.md - - 'Installation': guides/vpn/openvpn/installation.md - - 'Setup OpenVPN Server': guides/vpn/openvpn/setup-openvpn-server.md - - 'Firewall Configuration': guides/vpn/openvpn/firewall.md - - 'Connecting clients': - - 'General': guides/vpn/openvpn/clients.md - - 'Android': guides/vpn/openvpn/android-client.md - - 'Optional: Only route DNS via VPN': guides/vpn/openvpn/only-dns-via-vpn.md - - 'Optional: Dual operation: LAN & VPN at the same time': guides/vpn/openvpn/dual-operation.md - - 'Optional: Full and DNS-only': guides/vpn/openvpn/dual-VPN.md - - 'Optional: Dynamic DNS': guides/vpn/openvpn/dynDNS.md - - 'Troubleshooting': guides/vpn/openvpn/troubleshooting.md - - 'Misc': - - 'Home Assistant': guides/misc/homeassistant.md - - 'Benchmarking': guides/misc/benchmark.md - - 'Tor & Pi-hole': - - 'Tor & Pi-hole': guides/misc/tor/index.md - - 'Basic Setup': guides/misc/tor/setup.md - - 'Using Tor': guides/misc/tor/using-tor.md - - 'Performance and other issues': guides/misc/tor/performance-issues.md - - 'Using DNSSEC': guides/misc/tor/dnssec.md - - 'Allowlist and Denylist editing': guides/misc/allowlist-denylist.md - - 'Network Time Protocol': guides/misc/ntp.md - - 'Router setup': - - 'ASUS router': routers/asus.md - - 'Fritz!Box (EN)': routers/fritzbox.md - - 'Fritz!Box (DE)': routers/fritzbox-de.md - - 'Nokia G-240W-B': routers/nokia-G240WB.md - - 'OPNsense': routers/OPNsense.md - - 'TP-Link': routers/tp-link.md - - 'Ubiquiti USG': routers/ubiquiti-usg.md - - 'FAQ': main/faq.md - - 'Community Projects': main/projects.md - -not_in_nav: | - /abbreviations.md - /guides/vpn/openvpn/deprecation_notice.md - -extra: - social: - - icon: fontawesome/solid/earth-americas - link: https://pi-hole.net/ - name: Website - - icon: fontawesome/brands/github - link: https://github.com/pi-hole - name: GitHub - -extra_css: - - extra.css - -plugins: - - search - - git-revision-date-localized: - fallback_to_build_date: true - enable_parallel_processing: false - - redirects: - redirect_maps: - 'ftldns/database.md': database/index.md - 'main/presentations.md': index.md - 'main/prerequesites.md': main/prerequisites.md - 'guides/unbound.md': guides/dns/unbound.md - 'guides/upstream-dns-providers.md': guides/dns/upstream-dns-providers.md - 'guides/dns-over-https.md': guides/dns/cloudflared.md - 'guides/vpn/overview.md': guides/vpn/openvpn/index.md - 'guides/vpn/installation.md': guides/vpn/openvpn/installation.md - 'guides/vpn/setup-openvpn-server.md': guides/vpn/openvpn/setup-openvpn-server.md - 'guides/vpn/firewall.md': guides/vpn/openvpn/firewall.md - 'guides/vpn/clients.md': guides/vpn/openvpn/clients.md - 'guides/vpn/android-client.md': guides/vpn/openvpn/android-client.md - 'guides/vpn/only-dns-via-vpn.md': guides/vpn/openvpn/only-dns-via-vpn.md - 'guides/vpn/dual-operation.md': guides/vpn/openvpn/dual-operation.md - 'guides/vpn/dual-VPN.md': guides/vpn/openvpn/dual-VPN.md - 'guides/vpn/dynDNS.md': guides/vpn/openvpn/dynDNS.md - 'guides/vpn/troubleshooting.md': guides/vpn/openvpn/troubleshooting.md - 'guides/benchmark.md': guides/misc/benchmark.md - 'guides/tor/overview.md': guides/misc/tor/index.md - 'guides/tor/setup.md': guides/misc/tor/setup.md - 'guides/tor/using-tor.md': guides/misc/tor/using-tor.md - 'guides/tor/performance-issues.md': guides/misc/tor/performance-issues.md - 'guides/tor/dnssec.md': guides/misc/tor/dnssec.md - 'guides/whitelist-blacklist.md': guides/misc/allowlist-denylist.md - 'ftldns/regex/index.md': regex/index.md - 'ftldns/regex/overview.md': regex/index.md - 'ftldns/regex/tutorial.md': regex/tutorial.md - 'database/gravity/example.md': group_management/example.md - 'core/pihole-command.md': main/pihole-command.md - 'database/ftl.md': database/query-database.md - 'database/gravity/index.md': database/domain-database/index.md - 'database/gravity/recovery.md': database/domain-database/recovery.md - 'database/gravity/groups.md': database/domain-database/groups.md - 'group_management/groups.md': group_management/index.md - 'regex/overview.md': regex/index.md - 'guides/vpn/wireguard/overview.md': guides/vpn/wireguard/index.md - 'guides/vpn/openvpn/overview.md': guides/vpn/openvpn/index.md - 'guides/misc/tor/overview.md': guides/misc/tor/index.md - 'guides/github/contributing.md': guides/github/index.md - 'guides/misc/whitelist-blacklist.md': guides/misc/allowlist-denylist.md - 'ftldns/debugging.md': ftldns/gdb.md diff --git a/netlify.toml b/netlify.toml index 48742a5aa..eed0088b2 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,7 +1,7 @@ [build] base = "/" publish = "site/" -command = "mkdocs build --clean --strict" +command = "zensical build --clean --strict" [build.environment] PYTHON_VERSION = "3.14" diff --git a/package-lock.json b/package-lock.json index f04d67d46..b1ed4d441 100644 --- a/package-lock.json +++ b/package-lock.json @@ -152,9 +152,9 @@ } }, "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -278,6 +278,19 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -323,9 +336,9 @@ } }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -474,19 +487,6 @@ "entities": "^6.0.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -701,6 +701,19 @@ "markdown-it": "bin/markdown-it.mjs" } }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/markdownlint": { "version": "0.40.0", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.40.0.tgz", @@ -1372,9 +1385,9 @@ } }, "node_modules/mime": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", - "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -1563,9 +1576,9 @@ } }, "node_modules/srcset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz", - "integrity": "sha512-/P1UYbGfJVlxZag7aABNRrulEXAwCSDo7fklafOQrantuPTDmYgijJMks2zusPCVzgW9+4P69mq7w6pYuZpgxw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.2.tgz", + "integrity": "sha512-pucR5KmXL7uWI59sXE2nuodomLsfnIQDa5Fck0TooiyxsIx+JYGiFm+wFO7aaDvvl/43ipjUjAb5je7dcAwlzQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 22fb3f751..7a4bcf88f 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,12 @@ }, "homepage": "https://docs.pi-hole.net/", "scripts": { - "build": "mkdocs build --clean --strict", + "build": "zensical build --clean --strict", "markdownlint": "markdownlint-cli2 \"**/*.md\" \"!**/node_modules/**\"", "linkinator": "linkinator site --recurse --silent --skip \"^(?!http://localhost)\"", "pretest": "npm run build", "test": "npm run markdownlint && npm run linkinator", - "serve": "mkdocs serve --dev-addr 0.0.0.0:8000", + "serve": "zensical serve --dev-addr 0.0.0.0:8000", "start": "npm run serve" }, "devDependencies": { diff --git a/requirements.txt b/requirements.txt index f2848bd54..0823f99c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1 @@ -mkdocs==1.6.1 -mkdocs-git-revision-date-localized-plugin==1.5.2 -mkdocs-material==9.7.6 -mkdocs-redirects==1.2.3 -markdown-include==0.8.1 +zensical==0.0.43 diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 000000000..2b9003f90 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,298 @@ +# ---------------------------------------------------------------------------- +# Global options section +# ---------------------------------------------------------------------------- + +[project] +site_name = "Pi-hole documentation" +site_url = "https://docs.pi-hole.net/" +site_description = "A black hole for Internet advertisements" +site_author = "Pi-hole Team" +repo_url = "https://github.com/pi-hole/pi-hole" + +edit_uri = "../docs/blob/master/docs/" + +docs_dir = "docs" + +# This is overwritten by orverrides/partials/copyright.html +# see https://zensical.org/docs/customization/?h=over#overriding-partials +copyright = "" + +extra_css = ["extra.css"] +#extra_javascript = ["assets/javascript/extra.js"] + +# ---------------------------------------------------------------------------- +# Navigation section +# ---------------------------------------------------------------------------- + + nav = [ + {"About Pi-hole" = [ + {"About Pi-hole" = "index.md"}, + {"Getting in touch" = "main/contact.md"}, + {"Pi-hole Origins" = "main/origins.md"}, + {"On the Web" = "main/coverage.md"} + ]}, + {"Getting Started" = [ + {"Getting Started" = "main/index.md"}, + {"Prerequisites" = "main/prerequisites.md"}, + {"Installation" = "main/basic-install.md"}, + {"Post-Install" = "main/post-install.md"}, + {"Updating" = "main/update.md"}, + {"Uninstalling" = "main/uninstall.md"} + ]}, + {"The  pihole  Command" = "main/pihole-command.md"}, + {"Databases" = [ + {"Databases" = "database/index.md"}, + {"Query Database" = "database/query-database.md"}, + {"Domain Database" = [ + {"Domain Database" = "database/domain-database/index.md"}, + {"Group Management" = "database/domain-database/groups.md"}, + {"Database Recovery" = "database/domain-database/recovery.md"} + ]}, + ]}, + {"Pi-hole API" = [ + {"Pi-hole API" = "api/index.md"}, + {"Authentication" = "api/auth.md"}, + {"TLS/SSL" = "api/tls.md"} + ]}, + {"FTLDNS" = [ + {"FTLDNS" = "ftldns/index.md"}, + {"Configuration" = "ftldns/configfile.md"}, + {"Interfaces" = "ftldns/interfaces.md"}, + {"DNS cache" = "ftldns/dns-cache.md"}, + {"DNS resolver" = "ftldns/dns-resolver.md"}, + {"Blocking mode" = "ftldns/blockingmode.md"}, + {"Privacy levels" = "ftldns/privacylevels.md"}, + {"dnsmasq warnings" = "ftldns/dnsmasq_warn.md"}, + {"Webserver" = "ftldns/webserver.md"}, + {"Advanced" = [ + {"Install from source" = "ftldns/compile.md"}, + {"Signals" = "ftldns/signals.md"}, + {"Cache dump" = "ftldns/cache_dump.md"}, + {"Packet dump" = "ftldns/package_dump.md"}, + {"Debugging" = [ + {"gdb" = "ftldns/gdb.md"}, + {"valgrind" = "ftldns/valgrind.md"}, + ]}, + ]}, + ]}, + {"Group Management" = [ + {"Group Management" = "group_management/index.md"}, + {"Examples" = "group_management/example.md"} + ]}, + {"RegEx Blocking" = [ + {"Regex Blocking" = "regex/index.md"}, + {"Testing" = "regex/testmode.md"}, + {"Tutorial" = "regex/tutorial.md"}, + {"Pi-hole extensions" = "regex/pi-hole.md"}, + {"Approximate matching" = "regex/approximate.md"} + ]}, + {"Docker" = [ + {"Docker" = "docker/index.md"}, + {"Configuration" = "docker/configuration.md"}, + {"Upgrading" = [ + {"Upgrading" = "docker/upgrading/index.md"}, + {"Upgrading from v5.x" = "docker/upgrading/v5-v6.md"} + ]}, + {"Building" = "docker/build-image.md"}, + {"DHCP" = "docker/DHCP.md"}, + {"Tips and Tricks" = "docker/tips-and-tricks.md"}, + ]}, + {"Contributing" = [ + {"Contributing" = "guides/github/index.md"}, + {"Developer Certificate of Origin (DCO)" = "guides/github/dco.md"}, + {"How to sign-off commits" = "guides/github/how-to-signoff.md"}, + {"How to fork and rebase" = "guides/github/how-to-fork-rebase.md"} + ]}, + {"Guides" = [ + {"DNS" = [ + {"unbound" = "guides/dns/unbound.md"}, + {"cloudflared (DoH)" = "guides/dns/cloudflared.md"}, + {"dnscrypt-proxy (DoH)" = "guides/dns/dnscrypt-proxy.md"}, + {"Upstream DNS Providers" = "guides/dns/upstream-dns-providers.md"} + ]}, + {"VPN" = [ + {"WireGuard" = [ + {"Wireguard" = "guides/vpn/wireguard/index.md"}, + {"Concept" = "guides/vpn/wireguard/concept.md"}, + {"Install server" = "guides/vpn/wireguard/server.md"}, + {"Add client(s)" = "guides/vpn/wireguard/client.md"}, + {"Optional extra features" = [ + {"Make local devices accessible" = "guides/vpn/wireguard/internal.md"}, + {"Tunnel all Internet traffic" = "guides/vpn/wireguard/route-everything.md"} + ]}, + {"Troubleshooting" = "guides/vpn/wireguard/faq.md"} + ]}, + {"OpenVPN" = [ + {"OpenVPN" = "guides/vpn/openvpn/index.md"}, + {"Installation" = "guides/vpn/openvpn/installation.md"}, + {"Setup OpenVPN Server" = "guides/vpn/openvpn/setup-openvpn-server.md"}, + {"Firewall Configuration" = "guides/vpn/openvpn/firewall.md"}, + {"Connecting clients" = [ + {"General" = "guides/vpn/openvpn/clients.md"}, + {"Android" = "guides/vpn/openvpn/android-client.md"} + ]}, + {"Optional: Only route DNS via VPN" = "guides/vpn/openvpn/only-dns-via-vpn.md"}, + {"Optional: Dual operation: LAN & VPN at the same time" = "guides/vpn/openvpn/dual-operation.md"}, + {"Optional: Full and DNS-only" = "guides/vpn/openvpn/dual-VPN.md"}, + {"Optional: Dynamic DNS" = "guides/vpn/openvpn/dynDNS.md"}, + {"Troubleshooting" = "guides/vpn/openvpn/troubleshooting.md"} + ]} + ]}, + {"Misc" = [ + {"Home Assistant" = "guides/misc/homeassistant.md"}, + {"Benchmarking" = "guides/misc/benchmark.md"}, + {"Tor & Pi-hole" = [ + {"Tor & Pi-hole" = "guides/misc/tor/index.md"}, + {"Basic Setup" = "guides/misc/tor/setup.md"}, + {"Using Tor" = "guides/misc/tor/using-tor.md"}, + {"Performance and other issues" = "guides/misc/tor/performance-issues.md"}, + {"Using DNSSEC" = "guides/misc/tor/dnssec.md"}, + ]}, + {"Allowlist and Denylist editing" = "guides/misc/allowlist-denylist.md"}, + {"Network Time Protocol" = "guides/misc/ntp.md"} + ]} + ]}, + {"Router setup" = [ + {"ASUS router" = "routers/asus.md"}, + {"Fritz!Box (EN)" = "routers/fritzbox.md"}, + {"Fritz!Box (DE)" = "routers/fritzbox-de.md"}, + {"Nokia G-240W-B" = "routers/nokia-G240WB.md"}, + {"OPNsense" = "routers/OPNsense.md"}, + {"TP-Link" = "routers/tp-link.md"}, + {"Ubiquiti USG" = "routers/ubiquiti-usg.md"} + ]}, + {"FAQ" = "main/faq.md"}, + {"Community Projects" = "main/projects.md"} + ] + +# ---------------------------------------------------------------------------- +# Section for configuring theme options +# ---------------------------------------------------------------------------- +[project.theme] + +# change this to "classic" to use the traditional Material for MkDocs look. +variant = "modern" + +custom_dir = "overrides" +favicon = "images/favicon.ico" +logo = "images/logo.svg" +language = "en" + +# Zensical provides a number of feature toggles that change the behavior +# of the documentation site. +features = [ + #"announce.dismiss", + "content.action.edit", + #"content.action.view", + #"content.code.annotate", + "content.code.copy", + #"content.code.select", + "content.footnote.tooltips", + "content.tabs.link", + #"content.tooltips", + # "header.autohide", + # "navigation.expand", + #"navigation.footer", + "navigation.indexes", + "navigation.instant", + "navigation.instant.prefetch", + #"navigation.instant.progress", + #"navigation.path", + #"navigation.prune", + #"navigation.sections", + #"navigation.tabs", + #"navigation.tabs.sticky", + "navigation.top", + "navigation.tracking", + "search.highlight", + "toc.follow", + #"toc.integrate", +] + +# Palette toggle for light mode +[[project.theme.palette]] +scheme = "default" +media = "(prefers-color-scheme: light)" +palette.primary = "indigo" +palette.accent = "indigo" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" + +# Palette toggle for dark mode +[[project.theme.palette]] +scheme = "slate" +media = "(prefers-color-scheme: dark)" +palette.primary = "indigo" +palette.accent = "indigo" +toggle.icon = "lucide/moon" +toggle.name = "Switch to light mode" + +[project.theme.font] +text = "Source Sans Pro" +code = "Roboto Mono" + +# ---------------------------------------------------------------------------- +# Section for markdown extensions +# ---------------------------------------------------------------------------- + +[project.markdown_extensions.abbr] +[project.markdown_extensions.admonition] +[project.markdown_extensions.attr_list] +[project.markdown_extensions.def_list] +[project.markdown_extensions.footnotes] +[project.markdown_extensions.md_in_html] + +[project.markdown_extensions.toc] +title = "Table of contents" +permalink = "true" +permalink_title = "Anchor link to this section" + +[project.markdown_extensions.pymdownx.arithmatex] +generic = true + +[project.markdown_extensions.pymdownx.betterem] +smart_enable = "all" + +[project.markdown_extensions.pymdownx.caret] +[project.markdown_extensions.pymdownx.details] + +[project.markdown_extensions.pymdownx.emoji] +emoji_generator = "zensical.extensions.emoji.to_svg" +emoji_index = "zensical.extensions.emoji.twemoji" + +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +line_spans = "__span" +pygments_lang_class = true + +[project.markdown_extensions.pymdownx.inlinehilite] +[project.markdown_extensions.pymdownx.keys] +[project.markdown_extensions.pymdownx.mark] +[project.markdown_extensions.pymdownx.smartsymbols] +[project.markdown_extensions.pymdownx.superfences] + +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = true + +[project.markdown_extensions.pymdownx.tasklist] +custom_checkbox = true + +[project.markdown_extensions.pymdownx.tilde] + +[project.markdown_extensions.pymdownx.snippets] +auto_append = ["docs/abbreviations.md"] + + +# ---------------------------------------------------------------------------- +# Section for configuring extra options +# ---------------------------------------------------------------------------- + +[[project.extra.social]] +icon = "fontawesome/solid/earth-americas" +link = "https://pi-hole.net/" +name = "Website" + +[[project.extra.social]] +icon = "fontawesome/brands/github" +link = "https://github.com/pi-hole" +name = "GitHub"