diff --git a/.github/workflows/mdbook.yml b/.github/workflows/mdbook.yml
new file mode 100644
index 0000000..7abc6ea
--- /dev/null
+++ b/.github/workflows/mdbook.yml
@@ -0,0 +1,47 @@
+name: mdBook
+
+on:
+ push:
+ branches:
+ - main
+ tags:
+ - *
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup mdBook
+ uses: peaceiris/actions-mdbook@v2
+ with:
+ mdbook-version: 'latest'
+
+ - run: mdbook build book
+
+ - name: Set output directory
+ run: |
+ OUTDIR=$(basename ${{ github.ref }})
+ echo "OUTDIR=$OUTDIR" >> $GITHUB_ENV
+
+ - name: Deploy stable
+ uses: peaceiris/actions-gh-pages@v4
+ if: startswith(github.ref, 'refs/tags/')
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./book/book
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v4
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./book/book
+ destination_dir: ./${{ env.OUTDIR }}
diff --git a/README.md b/README.md
index a6204bd..2bcb4ca 100644
--- a/README.md
+++ b/README.md
@@ -41,56 +41,10 @@ check the [release notes](https://github.com/adamperkowski/nvrs/releases) and [c
## Installation
-Arch Linux
-
-[nvrs](https://aur.archlinux.org/packages/nvrs) is available as a package in the [AUR](https://aur.archlinux.org).
-you can install it with your preferred [AUR helper](https://wiki.archlinux.org/title/AUR_helpers), example:
-
-```sh
-paru -S nvrs
-```
-
-or manually:
-
-```sh
-git clone https://aur.archlinux.org/nvrs.git
-cd nvrs
-makepkg -si
-```
-
-Cargo
-
-[nvrs](https://crates.io/crates/nvrs) can be installed via [Cargo](https://doc.rust-lang.org/cargo) with:
-
-```sh
-cargo install nvrs --all-features
-```
-
-note that crates installed using `cargo install` require manual updating with `cargo install --force`.
-
-Manual
-
-1. download the latest binary from [GitHub's release page](https://github.com/adamperkowski/nvrs/releases/latest)
-2. allow execution
-```sh
-chmod +x nvrs
-```
-3. move the file to a directory in `$PATH` (using `/usr/bin` as an example)
-```sh
-sudo mv nvrs /usr/bin/nvrs
-```
-
-
example: `v` for tags like `v0.1.0` | string | ❌ | ❌ |
-| `use_max_tag` | use max git tag instead of the latest release | bool | ❌ | ❌ |
-| `url` | url to check for source type `regex` | string | ❌ | ❌ |
-| `regex` | regex to search url for source type `regex` | bool | ❌ | ❌ |
-
-### Keyfile structure
-this file contains API keys for various [sources](#sources). example can be found [here](/n_keyfile.toml).
-
-```toml
-[keys]
-github = "your_secret_github_api_key_that_you_shouldnt_push_to_a_public_nor_a_private_remote_repo_because_there_will_definitely_be_serious_consequences_sooner_or_later_if_you_do_trust_me_just_dont"
-gitlab = "remember_to_replace_the_example_values_here_here_with_your_actual_keys_otherwise_it_wont_work_but_dont_push_keyfiles_to_remote_repos"
-```
-
-"I think that example value is not long enough" - orhun
-
## Documentation
-the nvrs library documentation can be found at [docs.rs/nvrs](https://docs.rs/nvrs/latest/nvrs)
+full documentation can be found at [nvrs.adamperkowski.dev](https://nvrs.adamperkowski.dev).
+nvrs library documentation can be found at [docs.rs/nvrs](https://docs.rs/nvrs/latest/nvrs)
## Contributing
-
if you want to contribute to the project, please read the [Contributing Guidelines](/CONTRIBUTING.md) before doing so.
if you find any parts of the code or the documentation unclear, or have any suggestions, feel free to [open an issue](https://github.com/adamperkowski/nvrs/issues/new/choose) or a [pull request](https://github.com/adamperkowski/nvrs/pull/new).
diff --git a/book/.gitignore b/book/.gitignore
new file mode 100644
index 0000000..7585238
--- /dev/null
+++ b/book/.gitignore
@@ -0,0 +1 @@
+book
diff --git a/book/book.toml b/book/book.toml
new file mode 100644
index 0000000..5806d15
--- /dev/null
+++ b/book/book.toml
@@ -0,0 +1,17 @@
+[book]
+authors = ["Adam Perkowski"]
+language = "en"
+multilingual = false
+src = "src"
+title = "nvrs"
+
+[output.html]
+cname = "nvrs.adamperkowski.dev"
+default-theme = "nvrs"
+preferred-dark-theme = "nvrs"
+git-repository-url = "https://github.com/adamperkowski/nvrs"
+edit-url-template = "https://github.com/adamperkowski/nvrs/edit/main/book/{path}"
+additional-css = ["./theme/custom.css"]
+
+[output.html.search]
+use-boolean-and = true
diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md
new file mode 100644
index 0000000..d611ea4
--- /dev/null
+++ b/book/src/SUMMARY.md
@@ -0,0 +1,10 @@
+# Summary
+
+- [nvrs](./nvrs.md)
+- [features](./features.md)
+- [installation](./installation.md)
+- [configuration](./configuration.md)
+ - [`__config__` table](./config-table.md)
+ - [package entries](./package-entries.md)
+ - [keyfile structure](./keyfile-structure.md)
+- [credits](./credits.md)
diff --git a/book/src/config-table.md b/book/src/config-table.md
new file mode 100644
index 0000000..2920815
--- /dev/null
+++ b/book/src/config-table.md
@@ -0,0 +1,10 @@
+# `__config__` table
+this configures the behavior of nvrs. see the [example config](https://github.com/adamperkowski/nvrs/blob/main/nvrs.toml#L7-L10).
+
+available fields:
+
+| name | description | type | required |
+|-----------|----------------------------------------------------------------------|--------|----------|
+| `oldver` | path to the `oldver` file | string | ✔️ |
+| `newver` | path to the `newver` file | string | ✔️ |
+| `keyfile` | path to a keyfile (see [keyfile structure](/keyfile-structure.html)) | string | ❌ |
diff --git a/book/src/configuration.md b/book/src/configuration.md
new file mode 100644
index 0000000..3487bbd
--- /dev/null
+++ b/book/src/configuration.md
@@ -0,0 +1,5 @@
+# configuration
+nvrs relies on a TOML configuration file ([example](https://github.com/adamperkowski/nvrs/blob/main/nvrs.toml)) containing basic settings, such as `oldver`, `newver` & `keyfile` paths, as well as [package entries](/package-entries.md). supported config paths:
+- `$XDG_CONFIG_HOME/nvrs.toml` (`~/.config/nvrs.toml` if the variable is not set)
+- `./nvrs.toml`
+- custom paths set with `nvrs --config`
diff --git a/book/src/credits.md b/book/src/credits.md
new file mode 100644
index 0000000..1d6f736
--- /dev/null
+++ b/book/src/credits.md
@@ -0,0 +1,3 @@
+# credits
+- [依云](https://github.com/lilydjwg) | the original [nvchecker](https://github.com/lilydjwg/nvchecker)
+- [orhun](https://github.com/orhun) | the idea
diff --git a/book/src/features.md b/book/src/features.md
new file mode 100644
index 0000000..5cb43d7
--- /dev/null
+++ b/book/src/features.md
@@ -0,0 +1,15 @@
+# features
+### [nvchecker](https://github.com/lilydjwg/nvchecker) compatibility
+check the [release notes](https://github.com/adamperkowski/nvrs/releases) and [configuration docs](/configuration.html) for compatibility updates and instructions
+
+### speed
+
+
+| command | time per **updated** package | details |
+|---------------|------------------------------|--------------------------------------------------------|
+| `nvrs` | ~ 0.03s | **API requests included**
depends on internet speed |
+| `nvrs --cmp` | ~ 0.0008s | depends on disk speed |
+| `nvrs --take` | ~ 0.001s | depends on disk speed |
+
+### sources
+see the [project's readme](https://github.com/adamperkowski/nvrs?tab=readme-ov-file#sources) for a list of supported sources
diff --git a/book/src/installation.md b/book/src/installation.md
new file mode 100644
index 0000000..d2c32cc
--- /dev/null
+++ b/book/src/installation.md
@@ -0,0 +1,38 @@
+# installation
+
+
+## Arch Linux
+[nvrs](https://aur.archlinux.org/packages/nvrs) is available as a package in the [AUR](https://aur.archlinux.org).
+you can install it with your preferred [AUR helper](https://wiki.archlinux.org/title/AUR_helpers), example:
+
+```sh
+paru -S nvrs
+```
+
+or manually:
+
+```
+git clone https://aur.archlinux.org/nvrs.git
+cd nvrs
+makepkg -si
+```
+
+## Cargo
+[nvrs](https://crates.io/crates/nvrs) can be installed via [Cargo](https://doc.rust-lang.org/cargo) with:
+
+```sh
+cargo install nvrs --all-features
+```
+
+note that crates installed using `cargo install` require manual updating with `cargo install --force`.
+
+## Manual
+1. download the latest binary from [GitHub's release page](https://github.com/adamperkowski/nvrs/releases/latest)
+2. allow execution
+```sh
+chmod +x nvrs
+```
+3. move the file to a directory in `$PATH` (using `/usr/bin` as an example)
+```sh
+sudo mv nvrs /usr/bin/nvrs
+```
diff --git a/book/src/keyfile-structure.md b/book/src/keyfile-structure.md
new file mode 100644
index 0000000..e919ffd
--- /dev/null
+++ b/book/src/keyfile-structure.md
@@ -0,0 +1,10 @@
+# keyfile structure
+this file contains API keys for various [sources](https://github.com/adamperkowski/nvrs?tab=readme-ov-file#sources). example can be found [here](https://github.com/adamperkowski/nvrs/blob/main/n_keyfile.toml).
+
+```toml
+[keys]
+github = "your_secret_github_api_key_that_you_shouldnt_push_to_a_public_nor_a_private_remote_repo_because_there_will_definitely_be_serious_consequences_sooner_or_later_if_you_do_trust_me_just_dont"
+gitlab = "remember_to_replace_the_example_values_here_here_with_your_actual_keys_otherwise_it_wont_work_but_dont_push_keyfiles_to_remote_repos"
+```
+
+"I think that example value is not long enough" - orhun
diff --git a/book/src/nvrs.md b/book/src/nvrs.md
new file mode 100644
index 0000000..851c4ba
--- /dev/null
+++ b/book/src/nvrs.md
@@ -0,0 +1,33 @@
+# nvrs
+[![Grind Compliant](https://img.shields.io/badge/Grind-Compliant-blue?style=for-the-badge&labelColor=%23a8127d&color=%23336795)](https://github.com/grindhousedev/grindlines)
+
+fast new version checker for software releases
+
+documentation for bleeding-edge main can be found at [https://nvrs.adamperkowski.dev/main](https://nvrs.adamperkowski.dev/main)
+
+keep in mind that this website is still a WIP
+
+## copyright
+```
+MIT License
+
+Copyright (c) 2025 Adam Perkowski
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
diff --git a/book/src/package-entries.md b/book/src/package-entries.md
new file mode 100644
index 0000000..8bf3d8d
--- /dev/null
+++ b/book/src/package-entries.md
@@ -0,0 +1,14 @@
+# package entries
+[example](https://github.com/adamperkowski/nvrs/blob/main/nvrs.toml#L12-L15)
+
+package entries are custom entries in the main config file. they contain values such as:
+
+| name | description | type | required | custom |
+|---------------|---------------------------------------------------------------------------------|--------|----------|--------|
+| `source` | see [sources](https://github.com/adamperkowski/nvrs?tab=readme-ov-file#sources) | string | ✔️ | ❌ |
+| source name | the "target". eg. repo path for `github` | string | ✔️ | ✔️ |
+| `host` | domain name the source is hosted on | string | ❌ | ❌ |
+| `prefix` | the prefix used in releases / tags
example: `v` for tags like `v0.1.0` | string | ❌ | ❌ |
+| `use_max_tag` | use max git tag instead of the latest release | bool | ❌ | ❌ |
+| `url` | url to check for source type `regex` | string | ❌ | ❌ |
+| `regex` | regex to search url for source type `regex` | bool | ❌ | ❌ |
diff --git a/book/theme/custom.css b/book/theme/custom.css
new file mode 100644
index 0000000..1ccddf1
--- /dev/null
+++ b/book/theme/custom.css
@@ -0,0 +1,436 @@
+/* Globals */
+
+:root {
+ --sidebar-width: 300px;
+ --sidebar-resize-indicator-width: 8px;
+ --sidebar-resize-indicator-space: 2px;
+ --page-padding: 15px;
+ --content-max-width: 750px;
+ --menu-bar-height: 50px;
+ --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
+ --code-font-size: 0.875em /* please adjust the ace font size accordingly in editor.js */
+}
+
+::selection {
+ background: #6E1D57;
+ color: #00050D;
+}
+
+/* Themes */
+
+.nvrs {
+ --bg: #00050D;
+ --fg: #A3A3A3;
+
+ --sidebar-bg: #000D19;
+ --sidebar-fg: #A3A3A3;
+ --sidebar-non-existant: #A3A3A3;
+ --sidebar-active: #A01576;
+ --sidebar-spacer: #00050D;
+
+ --scrollbar: var(--sidebar-fg);
+
+ --icons: #A3A3A3;
+ --icons-hover: #A3A3A3;
+
+ --links: #1A76A8;
+
+ --inline-code-color: #A3A3A3;
+
+ --theme-popup-bg: #000D19;
+ --theme-popup-border: #0C567E;
+ --theme-hover: #6E1D57;
+
+ --quote-bg: #000D19;
+ --quote-border: #0C567E;
+
+ --warning-border: #7D0C0C;
+
+ --table-border-color: #000D19;
+ --table-header-bg: #00050D;
+ --table-alternate-bg: #000D19;
+
+ --searchbar-border-color: #0C567E;
+ --searchbar-bg: #000D19;
+ --searchbar-fg: #A3A3A3;
+ --searchbar-shadow-color: #aaa;
+ --searchresults-header-fg: #666;
+ --searchresults-border-color: #98a3ad;
+ --searchresults-li-bg: #2b2b2f;
+ --search-mark-bg: #0C567E;
+
+ --color-scheme: dark;
+
+ /* Same as `--icons` */
+ --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
+ /* Same as `--sidebar-active` */
+ --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
+}
+
+/* https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html */
+.nvrs code {
+ color: #A3A3A3;
+ background: #000D19;
+}
+.nvrs.hljs {
+ color: #A3A3A3;
+ background: #000D19;
+}
+.nvrs .hljs-keyword {
+ color: #6E1D57;
+}
+.nvrs .hljs-built_in {
+ color: #951313;
+}
+.nvrs .hljs-type {
+ color: #ABA119;
+}
+.nvrs .hljs-literal {
+ color: #7D750C;
+}
+.nvrs .hljs-number {
+ color: #7D750C;
+}
+.nvrs .hljs-operator {
+ color: #188AA9;
+}
+.nvrs .hljs-punctuation {
+ color: #A3A3A3;
+}
+.nvrs .hljs-property {
+ color: #12748F;
+}
+.nvrs .hljs-regexp {
+ color: #A01576;
+}
+.nvrs .hljs-string {
+ color: #16A85F;
+}
+.nvrs .hljs-char.escape_ {
+ color: #16A85F;
+}
+.nvrs .hljs-subst {
+ color: #A3A3A3;
+}
+.nvrs .hljs-symbol {
+ color: #ABA119;
+}
+.nvrs .hljs-variable {
+ color: #6E1D57;
+}
+.nvrs .hljs-variable.language_ {
+ color: #6E1D57;
+}
+.nvrs .hljs-variable.constant_ {
+ color: #7D750C;
+}
+.nvrs .hljs-title {
+ color: #1A76A8;
+}
+.nvrs .hljs-title.class_ {
+ color: #ABA119;
+}
+.nvrs .hljs-title.function_ {
+ color: #1A76A8;
+}
+.nvrs .hljs-params {
+ color: #A3A3A3;
+}
+.nvrs .hljs-comment {
+ color: #A3A3A3;
+}
+.nvrs .hljs-doctag {
+ color: #951313;
+}
+.nvrs .hljs-meta {
+ color: #7D750C;
+}
+.nvrs .hljs-section {
+ color: #0C567E;
+}
+.nvrs .hljs-tag {
+ color: #188AA9;
+}
+.nvrs .hljs-name {
+ color: #6E1D57;
+}
+.nvrs .hljs-attr {
+ color: #12748F;
+}
+.nvrs .hljs-attribute {
+ color: #16A85F;
+}
+.nvrs .hljs-bullet {
+ color: #188AA9;
+}
+.nvrs .hljs-code {
+ color: #16A85F;
+}
+.nvrs .hljs-emphasis {
+ color: #951313;
+ font-style: italic;
+}
+.nvrs .hljs-strong {
+ color: #951313;
+ font-weight: bold;
+}
+.nvrs .hljs-formula {
+ color: #188AA9;
+}
+.nvrs .hljs-link {
+ color: #12748F;
+ font-style: italic;
+}
+.nvrs .hljs-quote {
+ color: #16A85F;
+ font-style: italic;
+}
+.nvrs .hljs-selector-tag {
+ color: #ABA119;
+}
+.nvrs .hljs-selector-id {
+ color: #89b4fa;
+}
+.nvrs .hljs-selector-class {
+ color: #0C567E;
+}
+.nvrs .hljs-selector-attr {
+ color: #6E1D57;
+}
+.nvrs .hljs-selector-pseudo {
+ color: #0C567E;
+}
+.nvrs .hljs-template-tag {
+ color: #ABA119;
+}
+.nvrs .hljs-template-variable {
+ color: #ABA119;
+}
+.nvrs .hljs-addition {
+ color: #16A85F;
+ background: rgba(166, 227, 161, 0.15);
+}
+.nvrs .hljs-deletion {
+ color: #951313;
+ background: rgba(243, 139, 168, 0.15);
+}
+.nvrs blockquote blockquote {
+ border-top: 0.1em solid #A3A3A3;
+ border-bottom: 0.1em solid #A3A3A3;
+}
+.nvrs hr {
+ border-color: #A3A3A3;
+ border-style: solid;
+}
+.nvrs del {
+ color: #A3A3A3;
+}
+.nvrs .ace_gutter {
+ color: #A3A3A3;
+ background: #181825;
+}
+
+
+/* https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html */
+.mocha.hljs {
+ color: #cdd6f4;
+ background: #1e1e2e;
+}
+.mocha .hljs-keyword {
+ color: #cba6f7;
+}
+.mocha .hljs-built_in {
+ color: #f38ba8;
+}
+.mocha .hljs-type {
+ color: #f9e2af;
+}
+.mocha .hljs-literal {
+ color: #fab387;
+}
+.mocha .hljs-number {
+ color: #fab387;
+}
+.mocha .hljs-operator {
+ color: #89dceb;
+}
+.mocha .hljs-punctuation {
+ color: #bac2de;
+}
+.mocha .hljs-property {
+ color: #94e2d5;
+}
+.mocha .hljs-regexp {
+ color: #f5c2e7;
+}
+.mocha .hljs-string {
+ color: #a6e3a1;
+}
+.mocha .hljs-char.escape_ {
+ color: #a6e3a1;
+}
+.mocha .hljs-subst {
+ color: #a6adc8;
+}
+.mocha .hljs-symbol {
+ color: #f2cdcd;
+}
+.mocha .hljs-variable {
+ color: #cba6f7;
+}
+.mocha .hljs-variable.language_ {
+ color: #cba6f7;
+}
+.mocha .hljs-variable.constant_ {
+ color: #fab387;
+}
+.mocha .hljs-title {
+ color: #89b4fa;
+}
+.mocha .hljs-title.class_ {
+ color: #f9e2af;
+}
+.mocha .hljs-title.function_ {
+ color: #89b4fa;
+}
+.mocha .hljs-params {
+ color: #cdd6f4;
+}
+.mocha .hljs-comment {
+ color: #9399b2;
+}
+.mocha .hljs-doctag {
+ color: #f38ba8;
+}
+.mocha .hljs-meta {
+ color: #fab387;
+}
+.mocha .hljs-section {
+ color: #89b4fa;
+}
+.mocha .hljs-tag {
+ color: #94e2d5;
+}
+.mocha .hljs-name {
+ color: #cba6f7;
+}
+.mocha .hljs-attr {
+ color: #89b4fa;
+}
+.mocha .hljs-attribute {
+ color: #a6e3a1;
+}
+.mocha .hljs-bullet {
+ color: #94e2d5;
+}
+.mocha .hljs-code {
+ color: #a6e3a1;
+}
+.mocha .hljs-emphasis {
+ color: #f38ba8;
+ font-style: italic;
+}
+.mocha .hljs-strong {
+ color: #f38ba8;
+ font-weight: bold;
+}
+.mocha .hljs-formula {
+ color: #94e2d5;
+}
+.mocha .hljs-link {
+ color: #74c7ec;
+ font-style: italic;
+}
+.mocha .hljs-quote {
+ color: #a6e3a1;
+ font-style: italic;
+}
+.mocha .hljs-selector-tag {
+ color: #f9e2af;
+}
+.mocha .hljs-selector-id {
+ color: #89b4fa;
+}
+.mocha .hljs-selector-class {
+ color: #94e2d5;
+}
+.mocha .hljs-selector-attr {
+ color: #cba6f7;
+}
+.mocha .hljs-selector-pseudo {
+ color: #94e2d5;
+}
+.mocha .hljs-template-tag {
+ color: #f2cdcd;
+}
+.mocha .hljs-template-variable {
+ color: #f2cdcd;
+}
+.mocha .hljs-addition {
+ color: #a6e3a1;
+ background: rgba(166, 227, 161, 0.15);
+}
+.mocha .hljs-deletion {
+ color: #f38ba8;
+ background: rgba(243, 139, 168, 0.15);
+}
+.mocha code {
+ color: #cdd6f4;
+ background: #181825;
+}
+.mocha blockquote blockquote {
+ border-top: 0.1em solid #585b70;
+ border-bottom: 0.1em solid #585b70;
+}
+.mocha hr {
+ border-color: #585b70;
+ border-style: solid;
+}
+.mocha del {
+ color: #9399b2;
+}
+.mocha .ace_gutter {
+ color: #7f849c;
+ background: #181825;
+}
+.mocha .ace_gutter-active-line.ace_gutter-cell {
+ color: #f5c2e7;
+ background: #181825;
+}
+.mocha .tooltiptext {
+ background: #181825;
+ color: #cdd6f4;
+}
+
+.mocha {
+ --bg: #1e1e2e;
+ --fg: #cdd6f4;
+ --sidebar-bg: #181825;
+ --sidebar-fg: #cdd6f4;
+ --sidebar-non-existant: #6c7086;
+ --sidebar-active: #89b4fa;
+ --sidebar-spacer: #6c7086;
+ --scrollbar: #6c7086;
+ --icons: #6c7086;
+ --icons-hover: #7f849c;
+ --links: #89b4fa;
+ --inline-code-color: #fab387;
+ --theme-popup-bg: #181825;
+ --theme-popup-border: #6c7086;
+ --theme-hover: #313244;
+ --quote-bg: #181825;
+ --quote-border: #11111b;
+ --table-border-color: #313244;
+ --table-header-bg: #181825;
+ --table-alternate-bg: #181825;
+ --searchbar-border-color: #313244;
+ --searchbar-bg: #181825;
+ --searchbar-fg: #cdd6f4;
+ --searchbar-shadow-color: #11111b;
+ --searchresults-header-fg: #cdd6f4;
+ --searchresults-border-color: #313244;
+ --searchresults-li-bg: #1e1e2e;
+ --search-mark-bg: #fab387;
+ --warning-border: #fab387;
+ --color-scheme: dark;
+}
diff --git a/book/theme/index.hbs b/book/theme/index.hbs
new file mode 100644
index 0000000..f98615b
--- /dev/null
+++ b/book/theme/index.hbs
@@ -0,0 +1,322 @@
+
+
+