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/calibreapp-image-actions.yml b/.github/workflows/calibreapp-image-actions.yml index 4bf3558f2..15aabf180 100644 --- a/.github/workflows/calibreapp-image-actions.yml +++ b/.github/workflows/calibreapp-image-actions.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Clone repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 #v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1 with: persist-credentials: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05b05a878..3d89007bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,20 +18,20 @@ jobs: runs-on: ubuntu-latest steps: - name: Clone repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 #v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1 with: persist-credentials: false fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 #v6.1.0 with: python-version: "${{ env.PYTHON_VERSION }}" architecture: "x64" cache: pip - name: Set up Node.js - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 #v6.0.0 + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f #v6.1.0 with: node-version: "${{ env.NODE }}" cache: npm diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 358829600..b860fad6c 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Clone repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 #v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1 with: persist-credentials: false @@ -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/.github/workflows/editorconfig-checker.yml b/.github/workflows/editorconfig-checker.yml index 87fbb0306..e4769cda0 100644 --- a/.github/workflows/editorconfig-checker.yml +++ b/.github/workflows/editorconfig-checker.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Clone repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 #v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 #v6.0.1 with: persist-credentials: false - uses: editorconfig-checker/action-editorconfig-checker@4b6cd6190d435e7e084fb35e36a096e98506f7b9 #v2.1.0 diff --git a/.github/workflows/stale_pr.yml b/.github/workflows/stale_pr.yml index 11dabb266..7739b93bb 100644 --- a/.github/workflows/stale_pr.yml +++ b/.github/workflows/stale_pr.yml @@ -16,7 +16,7 @@ jobs: pull-requests: write steps: - - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 #v10.1.0 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d #v10.1.1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} # Do not automatically mark PR/issue as stale 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 db8125c54..18eb79d4c 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/ftldns/configfile.md b/docs/ftldns/configfile.md index 7bbdc1120..cd1205238 100644 --- a/docs/ftldns/configfile.md +++ b/docs/ftldns/configfile.md @@ -4676,6 +4676,30 @@ true or false FTLCONF_debug_netlink: false ``` +### `timing` + +Print timing information from various parts of FTL + +**Allowed values are:** +true or false + +**Default value:** `false` + +=== "TOML" + ```toml + [debug] + timing = false + ``` +=== "CLI" + ```shell + sudo pihole-FTL --config debug.timing=false + ``` +=== "Environment (Docker Compose)" + ```yaml + environment: + FTLCONF_debug_timing: false + ``` + ### `all` Set all debug flags at once. This is a convenience option to enable all debug flags 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 de85e7a17..5ea6eac11 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 bbaa91429..a2855f3a8 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_ 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 a289100fc..000000000 --- a/mkdocs.yml +++ /dev/null @@ -1,290 +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 - - 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 0dc5cb0e8..7ef7e6487 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,26 +9,31 @@ "version": "1.0.0", "license": "CC-BY-SA-4.0", "devDependencies": { - "linkinator": "^7.5.0", + "linkinator": "^7.5.1", "markdownlint-cli2": "0.19.1" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": ">=12" + "node": "20 || >=22" } }, "node_modules/@nodelib/fs.scandir": { @@ -69,17 +74,6 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", @@ -124,32 +118,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -157,23 +125,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -188,9 +139,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": { @@ -233,26 +184,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -263,21 +194,6 @@ "node": ">= 12" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -349,6 +265,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", @@ -393,24 +322,10 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, "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": { @@ -467,23 +382,6 @@ "node": ">=8" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -492,21 +390,18 @@ "license": "ISC" }, "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -566,19 +461,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", @@ -636,16 +518,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -680,29 +552,6 @@ "node": ">=0.12.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -751,18 +600,18 @@ } }, "node_modules/linkinator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/linkinator/-/linkinator-7.5.0.tgz", - "integrity": "sha512-dF+bw4OxBAg7EnOKtvwf721uAELg3YSYC2HvOAXgb/vtYklaW+fKQHJTvwoHF9JxVhelRZe9qAPLXl6RDkbrWA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/linkinator/-/linkinator-7.5.1.tgz", + "integrity": "sha512-Q/r6wFgazHFRs49od0U3NFGviYkSjidHIfYNIHufH63/h8ehDZ6xCKbXLYVfqjbrs20PWrPvT6i+9A9F48S0/g==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.0.0", "escape-html": "^1.0.3", - "glob": "^10.3.10", + "glob": "^13.0.0", "htmlparser2": "^10.0.0", - "marked": "^16.0.0", - "marked-gfm-heading-id": "^4.1.2", + "marked": "^17.0.0", + "marked-gfm-heading-id": "^4.1.3", "meow": "^14.0.0", "mime": "^4.0.0", "server-destroy": "^1.0.1", @@ -777,11 +626,14 @@ } }, "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, "node_modules/markdown-it": { "version": "14.1.0", @@ -801,6 +653,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.39.0", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.39.0.tgz", @@ -830,6 +695,7 @@ "integrity": "sha512-p3JTemJJbkiMjXEMiFwgm0v6ym5g8K+b2oDny+6xdl300tUKySxvilJQLSea48C6OaYNmO30kH9KxpiAg5bWJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "globby": "15.0.0", "js-yaml": "4.1.1", @@ -863,11 +729,12 @@ } }, "node_modules/marked": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.0.tgz", - "integrity": "sha512-CTPAcRBq57cn3R8n3hwc2REddc28hjR7RzDXQ+lXLmMJYqn20BaI2cGw6QjgZGIgVfp2Wdfw4aMzgNteQ6qJgQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.1.tgz", + "integrity": "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -876,16 +743,16 @@ } }, "node_modules/marked-gfm-heading-id": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/marked-gfm-heading-id/-/marked-gfm-heading-id-4.1.2.tgz", - "integrity": "sha512-EQ1WiEGHJh0C8viU+hbXbhHyWTDgEia2i96fiSemm2wdYER6YBw/9QI5TB6YFTqFfmMOxBFXPcPJtlgD0fVV2w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/marked-gfm-heading-id/-/marked-gfm-heading-id-4.1.3.tgz", + "integrity": "sha512-aR0i63LmFbuxU/gAgrgz1Ir+8HK6zAIFXMlckeKHpV+qKbYaOP95L4Ux5Gi+sKmCZU5qnN2rdKpvpb7PnUBIWg==", "dev": true, "license": "MIT", "dependencies": { "github-slugger": "^2.0.0" }, "peerDependencies": { - "marked": ">=13 <17" + "marked": ">=13 <18" } }, "node_modules/mdurl": { @@ -1469,9 +1336,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" @@ -1485,16 +1352,16 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1517,13 +1384,6 @@ "dev": true, "license": "MIT" }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", @@ -1544,28 +1404,18 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1670,42 +1520,6 @@ "dev": true, "license": "ISC" }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -1720,9 +1534,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": { @@ -1732,110 +1546,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1878,120 +1588,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } } } } diff --git a/package.json b/package.json index 1e24feaba..1a90712de 100644 --- a/package.json +++ b/package.json @@ -16,16 +16,16 @@ }, "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": { - "linkinator": "^7.5.0", + "linkinator": "^7.5.1", "markdownlint-cli2": "0.19.1" } } diff --git a/requirements.txt b/requirements.txt index dba9c1319..0c02ed9d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1 @@ -mkdocs==1.6.1 -mkdocs-git-revision-date-localized-plugin==1.5.0 -mkdocs-material==9.7.0 -mkdocs-redirects==1.2.2 -markdown-include==0.8.1 +zensical==0.0.11 diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 000000000..fb014ae02 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,277 @@ +# ---------------------------------------------------------------------------- +# 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.attr_list] +[project.markdown_extensions.footnotes] +[project.markdown_extensions.toc] +title = "Table of contents" +permalink = "true" +permalink_title = "Anchor link to this section" + +[project.markdown_extensions.admonition] +[project.markdown_extensions.pymdownx.details] +[project.markdown_extensions.pymdownx.superfences] + +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +line_spans = "__span" +pygments_lang_class = true + +[project.markdown_extensions.pymdownx.inlinehilite] + +[project.markdown_extensions.pymdownx.snippets] +auto_append = ["docs/abbreviations.md"] + +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = "true" + +[project.markdown_extensions.pymdownx.tilde] + +# ---------------------------------------------------------------------------- +# 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"