diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 9ac527d4..00000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-name: Bug report
-about: Something about Quartz isn't working the way you expect
-title: ""
-labels: bug
-assignees: ""
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots and Source**
-If applicable, add screenshots to help explain your problem.
-
-You can help speed up fixing the problem by either
-
-1. providing a simple reproduction
-2. linking to your Quartz repository where the problem can be observed
-
-**Desktop (please complete the following information):**
-
-- Quartz Version: [e.g. v4.1.2]
-- `node` Version: [e.g. v18.16]
-- `npm` version: [e.g. v10.1.0]
-- OS: [e.g. iOS]
-- Browser [e.g. chrome, safari]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index e766b49b..00000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-name: Feature request
-about: Suggest an idea or improvement for Quartz
-title: ""
-labels: enhancement
-assignees: ""
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
deleted file mode 100644
index f0fc1fd1..00000000
--- a/.github/workflows/ci.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: Build and Test
-
-on:
- pull_request:
- branches:
- - v4
- push:
- branches:
- - v4
- workflow_dispatch:
-
-jobs:
- build-and-test:
- if: ${{ github.repository == 'jackyzha0/quartz' }}
- strategy:
- matrix:
- os: [windows-latest, macos-latest, ubuntu-latest]
- runs-on: ${{ matrix.os }}
- permissions:
- contents: write
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: 20
-
- - name: Cache dependencies
- uses: actions/cache@v4
- with:
- path: ~/.npm
- key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- restore-keys: |
- ${{ runner.os }}-node-
-
- - run: npm ci
-
- - name: Check types and style
- run: npm run check
-
- - name: Test
- run: npm test
-
- - name: Ensure Quartz builds, check bundle info
- run: npx quartz build --bundleInfo
-
- publish-tag:
- if: ${{ github.repository == 'jackyzha0/quartz' && github.ref == 'refs/heads/v4' }}
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Get package version
- run: node -p -e '`PACKAGE_VERSION=${require("./package.json").version}`' >> $GITHUB_ENV
- - name: Create release tag
- uses: pkgdeps/git-tag-action@v3
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- github_repo: ${{ github.repository }}
- version: ${{ env.PACKAGE_VERSION }}
- git_commit_sha: ${{ github.sha }}
- git_tag_prefix: "v"
diff --git a/.github/workflows/docker-build-push.yaml b/.github/workflows/docker-build-push.yaml
deleted file mode 100644
index 308aee3c..00000000
--- a/.github/workflows/docker-build-push.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-name: Docker build & push image
-
-on:
- push:
- branches: [v4]
- tags: ["v*"]
- pull_request:
- branches: [v4]
- paths:
- - .github/workflows/docker-build-push.yaml
- - quartz/**
- workflow_dispatch:
-
-jobs:
- build:
- if: ${{ github.repository == 'jackyzha0/quartz' }} # Comment this out if you want to publish your own images on a fork!
- runs-on: ubuntu-latest
- steps:
- - name: Set lowercase repository owner environment variable
- run: |
- echo "OWNER_LOWERCASE=${OWNER,,}" >> ${GITHUB_ENV}
- env:
- OWNER: "${{ github.repository_owner }}"
- - uses: actions/checkout@v4
- with:
- fetch-depth: 1
- - name: Inject slug/short variables
- uses: rlespinasse/github-slug-action@v5.0.0
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- with:
- install: true
- driver-opts: |
- image=moby/buildkit:master
- network=host
- - name: Install cosign
- if: github.event_name != 'pull_request'
- uses: sigstore/cosign-installer@v3.7.0
- - name: Login to GitHub Container Registry
- uses: docker/login-action@v3
- if: github.event_name != 'pull_request'
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Extract metadata tags and labels on PRs
- if: github.event_name == 'pull_request'
- id: meta-pr
- uses: docker/metadata-action@v5
- with:
- images: ghcr.io/${{ env.OWNER_LOWERCASE }}/quartz
- tags: |
- type=raw,value=sha-${{ env.GITHUB_SHA_SHORT }}
- labels: |
- org.opencontainers.image.source="https://github.com/${{ github.repository_owner }}/quartz"
- - name: Extract metadata tags and labels for main, release or tag
- if: github.event_name != 'pull_request'
- id: meta
- uses: docker/metadata-action@v5
- with:
- flavor: |
- latest=auto
- images: ghcr.io/${{ env.OWNER_LOWERCASE }}/quartz
- tags: |
- type=semver,pattern={{version}}
- type=semver,pattern={{major}}.{{minor}}
- type=semver,pattern={{major}}.{{minor}}.{{patch}}
- type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
- type=raw,value=sha-${{ env.GITHUB_SHA_SHORT }}
- labels: |
- maintainer=${{ github.repository_owner }}
- org.opencontainers.image.source="https://github.com/${{ github.repository_owner }}/quartz"
-
- - name: Build and push Docker image
- id: build-and-push
- uses: docker/build-push-action@v6
- with:
- push: ${{ github.event_name != 'pull_request' }}
- build-args: |
- GIT_SHA=${{ env.GITHUB_SHA }}
- DOCKER_LABEL=sha-${{ env.GITHUB_SHA_SHORT }}
- tags: ${{ steps.meta.outputs.tags || steps.meta-pr.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels || steps.meta-pr.outputs.labels }}
- cache-from: type=gha
- cache-to: type=gha
diff --git a/content/.gitkeep b/content/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/content/contribution/101.md b/content/contribution/101.md
deleted file mode 100644
index e8a15016..00000000
--- a/content/contribution/101.md
+++ /dev/null
@@ -1,298 +0,0 @@
----
-title: Mardown 101
-description: Le markdown est un outil/language d'une simplicité enfantine ! Pas besoin de vous prendre la tête pour écrire une page.
----
-Le markdown est un outil/language d'une simplicité enfantine ! Pas besoin de vous prendre la tête pour écrire une page.
-
-> [!NOTE] Flemme d'écrire en Markdown ?
->
-> Vous pouvez toujours prendre votre texte, le mettre dans un fichier `.txt` et le renommer en `.md` - il fonctionnera sans problème (mais sans mise en forme)
-
-# Introduction
-
-Cette fiche va vous montrer comment mette en forme du contenu dans un fichier markdown (.md). Nous vous conseillons d'utiliser [Obsidian](https://obsidian.md/) pour avoir une prise en main plus facile - mais n'importe quel éditeur de texte est compatible.
-
-Chaque demo sur cette fiche est composé en deux parties : le rendu et le code. Le rendu vous montre comment cela rend sur le site et le bloc de code vous montre comment l'implémenter. Exemple :
-
-1. Voici une liste ordonné
- 1. Avec un premier élément
- 2. Un deuxième
-2. Et un intermédiaire
-
-```md
-1. Voici une liste ordonné
- 1. Avec un premier élément
- 2. Un deuxième
-2. Et un intermédiaire
-```
-
-> [!warning] Les espaces comptes dans les blocs de code !
-> Ici, c'est le fait d'avoir 0, 3, 6 ou x espaces qui séparent les listes des sous-listes.
-
-Tout les fichiers Markdown qui compose fiches.me sont hébergés sur [notre GitHub](https://github.com/DreamCloud-Development/fiches.me). Suivez [[./github.md|ce guide]] pour plus d'informations.
-# Mise en forme Markdown
-> *Mise en forme classique sur tout site Markdown*
-
-## Titres
-Les titres sont les espaces de textes en grand. Il existe 6 niveaux de titres :
-
-# Titre de niveau 1
-## Titre de niveau 2
-### Titre de niveau 3
-#### Titre de niveau 4
-##### Titre de niveau 5
-###### Titre de niveau 6
-
-```md
-# Titre de niveau 1
-## Titre de niveau 2
-### Titre de niveau 3
-#### Titre de niveau 4
-##### Titre de niveau 5
-###### Titre de niveau 6
-```
-
-Les titres de niveau 1 à 3 s'affichent dans l'onglet **Table Des Matières**
-
-## Gras, Italique
-Vous pouvez très simplement mettre en **gras**, en *italique* ou en ***gras et en italique*** en utilisant des `*`. Entourez le texte que vous voulez modifier avec une astérisque le rend Italique et deux le rend gras.
-
-```md
-*Ceci est du texte en Italique*
-**Ceci est du texte en gras**
-***Ceci est du texte en gras et en italique***
-```
-
-## Autre modifications du texte
-
-Il est possible de ~~barrer du texte~~, de le mettre dans `un bloc de code` avec la syntaxe suivante :
-
-```md
-Ceci est `dans un bloc`
-Ceci est ~~barré~~
-```
-## Listes
-Les listes s'écrivent comme dans un texte classique, avec des tirets. Il est aussi possible d'utiliser des nombres `1.`, `2.`, `3.` suivit d'un point.
-
-- Texte 1
-- Texte 2
-- Texte 3
-
-1. Texte 1
-2. Texte 2
-3. Texte 3
-
-```md
-- Texte 1
-- Texte 2
-- Texte 3
-
-1. Texte 1
-2. Texte 2
-3. Texte 3
-```
-
-Vous pouvez aussi ajouter trois espaces pour créer des sous listes (fonctionne aussi avec les nombres)
-
-- Une Liste
- - une sous liste
- - une sous liste
- - Une super sous liste
- - Texte liste
-
-```md
-- Une Liste
- - une sous liste
- - une sous liste
- - Une super sous liste
- - Texte liste
-```
-
-## Liens, Images
-Vous pouvez crée des [liens](#) avec le markdown en utilisant des parenthèse :
-```md
-[Texte du Lien](https://adresse.du.lien)
-```
-En ajoutant un `!` devant votre lien, il sera affiché en tant qu'image
-
-```md
-![Ceci est une image](https://github.com/DreamCloud-Development.png)
-```
-
-![Ceci est une image](https://github.com/DreamCloud-Development.png)
-## Tableaux
-Pour faire un tableau, il faut dessiner un tableau avec des tirets autour de son contenu. Exemple :
-
-| Fonction | -♾️ | 4 | +♾️ |
-| -------- | --- | ---------- | --- |
-| f' | - | 0 | + |
-| f | ↘ | f(0) = -50 | ↗ |
-
-```md
-| Fonction | -♾️ | 4 | +♾️ |
-| -------- | --- | ---------- | --- |
-| f' | - | 0 | + |
-| f | ↘ | f(0) = -50 | ↗ |
-```
-
-> [!question] Les tableaux sont infernaux ?
-> Obisdian vous permet en un clic de créer un tableau. Si vous avez du mal à les mettre en forme (ce qui vu la tête du truc est pas étonnant), pensez à utiliser un éditeur Markdown
-
-## Blocs de code
-Si vous voulez afficher du code sur plus d'une ligne, vous pouvez créer un bloc avec 3 guillemets .
-
-```
-print("Ça marche !")
-# C'est avec ces guillemets => ```
-```
-
-Vous pouvez aussi ajouter le nom d'un langage de programation pour mettre le bloc en couleurs
-
-```python
-print("Ça marche !")
-# C'est avec ces guillemets => ```
-```
-
-# Mise en forme Obsidian
-> *Certaines fonctionnalités de Obsidian fonctionnent sur Fiches.me*
-
-## Admonitions
-Les admonitions sont des blocs d'informations, des alertes affichés en couleur. Tout le contenu du bloc doit être devant un symbole `>` et vous devez ajouter `[!NOM]` devant la première ligne pour définir le type (voir le nom) de votre Admonition.
-
-### Listes des Admonitions
-
-> [!SUCCESS]
-> Aliases: “success”, “check”, “done”
-
-```markdown
-> [!SUCCESS]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!INFO]
-> Useful information that users should know, even when skimming content.
-
-```markdown
-> [!INFO]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!NOTE]
-> Useful information that users should know, even when skimming content.
-
-```markdown
-> [!NOTE]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!Todo]
-> Aliases: “abstract”, “summary”, “tldr”
-
-```markdown
-> [!Todo]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!ABSTRACT]
-> Aliases: “abstract”, “summary”, “tldr”
-
-```markdown
-> [!ABSTRACT]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!TIP]
-> Aliases: “tip”, “hint”, “important”
-
-```markdown
-> [!TIP]
-> Helpful advice for doing things better or more easily.
-```
----
-> [!QUESTION]
-> Aliases: “question”, “help”, “faq”
-
-```markdown
-> [!QUESTION]
-> Useful information that users should know, even when skimming content.
-```
----
-> [!WARNING]
-> Aliases: “warning”, “attention”, “caution”
-
-```markdown
-> [!WARNING]
-> Urgent info that needs immediate user attention to avoid problems.
-```
----
-> [!Failure]
-> Aliases: “failure”, “missing”, “fail”
-
-```markdown
-> [!Failure]
-> Key information users need to know to achieve their goal.
-```
----
-> [!BUG]
-> Key information users need to know to achieve their goal.
-
-```markdown
-> [!BUG]
-> Key information users need to know to achieve their goal.
-```
----
-> [!DANGER]
-> Aliases: “danger”, “error”
-
-```markdown
-> [!DANGER]
-> Advises about risks or negative outcomes of certain actions.
-```
-This one work also with ![ERROR]
-
----
-> [!EXAMPLE]
-> Key information users need to know to achieve their goal.
-
-```markdown
-> [!EXAMPLE]
-> Key information users need to know to achieve their goal.
-```
----
-> [!QUOTE]
-> Aliases: “quote”, “cite”
-
-```markdown
-> [!QUOTE]
-> Advises about risks or negative outcomes of certain actions.
-```
-
-### Changer le titre d'une Admonition
-Vous pouvez modifier le titre d'une Admonition en ajoutant du texte devant le tag `[!nom]` :
-
-> [!QUOTE] Once A Man Said
-> Markdown is the best programation language of the world
-
-```markdown
-> [!QUOTE] Once A Man Said
-> Markdown is the best programation language of the world
-```
-
-## Liens Obsidian
-Obsidian utilise des doubles parenthèses `[[]]` pour faire des [[/index|liens dynamiques]]. Cela ne change que le rendu du Lien sur le site mais fonctionne de la même manière
-
-## Trucs Randoms
-Les ==textes surlignés==
-# Mise en forme Fiches.me
-> *Pour un max de style, nous avons ajouter quelques fonctionalité aux [[#Admonitions|Admonitions]]par exemple.*
-
-## Admonitions Additionnelles
-
-> [!definition]
-> Une définition - de SES ???
-
-```md
-↖ ↑ ↗
-← · →
-↙ ↓ ↘
-```
\ No newline at end of file
diff --git a/content/contribution/aide.md b/content/contribution/aide.md
deleted file mode 100644
index f1463587..00000000
--- a/content/contribution/aide.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Comment Contribuer
----
-
-*Créer ou contribuer à un site web peut faire peur. Mais pour rendre nos fiches les plus accessibles possible, nous avant déjà fait tout le code pour qu'il ne vous reste que les fiches*
-
-# 🎞 Un peu de contexte...
-Blablabla compile automagique
-
-# ✒️ Rédiger une fiche
-Vous pouvez vous référer [[101.md|à ce guide markdown]] pour comprendre comment fonctionne la mise en forme fonctionne sur md. Sachez qu'il est possible de juste prendre un fichier `.txt` et de le renommer en `.md` pour qu'il soit transformé et publié sur le site, nous passerons derrière pour la mise en forme.
-
-# 👾 GitHub
-Nous utilisons GitHub pour héberger notre site. Il vous faut donc passer par github pour proposer/envoyer vos fiches. [[github.md|On a aussi fait un guide pour ça :)]]
diff --git a/content/contribution/github.md b/content/contribution/github.md
deleted file mode 100644
index 95e48dda..00000000
--- a/content/contribution/github.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: GitHub
----
-
-@Zamuel c'est ton moment
diff --git a/content/contribution/index.md b/content/contribution/index.md
deleted file mode 100644
index 1d95d669..00000000
--- a/content/contribution/index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 💖 Nous Aider
----
-
-Vous voudriez nous aider mais vous êtes un peu perdu ? Suivez les guides si dessous pour en apprendre plus sur la façon de fonctionner du suite, un guide sur le **Markdown** que nous utilisons pour mettre en forme les pages du site et un point sur **GitHub** qui gère l'hébergement et la $$compilation$$ du site.
\ No newline at end of file
diff --git a/content/emc/index.md b/content/emc/index.md
deleted file mode 100644
index c85f46f6..00000000
--- a/content/emc/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 🗳️ EMC
----
\ No newline at end of file
diff --git a/content/emc/wip.md b/content/emc/wip.md
deleted file mode 100644
index 1f4d6617..00000000
--- a/content/emc/wip.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: ⚠️ Manque de rédacteur
----
-
-> [!QUESTION] Aucune page rédigé
->
-> Aucune fiche n'a été publié dans cette catégorie/spécialité pour le moment.
->
-> **Vous travaillez cette matière ?** Suivez notre [[/contribution/index.md|Guide de contribution]] pour ajouter vos propres fiches au site et nous aider à continuer d'offrir un moyen simple pour tous de réviser 😊
\ No newline at end of file
diff --git a/content/geo/index.md b/content/geo/index.md
deleted file mode 100644
index 6d2cb175..00000000
--- a/content/geo/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 🗺️ Géographie
----
\ No newline at end of file
diff --git a/content/geo/wip.md b/content/geo/wip.md
deleted file mode 100644
index 1f4d6617..00000000
--- a/content/geo/wip.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: ⚠️ Manque de rédacteur
----
-
-> [!QUESTION] Aucune page rédigé
->
-> Aucune fiche n'a été publié dans cette catégorie/spécialité pour le moment.
->
-> **Vous travaillez cette matière ?** Suivez notre [[/contribution/index.md|Guide de contribution]] pour ajouter vos propres fiches au site et nous aider à continuer d'offrir un moyen simple pour tous de réviser 😊
\ No newline at end of file
diff --git a/content/geopolitique/index.md b/content/geopolitique/index.md
deleted file mode 100644
index 0629e42a..00000000
--- a/content/geopolitique/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 🌆 Géopolitique
----
diff --git a/content/geopolitique/wip.md b/content/geopolitique/wip.md
deleted file mode 100644
index 1f4d6617..00000000
--- a/content/geopolitique/wip.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: ⚠️ Manque de rédacteur
----
-
-> [!QUESTION] Aucune page rédigé
->
-> Aucune fiche n'a été publié dans cette catégorie/spécialité pour le moment.
->
-> **Vous travaillez cette matière ?** Suivez notre [[/contribution/index.md|Guide de contribution]] pour ajouter vos propres fiches au site et nous aider à continuer d'offrir un moyen simple pour tous de réviser 😊
\ No newline at end of file
diff --git a/content/histoire/index.md b/content/histoire/index.md
deleted file mode 100644
index 4211b473..00000000
--- a/content/histoire/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 📜 Histoire
----
diff --git a/content/histoire/totalitaire.md b/content/histoire/totalitaire.md
deleted file mode 100644
index 0a62e080..00000000
--- a/content/histoire/totalitaire.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-title: Les Régimes Totalitaires
----
-> [!EXAMPLE] Fiche écrite par Élodie
-
-# Prologue la crise des années 30 : le krach boursier de 1929
-
-En 1920, après la première guerre mondiale au états unis il y a une prospérité économique (les entreprises embauchent, vendent…)
-En 1926 une crise/faillite économique du monde paysan se répercute sur l'industrie entraînant un ralentissement économique.
-Les gens commencent à investir en bourse. Ce qui entraîne une popularisation des investissements à crédits (= avec de l'argent prêter) Cela entraîne une augmentation de la demande d'action et met en place une bulle spéculative (capitaux basés sur la spéculation)
-Du 24 au 29 octobre 1929, tous le monde vend mais personne n'achète ce qui entraîne un effondrement des cours. Les investisseurs à crédit se retrouvent sous les dettes et perdent tout. Première chute : -17%
-Les banques font faillites et ferment. Le chômage augmente de 25%.
-La crise économique se propage en Europe les banquiers américains rapatrie leur argent prêté, aux Allemands par exemple. les Américains dévaluent leur monnaie sur l’export et taxent les import Roosevelt met en place le New Deal pour relancer la croissance et donner du travail au chômeur.
-
-# Introduction :
-
-Les régimes totalitaires se sont développés en Europe durant l’entre deux guerre. Seul celui d'URSS a survécu à 1945, bien qu’il soit idéologiquement différent, leur trait de fonctionnement on contribuer à la création du concept de totalitarisme.
-> **Totalitarisme** : régime politique de nature dictatoriale, au sein duquel l’État, au mains d’un homme, parti, idéologie, exerce un pouvoir total sans limite ni partage.
-
-# I mise en place et fondement idéologique :
-
-## A-) des régimes né de la guerre et de la crise
-
-### 1. la Russie un coup d’état
-
-Après la première guerre mondiale, la Russie est désunis, le 24 octobre 1917 révolution bolchevique, ils prennent le pouvoir et mette à sa tête Lénine ce qui entraîne une guerre civile de 1917 à 1922 opposant les russes blancs (anti communiste) à l’armée rouge (communiste). Ce sont les bolchevicks qui l’emporte. En 1922, Il y a une constitution qui entraîne la création de l’union république socialiste soviétique autrement appelé URSS.
-
-### 2. L’Italie, un coup de force
-
-Au début de la Première Guerre mondiale, l’Italie reste neutre. En 1915, l’Italie rentre finalement en guerre aux côtés de la triple entente pour récupérer leur terre. Au final ils gagnent mais ne récupère pas leur terres pour autant l’Italie se retrouve en situation difficile suite à la guerre. ils ont dépensé pour rien. En 1919 un groupe Parramilitaire appelait les faisceaux italien de combat voit le jour ils sont dirigés entre autres par Mussolini, ce dernier qui convoite le pouvoir pose un ultimatum au pouvoir établi, soit il est nommé premier ministre, soit ses troupes marchent sur Rome le 30 octobre 1922, Mussolini est nommé Premier ministre et 20 000 fascistes marche vers Rome.
-
-### 3. L’Allemagne, une arrivée démocratique au pouvoir
-
-En Allemagne durant l’année 1919. Il y a un grand chaos politique, la révolution Spartakiste laisse place à la république Weimar SPD. De plus, le pays subit le traité de Versailles, Hitler, caporal deçu de l’issue de la guerre rejoins le DAP (partie des travailleurs allemand) et en change le nom (NSDAP) En 1923, l’économie allemande n’a toujours pas remonté et le pays subi une hyper inflation, le 9 novembre 1923, Hitler organise le putsch de la brasserie mais l’armée ne suit pas. Il est condamné à cinq ans de prison. Il n’en fait qu’un il y écrit mein kampf. En 1928, le NSDAP fait 2,8 % aux élections en 1932, c’est 32 % de législative et 57 au présidentiel. Le 30 janvier 1933, Hitler est nommé chancelier
-
-## B-) La mise en place des régimes totalitaires
-
-### 1. Italie
-
-Mussolini met en place une coalition un gouvernement avec peu de fascistes. En 1924 il y a l'affaire Matteotti, Mussolini truc les législatives il est dénoncé par Matteotti un député socialiste qui est retrouve mort deux jours plus tard. Cette affaire ébranle Mussolini mais il se reprend. En 1926, il fait passer les lois fascistes qui supprime les libertés telles que l’expression les manifestations, les parties etc. Il instaure également l'OVRA, organe vigilance répression de l’anti fascisme, on sait pas qui on fait partie. C’est une police secrète.
-
-### 2. URSS
-
-A la fin des années 1920, le pays est divisé par la guerre civile en 1921 Lénine met en place la NEP, une période de transition "retour a un capitalisme limité pour un temps limité". Il nationalise une partie de l’économie : banque, ferroviaire, etc. En 1922, il fait un AVC ce qui l'affaibli. Staline en profite pour se construire une place au sein du parti en devenant le secrétaire général de celui-ci. En janvier 1924, Lénine décède et Staline forme un nouveau gouvernement collégial avec Zinoviev et Kamenev. Il pousse Trotski à l'exil puis se sépare de ses deux alliés (Z et K) en 1928, il devient l’homme fort de la vie politique en URSS.
-
-### 3. Allemagne
-
-Le 27 février 1933, incendie du Reichstag, présenté comme une action communiste dans le but de les décrédibiliser, cela mène à l’interdiction du parti. le 23 mars 1923, Hitler se fait voter les pleins pouvoirs, il supprime les libertés publiques. En 1933, il ouvre le camp Dachau, où sont envoyés les opposants politiques, et exclu les juifs de la fonction publique. En août 1934, Hidenburg, le président actuel meurt. Du 29 au 30 juin 1934, "la nuit des longs couteaux" c'est l'élimination de 85, SA et l'assassinat de Rohm, le chef des SA, le 1er août.( les SA, sont le côté gauche du parti qui défendait les idées socialistes.) Hitler a donc plus de rivaux.
-
-## C-) Des bases idéologies différentes
-
-### 1. Italie
-
-le fascisme veut restaurer la grandeur qu’avait l’Italie au temps de l’empire romain, faire un second risorgimiento (unification italienne). Il rejette la démocratie car plusieurs parties divisent. Le dulce (=conduire) = Mussolini. Il revendique un état totalitaire. C’est d’ailleurs d’Italie que vient le totalitarisme. Au départ, ils n’ont pas d'idées raciste.
-
-### 2. Allemagne
-
-Le parti nazi veut rendre une puissance perdue à l’Allemagne. = Pangermanisme, c’est-à-dire qu’ils veulent réunir toute la nation allemande sur le droit chemin et rassembler tous les peuples d’origine germanique, d’où la devise Ein Volk (un peuple) Ein Reich (un empire) Ein Fuhrer (un chef). Le racisme nazi se base sur la croyance que l’humanité est divisé en races supérieures (nordique arienne germanique) et inférieures (russe, bulgare, juif, etc.) ils veulent purifier l’Allemagne des étrangers, particulièrement les juifs qui serait responsable du malheur allemand. Ils veulent régner sur le monde. En 1905, les lois Nuremberg boycotte les magasins juif qui sont marqués et interdisent les relations sexuelles et certains métiers aux juifs tels que le scolaire, la presse, etc. Ils veulent établir le Lebensrawn l’espace vital. Ce qui implique par exemple de conquérir la Pologne, ils ne veulent pas exterminer les juifs avant 1941
-
-### 3. URSS
-
-Le principe est fondée sur l’idéologie de Marx dans son livre Das Kapital. Dans toutes les époques, il y a un rapport dominant dominé il faut donc créer un mouvement (le communisme) prendre le pouvoir instaurer une dictature en brisant les contre-révolutionnaires et détruire le capitalisme en faisant disparaître les inégalités de classe sociale en collectivisant sous l’état. En 1928, Staline, créer les kolkhozes soit les terres collectives qu'il rendra obligatoire un an plus tard. Il met en place un plan quinquennal avec des quotas qu’on appelle Gosplan, une résistance se fait dans les campagnes, les koulaks, c’est-à-dire, les paysans, les plus aisés sont accusés d’un être investigateur, ils sont arrêtés et déportés au goulag, c’est-à-dire un camp de concentration dans le froid sibérien. Sur 4,5 millions de condamné, 4 millions meurent. En 1932-33 il y a une grosse famine en Ukraine (=Holodomor) car on leur prends toutes leurs récoltes. Ce sont des activités de types génocidaires.
-
-# II : Forme et caractéristiques des régimes totalitaire
-
-## A-) Le pouvoir est exercé de manière dictatorial
-
-### 1. Régime parti unique
-
-Le parti devient une instance suprême voir un culte en URSS
-
-### 2. Régime antidémocratique
-
-L’Italie et l’Allemagne se revendique en tant que tel. Ce sont des anti communistes car Marx est issu d’une famille juive reconverti et le communisme à vocation à s'exporter. L’URSS est convaincu qu’elle donne le pouvoir au peuple. Pour elle, le nazisme et le fascisme sont pareils et mauvais
-
-### 3. Toujours de la presse.
-
-Il reste les journaux des parties dans chacun des pays. Volkisher Beobachter en Allemagne Pravda en URSS Il popolo d'Italia en Italie. De plus l’URSS ferment les églises alors que l’Italie et l’Allemagne non
-
-### 4. Culte de la personnalité
-
-Tableau poème statu à l’honneur des dirigeants
-
-## B-) L’encadrement de la société
-
-### 1. Italie
-
-Quatre ans, (les fils et filles de la Louvre) entre 8 et 16 ans (Balillas) À partir de 16 ans, les jeunesses fasciste. on y voute un culte de la violence de la rapidité chez les garçons alors qu’on apprend au fille cuisine etc.
-
-### 2. Allemagne
-
-la jeunesse hitlériennes et les uniforme pour tous même volonté de faire des soldats; Genrés
-
-### 3. URSS
-
-Jeunesse communiste on leur apprend l'idéologie dès le début, pas d’apprentissage militaire car le communisme s’exporte par l’idée pas par les armes ils instruisent tout le monde (population agricole, fille etc) Il n’y a plus de différence vie public et vie privée. L’individu cesse d’exister, certains mouvements d’opposition telles que la rose blanche apparaissent mais ils sont vite arrêté.
-
-## C-) La terreur comme moyen de gouvernement et de soumission
-
-En Italie il n’y a pas de camp soit on est envoyé dans un petit village assigné à domicile, soit envoyé au bagne sur les îles Lipari.
-
-en URSS en 1936-38 ont eu lieu les procès de Moscou afin d’ épurer le parti 7500 exécution dont Kamenev. Les camps de concentration sont un lieu de mort lentes. 15 millions de personnes sont mortes sous Staline. Le NKVD est chargé d’arrêter les opposants.
-
-en Allemagne un pogrom a lieu (massacres et pillage des juifs) du 9 au 10 novembre 1938, La nuit du cristal, 200 synagogues et 700 commerces saccagés entre 2000 et 3000 morts et plus de 30 000 déportées. En 33, les camps de concentration accueille, opposant, homosexuel, juif, etc. entre 33 et 39 il y a eu 1 million de Déportés
-
-# III: Les démocraties européennes à l’épreuve des régimes totalitaires
-
-## A-) Première remise en question de l’ordre européen
-
-Pour l’Italie et l’Allemagne, la guerre est un moyen de revivifier la nation pour Hitler la guerre et à l’origine de l’âme nordique elle est souhaitable on y voue un culte ce qui explique le coté militaire du régime de Hitler et le fait que lui, tout comme Mussolini parade en militaire. Tous deux ont des ambitions territoriales. Ils savent que la guerre peut être un moyen de s’étendre.
-
-Pour l'URSS la guerre est juste la pour ce défendre car selon l'idéologie de Marx,, la guerre est une chose capitaliste (les riches envoient les pauvres à la guerre. De plus ils n'ont aucune nécessité à faire la guerre. Cependant l'URSS est consciente que le nazisme représente un danger car l'Ukraine se trouve à côté de la Pologne. L'URSS a d'ailleurs failli conclure une alliance avec la rance mais comme celle ci n'était pas confiante ca ne s'est pas fait.
-
-## B-) les régimes totalitaires et l'idée de la sécurité collectives.
-
-En 1933, L'Allemagne et le Japon ont quitté le SDN et en 35 l'Italie en est exclu car elle attaque l'Éthiopie qui en est également membre elle annexe d'ailleurs l'Éthiopie en 36. Une alliance émerge entre l'Allemagne et l'Italie car l'Allemagne fournit les produits que l'Italie ne peut plus avoir a cause de son bannissement. En 35 l'Allemagne se réarme se qui constitue un affront. En mars 36, suite a la non réaction au réarmement allemand Hitler remilitarise la Rhénanie (en l'envahissant avec une armée) En France c'est la période électorale et l'Angleterre et la France sont tous deux pacifiste a cause de la 1ere GM. Ils ne réagissent pas. En novembre l'Italie et l'Allemagne concluent l'Axe Rome-Berlin et le Japon l'Italie et l'Allemagne signe le pacte anti-communiste. Le Japon est un Etat expansionniste ayant battus la Chine. Il y a une accumulation de danger. En 36, le frente popular remporte les élections en Espagne ce qui mène a une guerre civile ce qui sert de lieu d'entraînement a l'Italie et l'Allemagne. Franco prend la tête du pouvoir et met en place un régime indépendant.
-
-## C-) La marche à la guerre (38-39)
-
-En mars, l'Allemagne envahit l'Autriche (Anschluss) dans son idée de pangermanisme. Il essaie d'envahir les sudètes (partie tchèque de la tchèquoslovaquie) pour que la situation ne dégénère pas Mussolini organise la conférence de Munich le 29-30 septembre avec l'Italie, L'Angleterre, la France et l'Allemagne). Les tchèques n' sont pas. La France et l'Angleterre lâche les sudètes et celle ci sont envahit le 1er octobre. En mars 39 Hitler envahit la totalité de la partie tchèque. (début de l'espace vitale). En avril, Mussolini annexe l'Albanie. Les tension se multiplient. En mai, L'Italie et l'Allemagne signe le pacte d'acier qui les engage a se défendre l'un l'autre. L'Allemagne demande a la Pologne un corridor pour rejoindre les deux bouts de la Prusse cependant ils refusent. Le 23-24 aout l'Allemagne et l'URSS signe un pacte de non agression et le 1er septembre l'Allemagne envahit la Pologne.
diff --git a/content/histoire/wip.md b/content/histoire/wip.md
deleted file mode 100644
index 0f66839e..00000000
--- a/content/histoire/wip.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: WIP
-description:
-draft: true
----
-
-# 🤐 Les régimes totalitaires
-# Introduction
-Prospérité après la guerre aux US. Crise paysane en 26 + bulle spéculative = crack boursier de octobre 29. Argent retiré d'Europe, dévaluation du dollar et "*New Deal*" de Roosevelt
-# 1️⃣ Mise en place en fondements idéologiques
-## 🅰️ Des régimes nées de la guerre et des crises
-### La Russie, un coup d’état
-Russie désunis entre un peuple rural et une oligarchie (Tsar). Guerre civile Blanc VS Rouge gagnée par Lénine. Constitution de l'URSS créé en 1922.
-### L’Italie, un coup de force
-Italie déchue après une guerre faussement gagné. Insurrections révolutionnaires (contrôle des champs/usines) -> arrivé des Faisaux Italiens de combats pour les déloger (1919). *20 : partit politique*. 30/10/22 : Coup d'état (ultimatum) donc nommé premier ministre.
-### L’Allemagne, une arrivée démocratique au pouvoir
-Subit le traité de Versailles comme un Diktat. DAP -> NSDAP. 23, économie allemande toujours en bas. 9/11/23 PUTSCH de la brasserie -> cinq ans de prisons mais 1 réellement fait. Montée démocratique du NSDAP et Hitler est nommé chancelier le 30/01/1933
-## 🅱️ La mise en place des régimes totalitaires
-### Allemagne
-27 Février 33 : Incendie du Reichstag > plus de communistes
-23 Mars : plein pouvoirs
-### Italie
-24 : Affaire Mateotti
-26 : Lois Fascistes
-### URSS
-Janvier 24 : Mort de Lénine
-28 : Staline homme fort
-## 🅾️ Des bases idéologiques différentes
-### Allemagne
-### Italie
-Revanche nationaliste
-### URSS
-Idéologie communiste
-# 2️⃣ Formes et caractéristiques des régimes totalitaires
-## 🅰️ Un pouvoir exercé d'une manière dictatoriale
-### Régime parti unique
-### Régime antidémocratique
-### Toujours de la presse mais contrôlé/presse d'état.
-### Culte de la personnalité
-## 🅱️ L'encadrement de la société
-### Loisirs gérés par l'état
-## 🅾️ La terreur comme mode de gouvernement et de soumission
-### Auto Surveillance
-# 3️⃣ Les démocraties européennes à l'épreuve des régimes totalitaires
-## 🅰️ Première remise en question de l'ordre européen
-### Italie et Allemagne
-La guerre est un moyent de revivifier la nation + origine dans l'âme nordique que recherche Hitler
-### URSS
-Guerre considéré comme capitaliste et uniquement utilisé pour défense ; la vrais guerre est idéologique, psychologique et non physique
-## 🅱️ L'échec de la sécurité collective
-La SDN ets en échec total ; aucune récidive est faites du au contexte d'élections politique et la volonté desr et en d'arrêter la guerre. Remillitarisation, invasion de la Rhénanie puis des sudettes le 1er octobre 38
-## 🅾️ La marche à la guerre
-Invasions des sudettes puis de la Pologne par l'Allemagne
-
-# 📆 Dates
-> Note : Russie, Italie et Allemagne.
-
-- 24 Octobre 1917 : Révolution Bolchévique
-- 1922 Constitution Russe => Création de l'URSS
-- 1919 : Apparition des Faisceaux Italiens de Combat
-- 30 Octobre 1922 : Mussolini Premier Ministre
-- 9 Novembre 1923 : PUTSCH de la brasserie
-- 1928 : 2,8% NSDAP aux éléctions
-- 1932 : 32% NSDAP aux éléctions
-- 30 Janvier 1933 : Hitler Chancelier
-- 1924 Affaire Matteotti
-- 1926 : Lois Fascistissimes
-- 1921 : Mise en place de la NEP
-- 1922 : Affaiblisseent de Lenine (AVC)
-- Janvier 1924 : Mort de Lenine
-- 1928 : Staline seul au pouvoir
-- 27 Février 1933 : Incendie du Reichstag
-- 23 Mars 1933 : Hitler obtient les pleins pouvoirs
-- 1933 : Camp de Dachau
-- 1934 : Mort d'Hidenburg
-- 29-30 Juin 1934 : Nuits des longs couteaux
-- 1935 : Lois Nuremberg
-- 1928 : Apparition des Kolkhoze
-- 1929 : Obligation des Kolkhoze et Sovkhoze
-- 1932-1933 : Holodomor
-- 1936-1938 : Procès de Moscou
-- 9-10 Novembre 1938 : Nuit de crystal
-
-
-
diff --git a/content/index.md b/content/index.md
deleted file mode 100644
index 1758f71d..00000000
--- a/content/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: 📑 Kernafiches
-enableToc: false
----
-
-### Bienvenue sur notre site de fiches de révision !
-
-Nous, c'est **Samuel**, **Noah** et **Guilhem** , trois potes de terminale qui avons créé ce site pour rendre les révisions un peu plus simples et moins chiantes. On sait tous à quel point c’est galère de s’organiser, alors on a décidé de regrouper nos fiches et de vous les partager.
-
-Ce que vous allez trouver ici :
-- Des fiches de révision ultra claires pour chaque matière.
-- Des résumés bien foutus avec les points clés, des exemples, et même quelques exercices.
-- Des conseils pour t’aider à t’organiser et à ne pas te laisser submerger par la tonne de trucs à réviser.
-
-
-Bref, on espère que ça vous sera utile et que ça vous filera un coup de main pour cartonner aux exams !
-
-### Bonne révision à tous et courage pour la suite !
diff --git a/content/maths-exp/complexes.md b/content/maths-exp/complexes.md
deleted file mode 100644
index 71ae2f43..00000000
--- a/content/maths-exp/complexes.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Les nombres complexes
----
-
-> [!BUG] Fiche écrite par Samuel
-
-# Pourquoi a t'on inventé les nombres complexes ?
-
-
-
-# Définition
-
-Un nombre complexe $$z$$ se présente sous la forme $$z=a+i b$$ où $$a \space et \space b$$ sont réels et $$i$$ est tel que $$i^2=-1$$.
-
-a est la partie réelle tandis que b est la partie imaginaire de $$z$$![[axe_des_complexes.png]]
-
-Le point M est représenté par le nombre complexe $$z=a+i b$$ dans le plan complexe.
-
-On parle d'affixe dans le plan complexe et de coordonnées dans le plan réel. ($$z$$ est l'affixe du point M)
-
-# Conjugué d'un nombre complexe
-
-Soit un nombre complexe $$z=a+i b$$
-
-On appelle nombre complexe conjugué de $$z$$ le nombre $$\bar z = a - ib$$
-## Illustration graphique :
-
-![[complexe_conjugué.png]]
-
-Le point $$M'$$d'affixe $$\bar z$$ est le symétrique du point $$M$$ d'affixe $$z$$ par rapport à l'axe des abscisses v
-
-![[RB-05_09_2024(1).jpg]]![[RB-05_09_2024(3).jpg]]![[RB-08_09_2024.jpg]]![[Mathématiques/photos-mathsexpertes/RB-14_09_2024.jpg]]![[Mathématiques/photos-mathsexpertes/RB-14_09_2024 (1).jpg]]![[Mathématiques/photos-mathsexpertes/RB-14_09_2024 (2).jpg]]
\ No newline at end of file
diff --git a/content/maths-exp/index.md b/content/maths-exp/index.md
deleted file mode 100644
index e8925f8c..00000000
--- a/content/maths-exp/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 🔣 Maths Expertes
----
\ No newline at end of file
diff --git a/content/maths/index.md b/content/maths/index.md
deleted file mode 100644
index fcdfbc24..00000000
--- a/content/maths/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 🔢 Mathématiques
----
\ No newline at end of file
diff --git a/content/maths/suites/1arithmetique.md b/content/maths/suites/1arithmetique.md
deleted file mode 100644
index 6bacb6f0..00000000
--- a/content/maths/suites/1arithmetique.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: 1️⃣ Les Suites Arithmétiques
----
-
-# Définition
-
-$$
-u_{n+1}=u_n+r
-$$
-$$
-u_0 \underset{+r}{\longrightarrow} u_1 \underset{+r}{\longrightarrow} u_2 \underset{+r}{\longrightarrow} \cdots \underset{+r}{\longrightarrow} u_{n-1}\underset{+r}{\longrightarrow} u_n \underset{+r}{\longrightarrow} u_{n+1}
-$$
-r = raison = nombre constant qu'on additionne à chaque termes de la suite arithmétiques
-
-# Calculer Un
-
-**Option 1 :**
-$$
-u_n=u_0+nr
-$$
-**Option 2 (générale) :**
-
-- p = précédent
-- Up = terme précédant
-$$
-u_n=u_p+(n-p)r
-$$
-
-# Démontrer qu'une suite est arithmétiques
-
-Il faut montrer que $$u_{n + 1} - u_n$$ = constante
-
-
-# Somme de termes consécutifs
-$$
-\text{Somme}=\text{(nombre de termes)}\times \dfrac{\text{1er terme + dernier terme}}{2}
-$$
-
-[[2geometrique|➡️ Les suites géométriques]]
diff --git a/content/maths/suites/2geometrique.md b/content/maths/suites/2geometrique.md
deleted file mode 100644
index 9b0f4dbe..00000000
--- a/content/maths/suites/2geometrique.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: 2️⃣ Les Suites Géométriques
----
-
-## Définition
-
-$$
-V_{n+1}=q\times V_n
-$$
-$$
-V_0 \underset{\times q}{\longrightarrow} V_1 \underset{\times q}{\longrightarrow} V_2 \underset{\times q}{\longrightarrow} \cdots \underset{\times q}{\longrightarrow} V_{n-1}\underset{\times q}{\longrightarrow} V_n \underset{\times q}{\longrightarrow} V_{n+1}
-$$
-q = raison = nombre constant qu'on multiplie à chaque termes de la suite géométrique
-
-## Calculer Vn
-
-**Option 1 :**
-$$
-V_n=V_0\times q^n
-$$
-**Option 2 (générale) :**
-
-- p = précédent
-- Vp = terme précédant
-$$
-V_n=V_p\times q^{n-p}
-$$
-
-## Démontrer qu'une suite est géométrique
-
-Il faut montrer que $$\dfrac {V_{n + 1}} {V_n}$$ = constante
-
-## Somme de termes consécutifs
-$$
-\text{Somme}=\text{(1er terme)} \times \dfrac{1-q^{\text{nombre de termes}}}{1-q}
-$$
-
-[[3variation|➡️ Variations de Suites]]
\ No newline at end of file
diff --git a/content/maths/suites/3variation.md b/content/maths/suites/3variation.md
deleted file mode 100644
index 13d35b2c..00000000
--- a/content/maths/suites/3variation.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: 3️⃣ Étudier les variations d'une suite
----
-## 1. Méthode de la différence
-
-On s'intéresse au signe de $$u_{n+1}−u_n$$ :
-
-- Si $$u_{n+1}−u_n > 0$$ la suite est strictement croissante
-
-
-- Si $$u_{n+1} - u_n < 0$$ la suite est strictement décroissante
-
-## 2. Méthode du quotient
-
-on compare $$\dfrac{u_{n+1}}{u_n}$$ à 1 :
-
-- Si $$\dfrac{u_{n+1}}{u_n} > 1$$ la suite est strictement croissante
-
-- Si $$\dfrac{u_{n+1}}{u_n} < 1$$ la suite est strictement décroissante
-
-
->[!attention]
-> pour cette méthode, il faut vérifier que pour tout n, $$u_n>0$$
-
-## 3. Méthode de la fonction
-
-On étudie le sens de variation de la fonction f tel que $$f(n) = u_n$$
-
->[!attention]
-> pour cette méthode, il faut que la suite $$u_n$$ soit définie de manière explicite : chaque terme doit être exprimé directement en fonction de son rang pour pouvoir transformer la suite en fonction. Ex : $$u_n = 3 + 2n$$
diff --git a/content/maths/suites/4recurrence.md b/content/maths/suites/4recurrence.md
deleted file mode 100644
index 11baa817..00000000
--- a/content/maths/suites/4recurrence.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: 4️⃣ Raisonnement par Récurrence
----
-
-Considérons une chaîne de dominos, faire tomber un domino entraîne son plus proche voisin dans sa chute et ainsi de suite.
-
-Il y a deux conditions pour prouver que l'ensemble des dominos vont tomber.
-
-Il faut prouver dans un premier temps, que **le premier domino soit pousser** et dans un second temps, il faut être certain que **la chute de n'importe quel domino entraîne le suivant**.
-
-C'est le raisonnement par récurrence.
-
-![[recurrence-dominos.png | 450]]
-## Comment démontrer qu'une propriété est vraie ?
-
-Pn désigne une propriété qui dépend d'un entier naturel n
-
-### 1) Initialisation
-Il faut vérifier que la propriété est vraie dès le départ. (par exemple à $$P_0$$)
-
-### 2) Hérédité
-On considère qu'a un certain rend $$n$$, $$P_n$$ soit vraie (c'est l'hypothèse de récurrence). Il faut démontrer que $$P_n+1$$ est vraie sachant que $$P_n$$ est vraie.
-
-Il faut alors partir de la propriété au rang $$n$$ pour essayer de retrouver la propriété au rang $$n+1$$
-
-## Exemple :
-[[5bernoulli|➡️ Inégalité de Bernoulli]]
-
diff --git a/content/maths/suites/5bernoulli.md b/content/maths/suites/5bernoulli.md
deleted file mode 100644
index 5868dba4..00000000
--- a/content/maths/suites/5bernoulli.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: 5️⃣ Inégalité de Bernoulli
----
-
-Pour tout réel a > 0, pour tout entier naturel n
-
-On a : $$\boldsymbol{(1+a)^n \geq 1 +na}$$
-
-## Démonstration
-
-[[4) Raisonnement par récurrence|Lien pour comprendre comment fonctionne un raisonnement par récurrence]]
-
-
-### Initialisation
-On vérifie si la propriété est vraie au premier rang, ici pour n = 0
-
-
-$$ (1+a)^0 = 1\space et \space 1 + 0 \times a = 1 $$
-
-
-$$Or \space 1 \geq 1 \space donc \space (1+a)^0 \geq 1 + 0 \times a$$
-
-La propriété est donc initialisée.
-
-### Hérédité
-
-
Hypothèse de récurrence :
-On suppose que la propriété est vraie au rang n.
-
-Cela signifie donc que
-
-$$\textcolor{red}{(1+a)^n}\geq \textcolor{red}{1 + na}$$
-
-On veut démontrer que la propriété est vraie au rang n+1
-
-$$\textcolor{green}{(1 + a)^{n + 1} \geq 1 + (n + 1)a}$$
-
-
-On descend d'un rang pour pouvoir utiliser l'hypothèse de récurrence
-
-$$(1 + a)^{n+1} = (1+a)^n(1+a)^1$$
-
-On ajoute (1 + a) à l'hypothèse de récurrence pour retrouver la propriété au rang n+1
-
-$$ \textcolor{red}{(1+a)^n}(1+a) \geq \textcolor{red}{(1 + na)}(1 + a)$$
-
-On développe
-
-$$ (1 + a)^{n+1} \geq 1 + a + na + na²$$
-
-On factorise
-
-$$ (1 + a)^{n+1} \geq 1 + (n + 1)a + na²$$
-
-Comme $$ na²$$ est un nombre positif (n est un entier naturel donc positif & a² positif), on peux le faire disparaître de l'inégalité. On a donc retrouvé la propriété au rang n+1
-
-$$\textcolor{green}{ (1 + a)^{n+1} \geq 1 + (n + 1)a}$$
-
-### Conclusion
-
-La propriété est vraie pour n = 0 et elle est héréditaire à partir de ce rang, elle est donc vraie pour tout entier naturel n.
diff --git a/content/maths/suites/6convergente.md b/content/maths/suites/6convergente.md
deleted file mode 100644
index 7908afe5..00000000
--- a/content/maths/suites/6convergente.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: 6️⃣ Suites Convergentes
----
-
-## Définition
-
-On dit que la suite $$u_n$$ admet pour limite L si tout intervalle ouvert contenant L contient tous les termes de la suite à partir d'un certain rang
-
-on note $$\lim \limits _{n \to + \infty} u_n = L$$
-
-Une telle suite est dite convergente : elle admet une limite finie.
-
->[!remarque]
->Une suite qui n'est pas convergente est dite **divergente** (suite qui n'admet pas de limite finie)
->
-> Ex: [[7divergente|➡️ Les suites divergentes en l'infini]]
-
-
-![[suite_convergente.png]]
-
-## Théorème de la limite monotone
-
-- Si une suite croissante est majorée alors elle est convergente.
-- Si une suite décroissante est minorée alors elle est convergente.
-
-## Exemple : démontrer qu'une suite est convergente
-
-Soit $$u_0 = 0$$ et $$u_{n+1} = \sqrt{3u_n + 4}$$
-### **1) Démontrer que** $$u_n$$est majorée par 4.
-
-Nous allons démontrer par un raisonnement par récurrence que $$u_n$$est majorée par 4.
-
-**Étape 1 : Initialisation.**
-
-On vérifie que la propriété est vraie au premier rang, ici $$u_0$$.
-
-$$u_0 \leq 4$$
-
-La propriété est donc initialisée.
-
-**Étape 2 : Hérédité.**
-
-On pose l'hypothèse que $$u_n \leq 4 $$
-
-On part de cette inégalité pour retrouver $$u_{n+1}$$
-
-$$\leftrightarrow 3u_n \leq 12 $$
-
-$$\leftrightarrow 3u_n +4 \leq 16 $$
-
-$$\leftrightarrow \sqrt {3u_n +4} \leq 4$$
-
-$$ \leftrightarrow u_{n+1} \leq 4$$
-
-
-Par récurrence nous venons donc de démontrer que la suite est majorée par 4.
-
-### 2) Démontrer que $$u_n$$ est croissante.
-
-Nous allons démontrer par un raisonnement par récurrence que $$u_n$$ est croissante.
-
-**Étape 1 : Initialisation.**
-
-On calcule $$u_0 \space et \space u_1$$ pour vérifier que la suite est croissante aux premiers rangs.
-
-$$u_0 = 0$$
-
-
-$$u_1 = 2$$
-
-
-$$u_0 \leq u_1$$
-
-
-La propriété est donc initialisée.
-
-**Étape 2 : Hérédité.**
-
-On pose l'hypothèse qu'à un rang $$n$$ la suite est croissante
-
-$$u_n \leq u_{n+1}$$
-
-On part de cette inégalité pour retrouver $$u_{n+1} \leq u_{n+2}$$
-
-
-$$\leftrightarrow 3u_n \leq 3u_{n+1}$$
-
-
-$$\leftrightarrow \sqrt {3u_n +4} \leq \sqrt {3u_{n+1} +4} $$
-
-$$ \leftrightarrow u_{n+1} \leq u_{n+2}$$
-
-Nous avons donc démontré par récurrence que la suite $$u_n$$ est croissante
-
-### 3) Conclusion
-La suite $$u_n$$ converge donc car elle est croissante et majorée
diff --git a/content/maths/suites/7divergente.md b/content/maths/suites/7divergente.md
deleted file mode 100644
index 5945fbc4..00000000
--- a/content/maths/suites/7divergente.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: 7️⃣ Suites Divergentes
----
-
-[[6convergente#Définition|Lien pour comprendre les termes convergent et divergent pour les suites]]
-
-## Définition d'une suite divergente en +l'infini
-
-Une suite tend vers $$+∞$$ lorsque tout intervalle de la forme $$[A; +∞[$$ (avec A > 0) contient tous les termes $$u_n$$ à partir d'un certain rang.
-
-Autrement dit pour tout $$A>0$$ il existe un rang $$n_0$$ tel que pour tout $$n \geq n_0, u_n \geq A$$
-
-On note : $$\lim \limits _{n \to + \infty} u_n = + \infty$$
-
-![[suite_A_n0.png|350]]
-## Démontrer que la limite de Un = +l'infini
-
-Soit $$n \in \mathbb{N} \space et \space A > 0 $$ on pose $$u_n = 4n² $$
-
-On cherche à démontrer qu'il existe un rang $$n_0$$ à partir duquel $$u_n \geq A$$
-
-$$u_n \geq A <=> 4n² \geq A <=> n² \geq \dfrac A 4 <=> n \geq \dfrac {\sqrt{A}}{2}$$
-
-Cependant $$\dfrac {\sqrt{A}}{2}$$n'est généralement pas un entier naturel, on ne peut donc pas dire que $$n_0 = \dfrac {\sqrt{A}}{2}$$
-
-On note alors $$n_0 = \lfloor \dfrac {\sqrt{A}}{2} \rfloor + 1$$
-
-> [!info]
-> $$\lfloor \dfrac {\sqrt{A}}{2} \rfloor $$ est la partie entière de $$\dfrac {\sqrt{A}}{2}$$. On rajoute + 1 car si $$\dfrac {\sqrt{A}}{2}$$ vallait par exemple 3,8, et bien sa partie entière serait 3, il manquerait donc 0,8
-
-
-Dans ce cas, si $$ n \geq n_0$$ on a $$u_n \geq A$$
-
-Ainsi $$\lim \limits _{n \to + \infty} u_n = + \infty$$
-## Définition d'une suite divergente en -l'infini
-
-Une suite tend vers $$-∞$$ lorsque tout intervalle de la forme $$]-\infty; B [$$ (avec B < 0) contient tous les termes $$u_n$$ à partir d'un certain rang.
-
-Autrement dit pour tout $$B < 0$$ il existe un rang $$n_0$$ tel que pour tout $$n \geq n_0, u_n \leq B$$
-
-On note : $$\lim \limits _{n \to + \infty} u_n = - \infty$$
->[!remarque]
-> $$u_n$$ tend vers $$-\infty$$ si et seulement si $$(-u_n)$$ tend vers $$+ \infty $$.
-
-## Démontrer que la limite de Un = -l’infini
-
-Soit $$n \in \mathbb{N} \space et \space B < 0 $$ on pose $$u_n = -n² $$
-
-On cherche à démontrer qu'il existe un rang $$n_0$$ à partir duquel $$u_n \leq B$$
-
-$$u_n \leq B <=> -n² \leq B <=> n² \geq -B <=> n \geq \sqrt{-B}$$
-
-Cependant $$\sqrt{-B}$$ n'est généralement pas un entier naturel, on ne peut donc pas dire que $$n_0 = \sqrt{-B}$$
-On note alors $$n_0 = \lfloor \sqrt{-B}\rfloor$$
-
-Dans ce cas, si $$n\geq n_0$$ on a $$u_n \leq B$$
-
-Ainsi $$\lim \limits _{n \to + \infty} u_n = - \infty$$
diff --git a/content/maths/suites/8somme.md b/content/maths/suites/8somme.md
deleted file mode 100644
index 49f8c193..00000000
--- a/content/maths/suites/8somme.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: 8️⃣ Sommes et ∑ Sigma
----
-
-Le symbole Sigma $$\Large\Sigma$$ permet de désigner la somme d'une famille finie de termes.
-
-$$\sum\limits_{k = p}^q U_k=U_p + U_{p + 1} +\ ... +\ U_q$$
-
-Ici, est représentée la somme de la suite $$U_k$$ où $$k$$ va varier de la valeur $$p$$ jusqu'à la valeur $$q$$
-
-Autre exemple : $$\sum\limits_{i = 1}^5 3^i=3^1 + 3^2 + 3^3 + 3^4 + 3^5$$
diff --git a/content/maths/suites/index.md b/content/maths/suites/index.md
deleted file mode 100644
index 1db48c98..00000000
--- a/content/maths/suites/index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Suites
----
-
-> [!BUG] Fiches écrites par Samuel
\ No newline at end of file
diff --git a/content/philo/0LiberteSacrifices.md b/content/philo/0LiberteSacrifices.md
deleted file mode 100644
index 6d671a10..00000000
--- a/content/philo/0LiberteSacrifices.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-title: 0️⃣ Libertés et Sacrifices
----
-
-> [!Todo] Fiche écrite par Guilhem :D
-
-# 📖 Texte
-- 👤 Auteur: **Ian Patocka**
-- 📆 Publié en 1934
-
-# ☃️ Introduction
-*Es ce que l'homme ordinaire ne réfléchit pas du tout ?*
-
-```mermaid
-graph LR
- main[[La Raison]]
- b1>Homme Ordinaire]
- a1("`Réflexion et questionnement partiel`")
- b2>Philosophe]
- a2("`Questionnement Complet`")
- final["`Questions dites
- Non-Questionnables
- (Préjugés)`"]
- main --> b1 --> a1 -- Se base sur ---> final
- main --> b2 --> a2 -- Questionne ---> final
-```
-
-Le texte parle des distinctions entre les différents "modes" de raison. Il met en valeur la perte du raisonnement philosophique chez les êtres humains, du aux impératifs de la vie et le conditionnement de la société.
-
-Il y a bien deux manières de vivre **mais pas deux types d'hommes**.
-
-Il arrive cependant que certaines questions (tel que le *Il faut s'adapter*) entraîne **un éveil à la liberté**.
-
-Il n'y a interrogation philosophique que sur ce qui paraît évident à tout le monde.
-
-# 1️⃣ La vie ordinaire - le sens de la vie accepté
-Le premier paragraphe du texte incite sur la singularité du mode de pensé philosophique.
-
-## 🌿 Croyance Naturelle
-> Synonymes : Opinion Originaire, Attitude Naturelle, Foix Perceptive
-
-La **Croyance Naturelle** est une base que tout humain possède et acquis à la naissance. Elle inclut :
-- L'existence de soi et du monde
-- *Toute autre question (in)fondé ?*
-
-Tout type d'activité et de réflexion suppose cette croyance. Par exemple, le scientifique met de côté sa religion lors d'une expérience, mais il ne se demande pas si les objets qu'il étudie, si lui, si le monde existe.
-
-> Note aditionelle : la Croyance est subjective quand le savoir est justifié.
-
-La philosophie née de **l'étonnement face à l'existence de ces croyances**.
-
-## 🧩 Conditionnement Culturel
-> Synonymes : Aucuns
-
-Contrairement au croyances naturelles, le conditionnement culturel est acquis durant l'existence d'un individu. Cela inclut :
-
-### 📜 Les traditions
-- L'opinion politique
-- La religion, même até
-- L'évolution technologie et temporelle
-
-> L'époque et les créations techniques nous influence dans le sens où la communication (avec les resaux sociaux & internet) qui ont drastiquement modifiés nos relations sociales.
-
-### 🪗 La Langue
-La langue est un paradoxe : la ou elle paraît être un outil qui libéré la pensé, son existence permet aussi de la limiter. La langue est composé de trois objets :
-- **La Langue** : Un ensemble de règles communes (la grammaire et le lexique)
- - Le lexique (les mots) possèdent une histoire chargé d'un sens qui nous ont été légués.
- - La grammaire, qui considère que le sujet est maître de son action alors que nous avons déjà vu precedement que ce n'est pas le cas.
-- **La Parole** : L'acte singulier d'expression d'un individu et une Langue
-- **Le Language** : La faculté de parler (utiliser la parole) en utilisant une langue.
-
-### 🏫 L'École
-L'école est tout d'abord le fruit d'un conditionnement : le contexte socio-historique et l'émancipation des conscience l'a fait évolué.
-
-Mais l'école a aussi pour rôle de nous faire apprendre, intérioriser, des concept et notions définit que nous ne questionnont pas et dont nous ne pouvons nous émanciper - nous avons donc la aussi une forme de conditionnement.
-
-### ⛅ Le Kosmotheoros
-Le Kosmotheoros est une entité imaginaire qui serait sans appartenances. Un être immortel, de surplomb, de survol. Pour lui, il n'y a pas d'après. Il est difficile pour nous de le limiter car il est par définition infinit, sans limites.
-
-### ❄️ La Finitude
-La finitude est l'inverse du [[#🌥 Le Kosmotheoros|Kosmotheoros]], c'est la notion de temps, de fin, d'après. C'est justement la fin de la vie qui stimule l'humain à créer, agir.
-
-
-**Le Conditionnement est tellement enraciné en nous qu'on pourrait se demander comment peut on en sortir**
-
-# 2️⃣ Ébranlement et étonnement : la vie interrogé
-
-Après avoir montré la finitude humaine et le conditionnement que tout les Hommes subissent, il s'agit de savoir ce qui va donner impulsion à la reflexion
-## ☄️ Les experiences négatives et l'éveil de la raison
-
-Ce deuxième paragraphe explicite les différentes expériences négatives existantes :
-- Déception
-- Trahison
-- Mort Subite
-- Crise
-- Catastrophe
-- Deuil
-
-Elle sont décrites comme un bouleversement, un Émébranlement, une "*supension dans le vide*".
-
-Mais on peut se demander pourquoi les expériences négatives amènerais à la réflexion, alors qu'elle nous font plus penser au désarrois, à la tristesse...
-Pour comprendre le concept d'experiences négatives, nous devons d'abord mettre en lumière celle des expériences d'évenements :
-
-| FAIT | ÉVÉNEMENT |
-| :--------------------------------: | :--------------------------------------------------------------------------------------------: |
-| Cause déterminé | Pas de cause précise ou de raison suffisante |
-| Continuité avec le monde commun | Crise, ébranlement. Déstabilisation, transformation, ouverture ou naissance d'un nouveau monde |
-| Le fait en question est explicable | Inexplicable |
-
-```mermaid
-graph LR
- main[["`Évènement
- *Positif ou Négatif*`"]]
- b1>Retrouver le cour paisible et linéaire de la vie naive]
- b2>Préter l'oreille au négatif & éveiller la raison, l'interrogation]
- main --> crise --> b1
- main --> crise --> b2
-```
-### 🤓 La Contingence
-Les Événements et Expériences questionne la Contingence : **ce qui peut ou aurais pu ne pas être ou être autrement.**
-
-# 3️⃣ L’événement de la parole philosophique
-
-*Passage de Socrate et Georgias*
-*Ecriture en cours* [^1]
-
-Le savoir n'est pas une opinion, mais n'est pas non plus une opinion accompagné d'une justification. Pb de cette partie : le prof nous a dit le contraire
-
-# 4️⃣ L'étonnement philosophique
-
-Patocka aborde un autre type d'experience à la racine de la philosophie : **l’événement**. Il est beaucoup plus profond que les experiences négatives.
-
-Mais avant d'étudier l'étonnement, nous devons bien le différencier de **la curiosité**
-
-## 🧐 La Curiosité (Ontique)
-
-La curiosité est dite Ontique, c'est à dire qu'elle est relative à un l'état, à quelque chose de déterminé.
-
-Exemples:
-- Un animal dans une classe: *Que fait-il là ?*
-- Domaine politique/people : *Enquête sur une personne donné*
-
-## 🤯 L'Étonnement (Ontologique)
-l’étonnement est global sur tout l'état, devant l'étrangeté de qui nous somme et de l'existence du monde.
-**Il y a un affect**. La conscience philosophique s'éveil sous l'effet de l'étonnement et est animé par un désir de vérité.
-
-Exemples:
-- La crise de 29: *Questionnement*
-- Le Deuil: *déterminé ***MAIS*** nous confronte à la question de notre existence. A cheval sur experience négative et étonnement.*
-
-## 😵💫 Paradoxe
-
-Le philosophe veux lutter contre les affects (les émotions), mais la source de la philosophie provient des affects.
-
-# *️⃣ Conclusion
-
-A l'aube de ce texte, on progresse dans la réflexion sur ce que signifie que penser par soi-même, une croyance naive de l'être humain qui oublie la réalité du conditionnement et de la finitude.
-
-**Pour amener la réflexion, il faut une impulsion, une experience négative, un événement :**
-
--> Penser contre la société, contre autrui, contre la langue
-
--> Penser contre soit même, contre nos croyances introverties
-
--> Penser avec autrui, hériter par et avec les Oeuvres de Culture
-> *Les oeuvres de cultures sont des oeuvres philosophiques, mais aussi des textes littératies ou des oeuvres d'arts. Toutes ces créations ont une d'ébranlement, contre le réflexe de la pensée automatique.*
-
-```mermaid
-graph LR
- main[["`La Raison
- *TT*`"]]
- b1>Technicienne]
- b2>Interrogative]
- main -- Soucis d'avoir ---> b1
- main -- Soucis d'être ---> b2
-```
-
-##### On a donc jamais finit de chercher la vérité et la liberté
-
-[^1]: Le raisonnement se déploie toujours sur un fond de préjudices inaperçus considéré par tout le monde comme fondés.
diff --git a/content/philo/1RepubliqueV.md b/content/philo/1RepubliqueV.md
deleted file mode 100644
index f0840f97..00000000
--- a/content/philo/1RepubliqueV.md
+++ /dev/null
@@ -1,81 +0,0 @@
----
-title: 1️⃣ Le désir de vérité - La quête de l'essence
----
-
-> [!Todo] Fiche écrite par Guilhem :D
-
-# 📖 Texte
-- 📜 La République V
-- 👤 Auteur: **Platon** (celons **Socrate**)
-- 📆 Publié ~400 av. JC
-
-# ☃️ Introduction
-L'ouvrage de **La République** a pour but de mener une réflexion sur ce qu'est la justice et cherche à définir une cité idéale.
-
-# 1️⃣ Philosophie et Philodoxie
-
-## 🌺 Le désir de la sagesse
-> *Le désir est l'experience d'un manque, de la conscience de ce manque et de l’impulsion qui est sensé résoudre ce manque.*
-
-La première partie du texte interroge l'aspect étymologique du mot **philosophie**. Dans l'idée, $$philo$$ signifie **désir** ou **amour** et $$sophia$$ serait **sagesse**. Ce passage ne définit pas la sagesse, mais en revanche utilise la notion de désir.
-La première partie du texte interroge l'aspect étymologique du mot **philosophie**. Ce passage ne définit pas la sagesse, mais en revanche utilise la notion de désir.
-
-En effet, il utilise des exemples tel que l'amateur de vin pour justifier son hypothèse que le philosophe n'est pas quelqu'un avec l'amour d'un savoir en particulier mais de toute la sagesse, dans son ensemble, *tel qu'un amateur de vin apprécie tout bon vin*.
-
-Mais comparé à la définition juste au dessus, cela signifierais que le philosophe n'est en réalité pas sage car il désir ce qu'il n'a pas. La suite du texte va essayer de distinguer le philosophe d'une autre manière, en utilisant quelque chose qui lui ressemble et quelque chose de complètement opposé.
-
-## 🌫️ Misologie et indifférence au savoir
-
-Le soucis est de définir ce qu'il y a de plus dans la philosophie qui n'est pas présent dans le savoir. Par exemple, un philosophe ne peut pas être un criminel, un savant oui.
-
-Le texte utilise d'abord l'idée du **réfractaire à la connaissance**, complètement opposé au philosophe.
-Celui si désir en outre quelque chose d'autre ; l'argent, le bonheur, la reconnaissance ; et considère le savoir comme une perte de temps, la philosophie comme un bavardage vain.
-
-Pour appuier cette position, nous nous basons sur une citation du Georgias, 3em, entre Socrate et Calliclès. Ils développent l'idée suivante :
-
-## "*La philosophie est un bavardage inutile et dangereux.*"
-
-### Un bavardage inutile...
-La philosophie n'est pas lucrative ; elle n'apporte que la vérité, mais qui elle même n'apporte aucun pouvoir. Elle éloigne du monde des affaires, des intérêts économiques, ce qui compte vraiment et forme une vie heureuse.
-
-> [!NOTE]
->
-> L'argent est une forme de pouvoir.
-
-Il considère cependant que la philosophie a une importance temporaire : elle permet pendant la jeunesse d'apprendre comment contrôler la parole et exploiter son pouvoir.
-
-Sa réflexion est cependant jonché de contres sens : il confond ici la rhétorique et la philosophie, puis considère se considère libre alors que c'est bien la philosophie qui libère les âmes
-
-### .. et dangereux
-
-La philosophie est un usage du dialogue qui déstabilise, qui met en crise. Socrate a été condamné à mort, suspecté de corrompre la pensé des jeunes.
-
-> "*La science rassure, l'art inquiète.*"
-
-Ce qui inquiète, on veux s'en débarrasser.
-
-```mermaid
-graph LR
- main[[La Philosophie]]
- b1>Inutile]
- a1("`Eloigne du monde des affaires ;
- de l'argent & du pouvoir`")
- b2>Dangereux]
- a2("`Questionnement Complet`")
- main --> b1 --> a1
- main --> b2 --> a2
-```
-
-Cependant, avec cette définition, on risque de confondre l'intellectuel et le philosophe... D'où
-
-## 🎭 L’amateur de spectacles : le philodoxe
-
-La pensé est définit fondamentalement comme un bien véritable. Hors la plupart des hommes ne prennent pas soin de leurs pensées.
-
-Le philodoxe est celui qui aime l’opinion, l'apparence. Avec cette proposition, on est amené à définir l'essence.
-
-| Philodoxe | Philosophe |
-| :-----------------------------: | :------------------------------------------: |
-| $$doxa$$ = opinions = croyances | connaissance -> rendre raison de son propos. |
-| ↪️ basé sur les apparences | ↪️ Essence : Q? |
-| ↪️ Mais apparence temporelle | ↪️ Essence éternelle, immuable |
diff --git a/content/philo/90methodedisert.md b/content/philo/90methodedisert.md
deleted file mode 100644
index 5f8260ec..00000000
--- a/content/philo/90methodedisert.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Méthode de la Dissertation
----
-
-## Remarques :
-- 3 Parties - intro, développement, conclusion
-- Intro : 10 lignes à 1 page
-- Conclusion : 10 lignes
-
-## Introduction
-- 1 seul paragraphe, donc pas d'alinéas
-- Reformuler/Expliciter le sujet
-- Problématiser
-- Énoncer l'enjeu et le plan
-
-## Développement
-
-**ℹ️ Sous parties possibles :** la logique est la même que pour les grandes parties
-
-## Conclusion
-- Réponse nuancé au sujet
-- ❌️ Pas d'ouverture
-
-##### ⚠️ Il ne faut pas réciter à même le cours
-##### ✅️ Montrer que l'on s'interroge et qu'on continue à réfléchir
diff --git a/content/philo/bilan-g1.md b/content/philo/bilan-g1.md
deleted file mode 100644
index 9d3343d8..00000000
--- a/content/philo/bilan-g1.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Bilan - Première Partie
----
-
-# Notions
-## Conscience
-En toute rigueur connaissance de soi. Référence au "*Connaît toi toi-même*" du temple de Delphe.
-Il n'est pas relatif à l'individu particulier par introspection mais porte plutôt sur l'ensemble de l'Humanité,
-les valeurs de l'Homme et ses limites ; il n'est ni un animal, ni un dieux (s'assimiler au divin).
-
-# Repères
- - Croire / Savoir
- - Hypothèse / Conséquence / Conclusion
- - Objectif / Subjectif
- - Persuader / Convaincre
- - Transcendant / Immanent
-
- -> L'absolue est transcendant, l'Immanent est relatif
\ No newline at end of file
diff --git a/content/philo/caverne.md b/content/philo/caverne.md
deleted file mode 100644
index 862ed6bd..00000000
--- a/content/philo/caverne.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: L'allégorie de la caverne
----
-
-```html
-
-```
-
-Pour cette allégorie, Platon abandonne l'idée des rêves et des apparences pour les ombres - mais elles sont similaires.
\ No newline at end of file
diff --git a/content/philo/gorgias.md b/content/philo/gorgias.md
deleted file mode 100644
index 05dfa2a1..00000000
--- a/content/philo/gorgias.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Résumé Gorgias
----
-
-> [!Todo] Fiche écrite par Guilhem :D
-> Résumé de l'édition GF 1997 de Gorgias. Scanné avec de l'IA - certains mots sont peut être coupés.
-
-L'ensemble du Gorgias est scandé par les changements d'interlocuteurs. Socrate s'entretient avec Gorgias, puis avec Polos, enfin avec Calliclès, avant de ne parler, pour ainsi dire, qu'avec lui-même. Ces quatre séquences principales sont précédées par une courte introduction qui présente les acteurs du dialogue ; et elles se concluent sur un mythe, que Socrate raconte, et qui semble valoir comme la conclusion du dialogue. Le Gorgias est un entretien direct, dans lequel les interlocuteurs parlent pour eux-mêmes et qui, exception faite du mythe final, ne comprend aucun récit.
- Présentation : lieu et acteurs.
-Le dialogue se tient dans la demeure de Calliclès, où réside Gorgias, le rhéteur sicilien. C'est donc chez Calliclès qu'arrivent Socrate et son ami, Chéréphon. Ils y retrouvent Gorgias, Polos et Calliclès. Leur intention est explicite : ils eulent s'entretenir avec Gorgias et apprendre de lui en quoi consiste la rhétorique qu'il enseigne. Chéréphon pose les questions, mais Gorgias n'a même pas le temps d'y répondre que Polos, lui aussi orateur et admirateur de Gorgias, s'interpose. Pour couper court à toutes questions supplémentaires, Polos se met à faire l'éloge de l'art enseigné par Gorgias: la rhétorique. Socrate intervient alors et critique le discours de Polos. Il demande à Gorgias de répondre en personne. Polos et Chéréphon se retirent. La discussion commence entre Gorgias et Socrate.
-
-## Gorgias et Socrate : comment définir la rhétorique? (449a-461b)
-
-Aux questions de Socrate, Gorgias finit par répondre que la rhétorique est l'art des discours, qui sont destinés à persuader les tribunaux, ou toutes les autres assemblées, et portent sur le juste et l'injuste. Socrate suggère alors de définir la rhétorique comme l'ou- vrière, ou la productrice, du sentiment de conviction, et Gorgias accepte la formule. Reste à savoir en quoi consiste un tel sentiment de conviction. Est-il l'effet d'un savoir ? ou bien dépend-il d'une simple croyance? Gorgias répond, à l'aide d'un long discours, que la rhétorique produit la conviction en faisant croire à ce qu'elle dit, qu'elle s'est ainsi acquis une extraordinaire puissance puisqu'elle peut persuader ce qu'elle veut sans même connaître ce qu'elle fait croire. Mais, ajoute Gorgias, une telle puissance ne doit pas être utilisée abusivement. Il faut s'en servir avec justice, et s'il arrive en effet que certains individus en usent mal, ce ne sont ni la rhétorique ni les maîtres de rhétorique qu'il faut incriminer.
-A ce moment-là, Socrate demande à Gorgias d'être bien conscient de ce qu'ils sont en train de faire. Ils se posent P'un à l'autre des questions et s'efforcent d'y répondre avec vérité et précision, sans recourir aux facilités de la rhétorique. Cette exigence définit pour Socrate l'entretien dialectique, et il importe, pour que cet entretien se poursuive, de se plier à ce qu'il requiert. Mais Gorgias semble prendre prétexte de l'ennui des auditeurs pour refuser de s'engager dans une discussion plus longue. Malgré tout, devant l'insistance du public, Gorgias et Socrate se résolvent à prolonger leur échange
-Les dernières réponses de Gorgias servent de point de départ à Socrate. Quels sont les rapports de la rhétorique et de la justice? Faut-il qu'un orateur acquière la connaissance de la justice avec l'art de la rhétorique? Gorgias répond que oui. Lui-même, dans son enseignement de la rhétorique, fait appren- dre la justice à ceux qui ne la connaissent pas déjà. Alors, Socrate soulève une difficulté:si tous les orateurs, qui pratiquent la rhétorique, sont censés connaître la justice, comment est-il possible ⁃ comme l'avait suggéré Gorgias en remarquant qu'on pouvait faire un usage injuste de la rhétorique- qu'un orateur se serve injustement de son art rhéto- rique?
-Avant que Gorgias n'ait pu répondre, Polos inter- vient brusquement et reproche à Socrate d'induire Gorgias en erreur. Socrate réplique à Polos qu'il peut répondre à la place de Gorgias à condition de jouer le jeu de la discussion et de renoncer à ces longues tirades qui sont propres à la rhétorique.
-
-## Polos et Socrate : la rhétorique est une flatterie ; le seul bien est la justice. (461b-481b)
-
-Plutôt que de répondre aux questions de Socrate, Polos somme Socrate de dire quel art est, selon lui, la rhétorique. Socrate réplique qu'à ses yeux la rhétori- que n'est pas un art, mais un procédé empirique, ou une routine, qui relève de la flatterie. Par flatterie, Socrate précise qu'il entend la contrefaçon d'un art, contrefacon qui, au lieu de vouloir le bien de son objet, ne vise qu'à son plaisir. Pour rendre sa pensée plus concrète, il ajoute que la cuisine et l'art du maquillage (respectivement contrefaçons de la médecine et de la gymnastique) sont deux formes de flatterie qui recher- chent le plaisir du corps, tandis que la rhétorique et la sophistique, lesquelles flattent l'âme et visent à son plaisir, sont les faux-semblants de la justice et de la législation.
-A cette description de la rhétorique, Polos oppose la toute-puissance politique des orateurs, toute-puissance que Socrate conteste. Si les orateurs, tout comme les tyrans, ne sont pas capables de reconnaître ce que sont leur bien véritable et leur réel avantage, ils n'ont aucun moyen de profiter de leur toute-puissance : leur propre pouvoir n'est pas avantageux pour eux. Polos n'est apparemment pas convaincu par une thèse si para- doxale. Aussi demande-t-il à Socrate s'il n'envierait pas l'homme qui est à même de faire ce qu'il veut dans sa propre cité. Socrate répond que non, si une telle liberté est celle d'accomplir toutes sortes d'actions injustes. Car, tel est le plus grand mal : commettre linjustice, tandis que le seul bien est la justice. vo A cette thèse qui nie que l'homme injuste puisse être heureux, Polos réplique en rappelant la carrière du tyran Archélaos, parvenu au pouvoir après avoir commis les plus graves injustices. Archélaos est donc, semble-t-il, un homme tout à fait injuste et parfaite- ment heureux. Mais Socrate récuse cet exemple, l'usage qu'en fait Polos et la façon dont celui-ci s'entretient avec lui. Polos apporte, en effet, en guise de preuves, des témoignages extérieurs, au lieu que le seul témoignage qui importe à Socrate est celui de son interlocuteur. Socrate réaffirme sa thèse et renchérit sur elle, en soutenant que l'homme injuste qui reste impuni est encore plus malheureux que celui qui est puni. Pour prouver ce
-qu'il dit et en convaincre Polos,
-Socrate montre que commettre l'injustice est plus laid, et donc plus mauvais, que la subir que la punition est un bien qui délivre du pire des maux, P'injustice ; que le bonheur consiste à agir avec justice ou à être justement puni si on a mal agi; qu'Archélaos, comme tout autre tyran ou orateur qui commettrait des injustices, ne peut donc être ni tout-puissant ni heureux. Enfin, Socrate revient à la question de la rhétorique et souligne qu'à la rigueur, celle-ci pourrait être utile, non pas pour se défendre au tribunal ou gagner de l'influence dans la cité, mais pour s'accuser publiquement, et accuser aussi ses proches, dès quon commet une injustice.
-
-## Calliclès et Socrate la force de la nature et son injustice. (481b-506b)
-
-C'est alors que Calliclès entre en scène. Il intervient dans la discussion en s'adressant à Chéréphon et en lui demandant si Socrate, en défendant des thèses si paradoxales, parle sérieusement ou pour se moquer Socrate répond lui-même à la place de Chéréphon ; il proteste de son sérieux et déclare à Calliclès que, comme lui, il est amoureux. Mais si Calliclès risque bien d'être aussi inconstant que ses objets d'amour , qui sont les deux Démos - le jeune Démos, fils de Pyrilampe, et le Démos, ou peuple d'Athènes -, lui Socrate, en revanche, est aussi constant et aussi sérieux que la philosophie qu'il aime. olaalaleal eeerron Calliclès réplique en reprochant à Socrate de confon- dre délibérément la nature et la loi afin d'égarer ses interlocuteurs. Dans l'ordre de la nature, il n'y a pas d'autre droit que la force, laquelle donne le droit d'avoir plus que les autres. C'est cette même force de la nature qui vaut dans l'ordre social, où la seule loi qui vaille n'est pas la loi positive, mais la loi de la nature. En revanche, la loi positive, contraire à la loi de la nature, n'est faite que par les faibles pour garantir leur faiblesse contre la puissance des forts. La philosophie, selon Calliclès,
- ne permet guère de découvrir Ou de comprendre ces vérités. Socrate est donc invité à ne plus s'y consacrer et à s'occuper de la vie de la Cité. A cette sortie de Calliclès, Socrate répond qu'il connaît le goût que celui-ci, dans sa jeunesse, éprouva pour la philosophie. C'est le signe, selon Socrate, que la présente ardeur de Calliclès est inspirée par l'intérêtet l'amitié dont celui-ci fait preuve l'égard de Socrate. AY ironie, Socrate souligne qu'il a raison de poursuivre un entretien avec un interlocuteur si favora- Non sans blement disposé à tester la valeur de son âme et à lui conseiller la meilleure façon de vivre. ra C'est le sens exact de la force des forts qui fait l'objet des premières questions que Socrate adresse à Calli- clès. Calliclès admet que la force des plus forts est la force du plus grand nombre ; puis, il affirme que les hommes les plus forts sont les hommes les plus intelligents et les plus courageux, qui savent le mieux agir dans le domaine politique. Enfin, pressé par les questions de Socrate, Calliclès ne tarde pas à reconnaî- tre que I'homme le plus fort est l'homme le plus à même d'éprouver de fortes passions, de les entretenir et de les satisfaire.
- A cette conception de Calliclès, Socrate oppose une allégorie: celle des êtres insatiables, dont l'âme est comme une passoire, d'où toute satisfaction s'échappe et demande constamment à être renouvelée. La force des hommes les plus forts n'est donc faite que de leur insatisfaction. Après cela, Socrate souligne l'impossibi- lité d'affirmer que le plaisir est identique au bien, car il est nécessaire d'admettre qu'il y a des plaisirs bons, qui nous sont utiles, et d'autres mauvais, qui nous sont nuisibles. D'où le besoin d'une méthode quinous permette de les distinguer et de faire servir les seuls plaisirs bons à la réalisation de notre bien. Mais Socrate souligne alors que ce qui l'oppose a Calliclès porte sur la plus fondamentale des questions le choix à faire entre deux sortes de vie. L'une est la vie qui s'accomplit dans la cité, avec tous les moyens du pouvoir politique, la rhétorique surtout. L'autre est une vie, retirée de la politique, et entièrement dévouée à la philosophie. La première est soumise à la volonté et aux désirs de ceux dont on veut gagner le crédit :en effet, cette vie de politique et de rhétorique n'est possible que par la flatterie. La vie de philosophie, au contraire, est une vie indépendante et consacrée au bien de l'âme.
- Socrate recourt alors aux exemples historiques. Les orateurs, considérés comme les bienfaiteurs d'Athènes, ceux auxquels la Cité a conféré la toute-puissance, ont- ils cherché à améliorer leurs concitoyens - - ce qui est la véritable fin de la politique -- ou seulement à les gratifier et à leur faire plaisir ? Certes, le vrai bien que ces orateurs auraient pu donner à leurs concitoyens n'était ni la richesse ni le prestige, mais la justice, Pordre et l'harmonie. Tels sont les véritables biens de l'âme, radicalement contraires à ce dérèglement et à cette relâche qui représentent, pour Calliclès, le bien suprême.
- A ce moment de l'entretien, Calliclès se rebiffe et rompt son engagement à répondre ce qu'il croit vrai, engagement qui, jusque-là, avait rendu possible l'entretien dialectique. Pour satisfaire aux instances de Gorgias, Calliclès acceptera de jouer le rôle du répon- dant de Socrate, mais il refuse d'assumer la responsabi- lite de Ses réponses et affirme par avance qu'il ne se sentira pas le moins du monde réfuté si Socrate finit par découvrir une contradiction dans ce qu'il dit.
-
-## Socrate seul : le choix dune vie de justice et de philosophie. (506b-527e)
-
-Dans cette dernière séquence du Gorgias, Socrate fait à lui seul les demandes et les réponses. Il rappelle d'abord que, si le bien véritable consiste en la justice et en la tempérance, toutes les forces de l'individu et celles de la cité doivent tendre à acquérir ces vertus. L'essai de définir la rhétorique est donc subordonné au débat mené sur les valeurs respectives de la rhétorique et de la philosophie. Socrate considère d'abord que, si la rhétorique peut lui permettre de se défendre et par là de sauver sa vie, il existe encore une autre sorte de protection, bien plus efficace que la rhétorique et qui consiste à ressembler au peuple Ou au tyran qu'on sert, bref, à être aussi injuste que lui. Or personne n' accepterait de sauver sa vie à ce prix. Ce qui fait le prix de la vie n'est donc pas de vivre le plus longtemps possible, mais de vivre selon Rloupxua la justice. A considère les grands hommes Par ailleurs, si on d'Athènes que Calliclès citait en exemples (Périclès, Cimon, Miltiade et Thémistocle), on verra que ces politiques se sont mis en effet au service du peuple, mais ils n'ont pas rendu ce peuple meilleur. La preuve en est qu'ils ont tous été, d'une façon ou d'une autre, victimes de l'injustice de leurs concitoyens ; or, à ces concitoyens, qui les ont si injustement accusés, ces grands hommes, s'ils avaient été de vrais politiques, auraient dû enseigner la justice. Puis, Socrate fait part à Calliclès de sa propre résolution: ne pas chercher à faire plaisir à l'âme, mais la rendre meilleure. Les risques d'être injuste- ment accusé et condamné à mort n'en seront que plus grands pour lui, mais au moins est-il sûr d'éviter P'injustice et de pouvoir se présenter au-devant de la mort avec la certitude d'avoir mené une vie de jus- tice AODOLA Mythe et conclusion. L'entretien est terminé, et pour confirmer la force de ses convictions, Socrate rapporte un mythe qu'on lui a raconté. Ce mythe, dit-il, est une histoire vraie, elle évoque le jugement des morts aux Enfers. La richesse et le prestige acquis au cours de la vie terrestre n'y ont aucune valeur, seule la bonne qualité de l'âme et l'habitude de justice décident de la destination des morts. En effet, dans ce tribunal des morts, aucune dissimulation, aucune illusion, aucune rhétorique ne peuvent rien : l'âme est totalement mise à nue. Du seul point de vue de lutilité, il faut donc pratiquer la justice, car elle seule peut nous éviter vie de une tourments éternels. Le Gorgias sachève par cette récusahion des arguments de Calliclès, qui voulaient prouver le bénéfice de l'injustice.
\ No newline at end of file
diff --git a/content/philo/index.md b/content/philo/index.md
deleted file mode 100644
index b3119e07..00000000
--- a/content/philo/index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 💫 Philosophie
----
-
diff --git a/content/physique/index.md b/content/physique/index.md
deleted file mode 100644
index 4af8adf9..00000000
--- a/content/physique/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: ⚗️ Physique
----
\ No newline at end of file
diff --git a/content/physique/wip.md b/content/physique/wip.md
deleted file mode 100644
index 1f4d6617..00000000
--- a/content/physique/wip.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: ⚠️ Manque de rédacteur
----
-
-> [!QUESTION] Aucune page rédigé
->
-> Aucune fiche n'a été publié dans cette catégorie/spécialité pour le moment.
->
-> **Vous travaillez cette matière ?** Suivez notre [[/contribution/index.md|Guide de contribution]] pour ajouter vos propres fiches au site et nous aider à continuer d'offrir un moyen simple pour tous de réviser 😊
\ No newline at end of file
diff --git a/content/ses/environement.md b/content/ses/environement.md
deleted file mode 100644
index e57b2a33..00000000
--- a/content/ses/environement.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-title: ⚠️ WIP
----
-
-# Comment les questions environnementales deviennent-elles des problèmes publics et politiques.
-
-## Introduction :
-mise à l’agenda politique :
-processus qui vise à transformer un problème donné en un problème public qui fera l’objet d’une décision politique
-
-> [!DEFINITION]
-> **Action publique** : Action menée par une autorité publique afin de traiter une situation perçue comme un problème.
-
-## A. Dans un premier temps, différents acteurs contribuent à faire émerger les questions environnementales dans le débat public…
-Les différents acteurs concernés
-
-
-
-…entretiennent des relations de coopérations et de conflit.
-
-
-
-Video 1
-Video 2
-Video 3
-Acteurs
-échantillons représentatifs de la population/ citoyens tirés au sort
-citoyennes mobilisées dans le cadre d’une ONG (just stop oil)
-citoyen/nne (jeunesse) et Etats (PP)
-Cadre de la situation
-convention citoyenne (initiée par les PP pendant 6 week- end discussions avec expert, question environnementale)
-musée (atteinte à une oeuvre d’art) attirer l’attention en simulant dégradation (soupe)
-la tribune de l’ONU
-Nature des relations entre les acteurs.
-coopération : experts, PP, citoyens
-conflits ; citoyens énervés = désobéissance civile (enfreint les règles en militant
-conflit institutionnalisée (mise en cause juridiques des Etats)
-
-
-
-synthèse du I - A
-
-Les acteurs mobilisés dans l'émergence des actions publiques sont :
-• Les pouvoirs publics: Ensemble des administrations publiques locales (ex. commune), nationales (ex. gouvernement) et internationales (ex. UE, ONU) impliquées dans l'élaboration et la mise en œuvre de politiques publiques.
-• Des partis politiques, qui sont des organisations militantes en quête de sièges électoraux afin . d'exercer directement le pouvoir politique (ex : BELV mais aussi les autres partis qui se sont emparés de ces questions)
-• La société civile organisée :
-C'est l'ensemble des acteurs collectifs qui interviennent dans le débat public et tentent d'influencer les décisions des pouvoirs publics. (La société civile organisée représente tout le monde sauf l’Etat.)
-
-Elle est composée :
-o de mouvements citoyens (ex : marche des jeunes pour le climat encouragée par Greta Thunberg)
-o d'associations
-o d'entreprises
-o d'experts (scientifiques, juristes... = personnes considérées comme légitimes pour juger de quelque chose en raison de leurs connaissances, ex. GIEC = Groupe d'experts intergouvernemental sur l'évolution du climat)
-o d'Organisation Non-Gouvernementale:
-associations ayant un champ d'action international, à but non lucratif, au service de l'intérêt général (environnement, droits de l'homme, lutte contre la pauvreté...), indépendantes des Etats ou autres institutions publiques.
-
-Les acteurs des questions environnementales peuvent développer des
-relations de coopération :
-Comportement où chacun poursuit ses intérêts en prenant en compte ceux des autres, ou agit au nom d'intérêts communs avec d'autres, pour coopérer, agir ensemble.
-relations de conflit:
-Affrontement entre des acteurs sociaux aux intérêts et/ou valeurs distincts. Dans un état de droit, les conflits sont encadrés par des règles (ex. déclarer une manifestation en préfecture avant son déroulement).
-• Mais les règles sont parfois outrepassées, comme dans le cas de la désobéissance civile (cf. vidéo 2 ou encore opposition aux bassines géantes dans la Vienne).
-• Autres exemples de relations conflictuelles : grèves, manifestations, saisine de tribunaux ou des autorités compétentes (cf. exercice 2).
-
-Remarque : Etant donné la nature diverse des acteurs, il y a souvent à la fois coopération et conflit.
-Ex : Entre ONG et entreprises basées sur les énergies fossiles. Les ONG s'opposent médiatiquement et juridiquement à ces entreprises mais, en plus, elles font du lobbying auprès d'elles pour les inciter à faire évoluer leur stratégie de développement économique. Par exemple, le WWF (World Wildlife Fund - Fonds mondial pour la nature) « travaille » avec 1 000 multinationales afin d'aligner leur modèle économique sur l'Accord de Paris (et limiter le réchauffement climatique à 2°C).
-
-Une fois que les questions environnementales sont mises à l'agenda politique, des décisions politiques peuvent être prises à différentes échelles → suite du chapitre.
-B-) Puis dans un second temps, les questions environnementales prennent place dans l’agenda publique et deviennent un enjeu de l’action publique.
-
-La mise à l'agenda politique national et international de la préservation de l'environnement aboutit à différentes formes d'action publique :
-• Création d'institutions. Par exemple:
-o création d'un Ministère de l'environnement en France en 1971 o création d'une branche dédiée aux questions environnementales à l'ONU (PNUE : Programme des
-Nations-Unies pour l'environnement) en 1972
-o création du principe des COP en 1992 et première COP en 1995
-• Mise en place de politiques publiques à l'échelle locale, nationale et internationale, voire mondiale. Les actions publiques peuvent être mises en place via un arsenal législatif, exécutif ou judiciaire par :
-o des collectivités territoriales (municipalités, départements, régions)
-o les gouvernements
-o en concertation avec d'autres pays grâce à des accords internationaux comme lors des COP (Conférence of Parties)
-
-L'action publique environnementale prend souvent la forme de mesures décrétées au niveau national.
-Mais l'action publique environnementale doit souvent être adaptée aux spécificités locales. Tout pays est en effet composé d'espaces très hétérogènes qui diffèrent à la fois par la nature des écosystèmes qui y sont présents, les caractéristiques géographiques du milieu, mais aussi les traditions et la culture de leurs habitants.
-
-En Bretagne par exemple, où les élevages de viande industrielle sont parmi les plus nombreux de France, c'est surtout la thématique de la pollution de l'eau (nappes phréatiques, rivières) qui constitue un enjeu environnemental.
-Dans la région Provence-Alpes-Côte d'Azur, le climat et la proximité avec la Méditerranée attirent une population toujours plus nombreuse, ce qui entraîne une urbanisation accrue du territoire et donc des risques pour la sauvegarde des paysages et de l'environnement.
-
-Les enjeux environnementaux et les mobilisations qu'ils suscitent varient donc fortement d'un territoire à l'autre ; cela explique l'importance de l'échelle locale dans l'action publique.
-
-A l'inverse, les problématiques environnementales dépassent aussi les frontières locales ou nationales puisqu'elles peuvent affecter plusieurs pays, voire l'ensemble de la planète ; elles nécessitent donc un traitement politique à l'échelle internationale. En matière environnementale, l'action publique internationale se déploie donc à travers diverses institutions (PNUE, COP, GIEC...) et conventions (protocole de Kyoto de 1997, Accord de Paris de 2015) qui permettent à la fois d'alerter, de diffuser des connaissances, de soutenir financièrement des projets environnementaux mais aussi de fixer des objectifs en coordonnant l'engagement des États.
-
-L'Union Européenne a été pionnière dans la mise en place de mesures environnementales (Charte européenne de l'environnement et de la santé en 1989, marché européen pour limiter les émissions de CO2, paquet Énergie-climat de 2014..).
-
-L'action publique articule ces trois niveaux suivant deux logiques différentes :
-• Dans l'approche descendante, une décision est prise collectivement au niveau international avant d'être appliquée au niveau de chaque pays.
-• Dans l'approche ascendante, les propositions et décisions émanant cette fois de la base, c'est-à-dire des pays eux-mêmes; le sommet (institutions et conférences internationales) n'a alors plus qu'un rôle de chambre d'enregistrement ou de transmission entre les différentes parties prenantes.
-
-L'Accord de Paris à l'occasion de la COP21 (2015) a reposé sur ce type d'approche. Il ne s'agit plus d'imposer aux pays un effort de réduction des émissions de GES : une trajectoire globale de réduction est fixée, et on laisse chaque pays décider par lui-même de sa contribution. Cela permet de tenir compte des différents contextes nationaux. C'est cette flexibilité qui a permis d'obtenir des engagements d'un nombre sans précédent de pays (196 pour l'Accord de Paris).
-
-Synthèse du I - B.
-
-Les actions en faveur de l'environnement menées par les pouvoirs publics s'articulent à différentes échelles En France, les collectivités locales (communes, départements et régions) disposent de nombreuses compétences en matière d'aménagement du territoire, d'infrastructures publiques et de protection des écosystèmes. Au niveau national, l'Etat agit dans de nombreux domaines, plus largement, l' Union Européenne et les traités internationaux engagent les pays dans une collaboration plus étroite en faveur de l'environnement, dans un contexte de mondialisation (ou coopération) et d'interdépendance.
-
-Synthèse de la partie 1
-
-Ainsi, certaines questions environnementales comme la pollution, le dérèglement climatique ou encore les atteintes à la biodiversité ne sont devenues des problèmes publics que lorsque des acteurs leur ont conféré une dimension collective en menant diverses actions et que ces actions ont conduit à une mise à l'agenda politique de ces enjeux. Alors enfin a-t-on assisté à la mise en place d'actions politiques à différentes échelles.
-
-II Les instruments utilisés par les pouvoirs publics face aux changements climatiques.
-
-Le changement climatique est une externalité négative de la croissance sur l’environnement.
-Une externalité négative est une défaillance de marché qui requiert une intervention des pouvoirs publics qui mettent en place des politiques climatiques.
-
-
-
-
-
-
-
-
-A-) Avantages et limites des différents instruments
-
-La réglementation
-
-réglementation :
-l’ensemble des normes imposées par les PP afin de contraindre les agents économiques à adopter des comportements qui émettent moins de GES (gaz à effets de serre)
-
-exemples :
-o directives européennes
-o lois nationales
-o arrêtés ou circulaires ministériels
-
-Ne pas respecter une norme entraîne des sanctions financières (amendes) ou juridiques.
-Appliquer une mesure réglementaires signifie fixer des normes. On en distingue 3 types :
-o Les normes d’émission : plafond maximale à ne pas dépasser ( ex: moteur automobile qui on un seuil max de gramme de CO2/Km)
-o Les normes de procédés : obliger une entreprise à produire d’une certaine manière et interdire certaines autres (ex: interdiction d’utiliser de l’amiante dans les constructions.)
-o Les normes de produits : obliger une entreprises à modifier ses produits (ex: en vue d’une réduction des gaz à effet de serre en les rendant facilement recyclable.)
-
-Avantages de la réglementation (exemple avec le carburant)
-Instrument contraignant (obligation de résultats)
-facile à mettre en oeuvre (voter une loi)
-s’applique facilement à l’internationale (constructeur du monde entier obligé de respecter les normes européenne pour vendre en europe)
-peut entrer en vigueur rapidement
-
-Limites de la réglementation (exemple avec le carburant)
-paradoxe de Jevons (la moindre consommation de carburant par un véhicule risque d’être compensée par un usage plus intensif du véhicule.)
-concernant les normes de procédés si les entreprises les trouvent trop contraignantes, celles-ci peuvent être tentées de délocaliser leurs productions à l’étranger.
-les agents économiques ne sont pas incité à faire mieux que ce qu'impose la norme
-le contrôle par les pouvoirs publiques du respect des normes qu'il édicte est difficile et coûteux (ex: Dieselgate, en 2015 on a découvert que Volkswagen vendait des voitures qui ne respectaient pas les normes d’émissions entre 2009 et 2015)
-
-Les subventions publiques à l’innovation verte
-
-Subvention à l’innovation verte (SIV) :
-aides matériels et financières à destination des acteurs économiques pour les inciter à adopter des comportements favorables à la préservation de l’environnement en particulier pour les inciter à innover.
-
-Pourquoi la SIV est nécessaire?
-
-Car l’investissement écologique est une externalité positive. C’est une action coûteuse qui bénéficie à l’ensemble de la collectivité mais que les entreprises hésitent à réaliser car son coût réduit leur compétitivité et réduit leurs profits. Face à cette défaillance du marché les PP récompensent les entreprises qui innovent par des subventions (Agence de l’environnement et de la maîtrise de l’energie =>ADEME)
-
-Avantages de la subvention : (exemple avec CIR et Programmation investissements d’avenir. Le CIR est une subvention post-innovation et le programme investissements d’avenir est une subvention pré-innovation)
-compensent les difficultés que ces entreprises peuvent avoir pour se financer auprès des banques
-incite l’entreprise à innover quand elle risques d'être découragée en ca d'échec ou de manque de retour sur investissement (corriger la défaillance du marché de type externalité positive)
-bien accueilli par les agents économiques
-
-Limites/Inconvénients de la subvention
-coûteuse
-risque d’aubaine (= subventionner une entreprise qui avait de toute façon prévu d’innover) = mauvaise allocation des ressources
-ne pousse pas les acteurs économiques à faire le mieux possible et n’implique pas d’obligation de résultat.
-
-> [!DEFINITION]
-> **Taxation** : Prélèvement fiscal obligatoire effectué par l’Etat et destiné à inciter les acteurs économiques à modifier leur comportement.
-
-(ici en faveur de la préservation du climat)
-La taxation écologique est basée sur le principe de pollueur-payeur : plus on pollue, plus on paie ; moins on pollue moins on paie.
-A ne pas confondre avec les amendes en cas de non-respect des normes.
-
diff --git a/content/ses/index.md b/content/ses/index.md
deleted file mode 100644
index 3bd85023..00000000
--- a/content/ses/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: 📊 SES
----
diff --git a/docs/advanced/architecture.md b/docs/advanced/architecture.md
deleted file mode 100644
index 33da89d9..00000000
--- a/docs/advanced/architecture.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Architecture
----
-
-Quartz is a static site generator. How does it work?
-
-This question is best answered by tracing what happens when a user (you!) runs `npx quartz build` in the command line:
-
-## On the server
-
-1. After running `npx quartz build`, npm will look at `package.json` to find the `bin` entry for `quartz` which points at `./quartz/bootstrap-cli.mjs`.
-2. This file has a [shebang]() line at the top which tells npm to execute it using Node.
-3. `bootstrap-cli.mjs` is responsible for a few things:
- 1. Parsing the command-line arguments using [yargs](http://yargs.js.org/).
- 2. Transpiling and bundling the rest of Quartz (which is in Typescript) to regular JavaScript using [esbuild](https://esbuild.github.io/). The `esbuild` configuration here is slightly special as it also handles `.scss` file imports using [esbuild-sass-plugin v2](https://www.npmjs.com/package/esbuild-sass-plugin). Additionally, we bundle 'inline' client-side scripts (any `.inline.ts` file) that components declare using a custom `esbuild` plugin that runs another instance of `esbuild` which bundles for the browser instead of `node`. Modules of both types are imported as plain text.
- 3. Running the local preview server if `--serve` is set. This starts two servers:
- 1. A WebSocket server on port 3001 to handle hot-reload signals. This tracks all inbound connections and sends a 'rebuild' message a server-side change is detected (either content or configuration).
- 2. An HTTP file-server on a user defined port (normally 8080) to serve the actual website files.
- 4. If the `--serve` flag is set, it also starts a file watcher to detect source-code changes (e.g. anything that is `.ts`, `.tsx`, `.scss`, or packager files). On a change, we rebuild the module (step 2 above) using esbuild's [rebuild API](https://esbuild.github.io/api/#rebuild) which drastically reduces the build times.
- 5. After transpiling the main Quartz build module (`quartz/build.ts`), we write it to a cache file `.quartz-cache/transpiled-build.mjs` and then dynamically import this using `await import(cacheFile)`. However, we need to be pretty smart about how to bust Node's [import cache](https://github.com/nodejs/modules/issues/307) so we add a random query string to fake Node into thinking it's a new module. This does, however, cause memory leaks so we just hope that the user doesn't hot-reload their configuration too many times in a single session :)) (it leaks about ~350kB memory on each reload). After importing the module, we then invoke it, passing in the command line arguments we parsed earlier along with a callback function to signal the client to refresh.
-4. In `build.ts`, we start by installing source map support manually to account for the query string cache busting hack we introduced earlier. Then, we start processing content:
- 1. Clean the output directory.
- 2. Recursively glob all files in the `content` folder, respecting the `.gitignore`.
- 3. Parse the Markdown files.
- 1. Quartz detects the number of threads available and chooses to spawn worker threads if there are >128 pieces of content to parse (rough heuristic). If it needs to spawn workers, it will invoke esbuild again to transpile the worker script `quartz/worker.ts`. Then, a work-stealing [workerpool](https://www.npmjs.com/package/workerpool) is then created and batches of 128 files are assigned to workers.
- 2. Each worker (or just the main thread if there is no concurrency) creates a [unified](https://github.com/unifiedjs/unified) parser based off of the plugins defined in the [[configuration]].
- 3. Parsing has three steps:
- 1. Read the file into a [vfile](https://github.com/vfile/vfile).
- 2. Applied plugin-defined text transformations over the content.
- 3. Slugify the file path and store it in the data for the file. See the page on [[paths]] for more details about how path logic works in Quartz (spoiler: its complicated).
- 4. Markdown parsing using [remark-parse](https://www.npmjs.com/package/remark-parse) (text to [mdast](https://github.com/syntax-tree/mdast)).
- 5. Apply plugin-defined Markdown-to-Markdown transformations.
- 6. Convert Markdown into HTML using [remark-rehype](https://github.com/remarkjs/remark-rehype) ([mdast](https://github.com/syntax-tree/mdast) to [hast](https://github.com/syntax-tree/hast)).
- 7. Apply plugin-defined HTML-to-HTML transformations.
- 4. Filter out unwanted content using plugins.
- 5. Emit files using plugins.
- 1. Gather all the static resources (e.g. external CSS, JS modules, etc.) each emitter plugin declares.
- 2. Emitters that emit HTML files do a bit of extra work here as they need to transform the [hast](https://github.com/syntax-tree/hast) produced in the parse step to JSX. This is done using [hast-util-to-jsx-runtime](https://github.com/syntax-tree/hast-util-to-jsx-runtime) with the [Preact](https://preactjs.com/) runtime. Finally, the JSX is rendered to HTML using [preact-render-to-string](https://github.com/preactjs/preact-render-to-string) which statically renders the JSX to HTML (i.e. doesn't care about `useState`, `useEffect`, or any other React/Preact interactive bits). Here, we also do a bunch of fun stuff like assemble the page [[layout]] from `quartz.layout.ts`, assemble all the inline scripts that actually get shipped to the client, and all the transpiled styles. The bulk of this logic can be found in `quartz/components/renderPage.tsx`. Other fun things of note:
- 1. CSS is minified and transformed using [Lightning CSS](https://github.com/parcel-bundler/lightningcss) to add vendor prefixes and do syntax lowering.
- 2. Scripts are split into `beforeDOMLoaded` and `afterDOMLoaded` and are inserted in the `` and `` respectively.
- 3. Finally, each emitter plugin is responsible for emitting and writing it's own emitted files to disk.
- 6. If the `--serve` flag was detected, we also set up another file watcher to detect content changes (only `.md` files). We keep a content map that tracks the parsed AST and plugin data for each slug and update this on file changes. Newly added or modified paths are rebuilt and added to the content map. Then, all the filters and emitters are run over the resulting content map. This file watcher is debounced with a threshold of 250ms. On success, we send a client refresh signal using the passed in callback function.
-
-## On the client
-
-1. The browser opens a Quartz page and loads the HTML. The `` also links to page styles (emitted to `public/index.css`) and page-critical JS (emitted to `public/prescript.js`)
-2. Then, once the body is loaded, the browser loads the non-critical JS (emitted to `public/postscript.js`)
-3. Once the page is done loading, the page will then dispatch a custom synthetic browser event `"nav"`. This is used so client-side scripts declared by components can 'setup' anything that requires access to the page DOM.
- 1. If the [[SPA Routing|enableSPA option]] is enabled in the [[configuration]], this `"nav"` event is also fired on any client-navigation to allow for components to unregister and reregister any event handlers and state.
- 2. If it's not, we wire up the `"nav"` event to just be fired a single time after page load to allow for consistency across how state is setup across both SPA and non-SPA contexts.
-
-The architecture and design of the plugin system was intentionally left pretty vague here as this is described in much more depth in the guide on [[making plugins|making your own plugin]].
diff --git a/docs/advanced/creating components.md b/docs/advanced/creating components.md
deleted file mode 100644
index 628d5aa2..00000000
--- a/docs/advanced/creating components.md
+++ /dev/null
@@ -1,234 +0,0 @@
----
-title: Creating your own Quartz components
----
-
-> [!warning]
-> This guide assumes you have experience writing JavaScript and are familiar with TypeScript.
-
-Normally on the web, we write layout code using HTML which looks something like the following:
-
-```html
-
-
An article header
-
Some content
-
-```
-
-This piece of HTML represents an article with a leading header that says "An article header" and a paragraph that contains the text "Some content". This is combined with CSS to style the page and JavaScript to add interactivity.
-
-However, HTML doesn't let you create reusable templates. If you wanted to create a new page, you would need to copy and paste the above snippet and edit the header and content yourself. This isn't great if we have a lot of content on our site that shares a lot of similar layout. The smart people who created React also had similar complaints and invented the concept of Components -- JavaScript functions that return JSX -- to solve the code duplication problem.
-
-In effect, components allow you to write a JavaScript function that takes some data and produces HTML as an output. **While Quartz doesn't use React, it uses the same component concept to allow you to easily express layout templates in your Quartz site.**
-
-## An Example Component
-
-### Constructor
-
-Component files are written in `.tsx` files that live in the `quartz/components` folder. These are re-exported in `quartz/components/index.ts` so you can use them in layouts and other components more easily.
-
-Each component file should have a default export that satisfies the `QuartzComponentConstructor` function signature. It's a function that takes in a single optional parameter `opts` and returns a Quartz Component. The type of the parameters `opts` is defined by the interface `Options` which you as the component creator also decide.
-
-In your component, you can use the values from the configuration option to change the rendering behaviour inside of your component. For example, the component in the code snippet below will not render if the `favouriteNumber` option is below 0.
-
-```tsx {11-17}
-interface Options {
- favouriteNumber: number
-}
-
-const defaultOptions: Options = {
- favouriteNumber: 42,
-}
-
-export default ((userOpts?: Options) => {
- const opts = { ...userOpts, ...defaultOpts }
- function YourComponent(props: QuartzComponentProps) {
- if (opts.favouriteNumber < 0) {
- return null
- }
-
- return
My favourite number is {opts.favouriteNumber}
- }
-
- return YourComponent
-}) satisfies QuartzComponentConstructor
-```
-
-### Props
-
-The Quartz component itself (lines 11-17 highlighted above) looks like a React component. It takes in properties (sometimes called [props](https://react.dev/learn/passing-props-to-a-component)) and returns JSX.
-
-All Quartz components accept the same set of props:
-
-```tsx title="quartz/components/types.ts"
-// simplified for sake of demonstration
-export type QuartzComponentProps = {
- fileData: QuartzPluginData
- cfg: GlobalConfiguration
- tree: Node
- allFiles: QuartzPluginData[]
- displayClass?: "mobile-only" | "desktop-only"
-}
-```
-
-- `fileData`: Any metadata [[making plugins|plugins]] may have added to the current page.
- - `fileData.slug`: slug of the current page.
- - `fileData.frontmatter`: any frontmatter parsed.
-- `cfg`: The `configuration` field in `quartz.config.ts`.
-- `tree`: the resulting [HTML AST](https://github.com/syntax-tree/hast) after processing and transforming the file. This is useful if you'd like to render the content using [hast-util-to-jsx-runtime](https://github.com/syntax-tree/hast-util-to-jsx-runtime) (you can find an example of this in `quartz/components/pages/Content.tsx`).
-- `allFiles`: Metadata for all files that have been parsed. Useful for doing page listings or figuring out the overall site structure.
-- `displayClass`: a utility class that indicates a preference from the user about how to render it in a mobile or desktop setting. Helpful if you want to conditionally hide a component on mobile or desktop.
-
-### Styling
-
-Quartz components can also define a `.css` property on the actual function component which will get picked up by Quartz. This is expected to be a CSS string which can either be inlined or imported from a `.scss` file.
-
-Note that inlined styles **must** be plain vanilla CSS:
-
-```tsx {6-10} title="quartz/components/YourComponent.tsx"
-export default (() => {
- function YourComponent() {
- return
Example Component
- }
-
- YourComponent.css = `
- p.red-text {
- color: red;
- }
- `
-
- return YourComponent
-}) satisfies QuartzComponentConstructor
-```
-
-Imported styles, however, can be from SCSS files:
-
-```tsx {1-2,9} title="quartz/components/YourComponent.tsx"
-// assuming your stylesheet is in quartz/components/styles/YourComponent.scss
-import styles from "./styles/YourComponent.scss"
-
-export default (() => {
- function YourComponent() {
- return
Example Component
- }
-
- YourComponent.css = styles
- return YourComponent
-}) satisfies QuartzComponentConstructor
-```
-
-> [!warning]
-> Quartz does not use CSS modules so any styles you declare here apply _globally_. If you only want it to apply to your component, make sure you use specific class names and selectors.
-
-### Scripts and Interactivity
-
-What about interactivity? Suppose you want to add an-click handler for example. Like the `.css` property on the component, you can also declare `.beforeDOMLoaded` and `.afterDOMLoaded` properties that are strings that contain the script.
-
-```tsx title="quartz/components/YourComponent.tsx"
-export default (() => {
- function YourComponent() {
- return
- }
-
- YourComponent.beforeDOMLoaded = `
- console.log("hello from before the page loads!")
- `
-
- YourComponent.afterDOMLoaded = `
- document.getElementById('btn').onclick = () => {
- alert('button clicked!')
- }
- `
- return YourComponent
-}) satisfies QuartzComponentConstructor
-```
-
-> [!hint]
-> For those coming from React, Quartz components are different from React components in that it only uses JSX for templating and layout. Hooks like `useEffect`, `useState`, etc. are not rendered and other properties that accept functions like `onClick` handlers will not work. Instead, do it using a regular JS script that modifies the DOM element directly.
-
-As the names suggest, the `.beforeDOMLoaded` scripts are executed _before_ the page is done loading so it doesn't have access to any elements on the page. This is mostly used to prefetch any critical data.
-
-The `.afterDOMLoaded` script executes once the page has been completely loaded. This is a good place to setup anything that should last for the duration of a site visit (e.g. getting something saved from local storage).
-
-If you need to create an `afterDOMLoaded` script that depends on _page specific_ elements that may change when navigating to a new page, you can listen for the `"nav"` event that gets fired whenever a page loads (which may happen on navigation if [[SPA Routing]] is enabled).
-
-```ts
-document.addEventListener("nav", () => {
- // do page specific logic here
- // e.g. attach event listeners
- const toggleSwitch = document.querySelector("#switch") as HTMLInputElement
- toggleSwitch.addEventListener("change", switchTheme)
- window.addCleanup(() => toggleSwitch.removeEventListener("change", switchTheme))
-})
-```
-
-It is best practice to track any event handlers via `window.addCleanup` to prevent memory leaks.
-This will get called on page navigation.
-
-#### Importing Code
-
-Of course, it isn't always practical (nor desired!) to write your code as a string literal in the component.
-
-Quartz supports importing component code through `.inline.ts` files.
-
-```tsx title="quartz/components/YourComponent.tsx"
-// @ts-ignore: typescript doesn't know about our inline bundling system
-// so we need to silence the error
-import script from "./scripts/graph.inline"
-
-export default (() => {
- function YourComponent() {
- return
- }
-
- YourComponent.afterDOMLoaded = script
- return YourComponent
-}) satisfies QuartzComponentConstructor
-```
-
-```ts title="quartz/components/scripts/graph.inline.ts"
-// any imports here are bundled for the browser
-import * as d3 from "d3"
-
-document.getElementById("btn").onclick = () => {
- alert("button clicked!")
-}
-```
-
-Additionally, like what is shown in the example above, you can import packages in `.inline.ts` files. This will be bundled by Quartz and included in the actual script.
-
-### Using a Component
-
-After creating your custom component, re-export it in `quartz/components/index.ts`:
-
-```ts title="quartz/components/index.ts" {4,10}
-import ArticleTitle from "./ArticleTitle"
-import Content from "./pages/Content"
-import Darkmode from "./Darkmode"
-import YourComponent from "./YourComponent"
-
-export { ArticleTitle, Content, Darkmode, YourComponent }
-```
-
-Then, you can use it like any other component in `quartz.layout.ts` via `Component.YourComponent()`. See the [[configuration#Layout|layout]] section for more details.
-
-As Quartz components are just functions that return React components, you can compositionally use them in other Quartz components.
-
-```tsx title="quartz/components/AnotherComponent.tsx"
-import YourComponent from "./YourComponent"
-
-export default (() => {
- function AnotherComponent(props: QuartzComponentProps) {
- return (
-
-
It's nested!
-
-
- )
- }
-
- return AnotherComponent
-}) satisfies QuartzComponentConstructor
-```
-
-> [!hint]
-> Look in `quartz/components` for more examples of components in Quartz as reference for your own components!
diff --git a/docs/advanced/index.md b/docs/advanced/index.md
deleted file mode 100644
index 48225890..00000000
--- a/docs/advanced/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: "Advanced"
----
diff --git a/docs/advanced/making plugins.md b/docs/advanced/making plugins.md
deleted file mode 100644
index 9925d16c..00000000
--- a/docs/advanced/making plugins.md
+++ /dev/null
@@ -1,305 +0,0 @@
----
-title: Making your own plugins
----
-
-> [!warning]
-> This part of the documentation will assume you have working knowledge in TypeScript and will include code snippets that describe the interface of what Quartz plugins should look like.
-
-Quartz's plugins are a series of transformations over content. This is illustrated in the diagram of the processing pipeline below:
-
-![[quartz transform pipeline.png]]
-
-All plugins are defined as a function that takes in a single parameter for options `type OptionType = object | undefined` and return an object that corresponds to the type of plugin it is.
-
-```ts
-type OptionType = object | undefined
-type QuartzPlugin = (opts?: Options) => QuartzPluginInstance
-type QuartzPluginInstance =
- | QuartzTransformerPluginInstance
- | QuartzFilterPluginInstance
- | QuartzEmitterPluginInstance
-```
-
-The following sections will go into detail for what methods can be implemented for each plugin type. Before we do that, let's clarify a few more ambiguous types:
-
-- `BuildCtx` is defined in `quartz/ctx.ts`. It consists of
- - `argv`: The command line arguments passed to the Quartz [[build]] command
- - `cfg`: The full Quartz [[configuration]]
- - `allSlugs`: a list of all the valid content slugs (see [[paths]] for more information on what a `ServerSlug` is)
-- `StaticResources` is defined in `quartz/resources.tsx`. It consists of
- - `css`: a list of CSS style definitions that should be loaded. A CSS style is described with the `CSSResource` type which is also defined in `quartz/resources.tsx`. It accepts either a source URL or the inline content of the stylesheet.
- - `js`: a list of scripts that should be loaded. A script is described with the `JSResource` type which is also defined in `quartz/resources.tsx`. It allows you to define a load time (either before or after the DOM has been loaded), whether it should be a module, and either the source URL or the inline content of the script.
-
-## Transformers
-
-Transformers **map** over content, taking a Markdown file and outputting modified content or adding metadata to the file itself.
-
-```ts
-export type QuartzTransformerPluginInstance = {
- name: string
- textTransform?: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
- markdownPlugins?: (ctx: BuildCtx) => PluggableList
- htmlPlugins?: (ctx: BuildCtx) => PluggableList
- externalResources?: (ctx: BuildCtx) => Partial
-}
-```
-
-All transformer plugins must define at least a `name` field to register the plugin and a few optional functions that allow you to hook into various parts of transforming a single Markdown file.
-
-- `textTransform` performs a text-to-text transformation _before_ a file is parsed into the [Markdown AST](https://github.com/syntax-tree/mdast).
-- `markdownPlugins` defines a list of [remark plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md). `remark` is a tool that transforms Markdown to Markdown in a structured way.
-- `htmlPlugins` defines a list of [rehype plugins](https://github.com/rehypejs/rehype/blob/main/doc/plugins.md). Similar to how `remark` works, `rehype` is a tool that transforms HTML to HTML in a structured way.
-- `externalResources` defines any external resources the plugin may need to load on the client-side for it to work properly.
-
-Normally for both `remark` and `rehype`, you can find existing plugins that you can use to . If you'd like to create your own `remark` or `rehype` plugin, checkout the [guide to creating a plugin](https://unifiedjs.com/learn/guide/create-a-plugin/) using `unified` (the underlying AST parser and transformer library).
-
-A good example of a transformer plugin that borrows from the `remark` and `rehype` ecosystems is the [[plugins/Latex|Latex]] plugin:
-
-```ts title="quartz/plugins/transformers/latex.ts"
-import remarkMath from "remark-math"
-import rehypeKatex from "rehype-katex"
-import rehypeMathjax from "rehype-mathjax/svg"
-import { QuartzTransformerPlugin } from "../types"
-
-interface Options {
- renderEngine: "katex" | "mathjax"
-}
-
-export const Latex: QuartzTransformerPlugin = (opts?: Options) => {
- const engine = opts?.renderEngine ?? "katex"
- return {
- name: "Latex",
- markdownPlugins() {
- return [remarkMath]
- },
- htmlPlugins() {
- if (engine === "katex") {
- // if you need to pass options into a plugin, you
- // can use a tuple of [plugin, options]
- return [[rehypeKatex, { output: "html" }]]
- } else {
- return [rehypeMathjax]
- }
- },
- externalResources() {
- if (engine === "katex") {
- return {
- css: [
- {
- // base css
- content: "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css",
- },
- ],
- js: [
- {
- // fix copy behaviour: https://github.com/KaTeX/KaTeX/blob/main/contrib/copy-tex/README.md
- src: "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/contrib/copy-tex.min.js",
- loadTime: "afterDOMReady",
- contentType: "external",
- },
- ],
- }
- } else {
- return {}
- }
- },
- }
-}
-```
-
-Another common thing that transformer plugins will do is parse a file and add extra data for that file:
-
-```ts
-export const AddWordCount: QuartzTransformerPlugin = () => {
- return {
- name: "AddWordCount",
- markdownPlugins() {
- return [
- () => {
- return (tree, file) => {
- // tree is an `mdast` root element
- // file is a `vfile`
- const text = file.value
- const words = text.split(" ").length
- file.data.wordcount = words
- }
- },
- ]
- },
- }
-}
-
-// tell typescript about our custom data fields we are adding
-// other plugins will then also be aware of this data field
-declare module "vfile" {
- interface DataMap {
- wordcount: number
- }
-}
-```
-
-Finally, you can also perform transformations over Markdown or HTML ASTs using the `visit` function from the `unist-util-visit` package or the `findAndReplace` function from the `mdast-util-find-and-replace` package.
-
-```ts
-export const TextTransforms: QuartzTransformerPlugin = () => {
- return {
- name: "TextTransforms",
- markdownPlugins() {
- return [() => {
- return (tree, file) => {
- // replace _text_ with the italics version
- findAndReplace(tree, /_(.+)_/, (_value: string, ...capture: string[]) => {
- // inner is the text inside of the () of the regex
- const [inner] = capture
- // return an mdast node
- // https://github.com/syntax-tree/mdast
- return {
- type: "emphasis",
- children: [{ type: 'text', value: inner }]
- }
- })
-
- // remove all links (replace with just the link content)
- // match by 'type' field on an mdast node
- // https://github.com/syntax-tree/mdast#link in this example
- visit(tree, "link", (link: Link) => {
- return {
- type: "paragraph"
- children: [{ type: 'text', value: link.title }]
- }
- })
- }
- }]
- }
- }
-}
-```
-
-All transformer plugins can be found under `quartz/plugins/transformers`. If you decide to write your own transformer plugin, don't forget to re-export it under `quartz/plugins/transformers/index.ts`
-
-A parting word: transformer plugins are quite complex so don't worry if you don't get them right away. Take a look at the built in transformers and see how they operate over content to get a better sense for how to accomplish what you are trying to do.
-
-## Filters
-
-Filters **filter** content, taking the output of all the transformers and determining what files to actually keep and what to discard.
-
-```ts
-export type QuartzFilterPlugin = (
- opts?: Options,
-) => QuartzFilterPluginInstance
-
-export type QuartzFilterPluginInstance = {
- name: string
- shouldPublish(ctx: BuildCtx, content: ProcessedContent): boolean
-}
-```
-
-A filter plugin must define a `name` field and a `shouldPublish` function that takes in a piece of content that has been processed by all the transformers and returns a `true` or `false` depending on whether it should be passed to the emitter plugins or not.
-
-For example, here is the built-in plugin for removing drafts:
-
-```ts title="quartz/plugins/filters/draft.ts"
-import { QuartzFilterPlugin } from "../types"
-
-export const RemoveDrafts: QuartzFilterPlugin<{}> = () => ({
- name: "RemoveDrafts",
- shouldPublish(_ctx, [_tree, vfile]) {
- // uses frontmatter parsed from transformers
- const draftFlag: boolean = vfile.data?.frontmatter?.draft ?? false
- return !draftFlag
- },
-})
-```
-
-## Emitters
-
-Emitters **reduce** over content, taking in a list of all the transformed and filtered content and creating output files.
-
-```ts
-export type QuartzEmitterPlugin = (
- opts?: Options,
-) => QuartzEmitterPluginInstance
-
-export type QuartzEmitterPluginInstance = {
- name: string
- emit(ctx: BuildCtx, content: ProcessedContent[], resources: StaticResources): Promise
- getQuartzComponents(ctx: BuildCtx): QuartzComponent[]
-}
-```
-
-An emitter plugin must define a `name` field, an `emit` function, and a `getQuartzComponents` function. `emit` is responsible for looking at all the parsed and filtered content and then appropriately creating files and returning a list of paths to files the plugin created.
-
-Creating new files can be done via regular Node [fs module](https://nodejs.org/api/fs.html) (i.e. `fs.cp` or `fs.writeFile`) or via the `write` function in `quartz/plugins/emitters/helpers.ts` if you are creating files that contain text. `write` has the following signature:
-
-```ts
-export type WriteOptions = (data: {
- // the build context
- ctx: BuildCtx
- // the name of the file to emit (not including the file extension)
- slug: ServerSlug
- // the file extension
- ext: `.${string}` | ""
- // the file content to add
- content: string
-}) => Promise
-```
-
-This is a thin wrapper around writing to the appropriate output folder and ensuring that intermediate directories exist. If you choose to use the native Node `fs` APIs, ensure you emit to the `argv.output` folder as well.
-
-If you are creating an emitter plugin that needs to render components, there are three more things to be aware of:
-
-- Your component should use `getQuartzComponents` to declare a list of `QuartzComponents` that it uses to construct the page. See the page on [[creating components]] for more information.
-- You can use the `renderPage` function defined in `quartz/components/renderPage.tsx` to render Quartz components into HTML.
-- If you need to render an HTML AST to JSX, you can use the `htmlToJsx` function from `quartz/util/jsx.ts`. An example of this can be found in `quartz/components/pages/Content.tsx`.
-
-For example, the following is a simplified version of the content page plugin that renders every single page.
-
-```tsx title="quartz/plugins/emitters/contentPage.tsx"
-export const ContentPage: QuartzEmitterPlugin = () => {
- // construct the layout
- const layout: FullPageLayout = {
- ...sharedPageComponents,
- ...defaultContentPageLayout,
- pageBody: Content(),
- }
- const { head, header, beforeBody, pageBody, afterBody, left, right, footer } = layout
- return {
- name: "ContentPage",
- getQuartzComponents() {
- return [head, ...header, ...beforeBody, pageBody, ...afterBody, ...left, ...right, footer]
- },
- async emit(ctx, content, resources, emit): Promise {
- const cfg = ctx.cfg.configuration
- const fps: FilePath[] = []
- const allFiles = content.map((c) => c[1].data)
- for (const [tree, file] of content) {
- const slug = canonicalizeServer(file.data.slug!)
- const externalResources = pageResources(slug, resources)
- const componentData: QuartzComponentProps = {
- fileData: file.data,
- externalResources,
- cfg,
- children: [],
- tree,
- allFiles,
- }
-
- const content = renderPage(cfg, slug, componentData, opts, externalResources)
- const fp = await emit({
- content,
- slug: file.data.slug!,
- ext: ".html",
- })
-
- fps.push(fp)
- }
- return fps
- },
- }
-}
-```
-
-Note that it takes in a `FullPageLayout` as the options. It's made by combining a `SharedLayout` and a `PageLayout` both of which are provided through the `quartz.layout.ts` file.
-
-> [!hint]
-> Look in `quartz/plugins` for more examples of plugins in Quartz as reference for your own plugins!
diff --git a/docs/advanced/paths.md b/docs/advanced/paths.md
deleted file mode 100644
index 16f6388d..00000000
--- a/docs/advanced/paths.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Paths in Quartz
----
-
-Paths are pretty complex to reason about because, especially for a static site generator, they can come from so many places.
-
-A full file path to a piece of content? Also a path. What about a slug for a piece of content? Yet another path.
-
-It would be silly to type these all as `string` and call it a day as it's pretty common to accidentally mistake one type of path for another. Unfortunately, TypeScript does not have [nominal types](https://en.wikipedia.org/wiki/Nominal_type_system) for type aliases meaning even if you made custom types of a server-side slug or a client-slug slug, you can still accidentally assign one to another and TypeScript wouldn't catch it.
-
-Luckily, we can mimic nominal typing using [brands](https://www.typescriptlang.org/play#example/nominal-typing).
-
-```typescript
-// instead of
-type FullSlug = string
-
-// we do
-type FullSlug = string & { __brand: "full" }
-
-// that way, the following will fail typechecking
-const slug: FullSlug = "some random string"
-```
-
-While this prevents most typing mistakes _within_ our nominal typing system (e.g. mistaking a server slug for a client slug), it doesn't prevent us from _accidentally_ mistaking a string for a client slug when we forcibly cast it.
-
-Thus, we still need to be careful when casting from a string to one of these nominal types in the 'entrypoints', illustrated with hexagon shapes in the diagram below.
-
-The following diagram draws the relationships between all the path sources, nominal path types, and what functions in `quartz/path.ts` convert between them.
-
-```mermaid
-graph LR
- Browser{{Browser}} --> Window{{Body}} & LinkElement{{Link Element}}
- Window --"getFullSlug()"--> FullSlug[Full Slug]
- LinkElement --".href"--> Relative[Relative URL]
- FullSlug --"simplifySlug()" --> SimpleSlug[Simple Slug]
- SimpleSlug --"pathToRoot()"--> Relative
- SimpleSlug --"resolveRelative()" --> Relative
- MD{{Markdown File}} --> FilePath{{File Path}} & Links[Markdown links]
- Links --"transformLink()"--> Relative
- FilePath --"slugifyFilePath()"--> FullSlug[Full Slug]
- style FullSlug stroke-width:4px
-```
-
-Here are the main types of slugs with a rough description of each type of path:
-
-- `FilePath`: a real file path to a file on disk. Cannot be relative and must have a file extension.
-- `FullSlug`: cannot be relative and may not have leading or trailing slashes. It can have `index` as it's last segment. Use this wherever possible is it's the most 'general' interpretation of a slug.
-- `SimpleSlug`: cannot be relative and shouldn't have `/index` as an ending or a file extension. It _can_ however have a trailing slash to indicate a folder path.
-- `RelativeURL`: must start with `.` or `..` to indicate it's a relative URL. Shouldn't have `/index` as an ending or a file extension but can contain a trailing slash.
-
-To get a clearer picture of how these relate to each other, take a look at the path tests in `quartz/util/path.test.ts`.
diff --git a/docs/authoring content.md b/docs/authoring content.md
deleted file mode 100644
index 178f44af..00000000
--- a/docs/authoring content.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: Authoring Content
----
-
-All of the content in your Quartz should go in the `/content` folder. The content for the home page of your Quartz lives in `content/index.md`. If you've [[index#🪴 Get Started|setup Quartz]] already, this folder should already be initialized. Any Markdown in this folder will get processed by Quartz.
-
-It is recommended that you use [Obsidian](https://obsidian.md/) as a way to edit and maintain your Quartz. It comes with a nice editor and graphical interface to preview, edit, and link your local files and attachments.
-
-Got everything setup? Let's [[build]] and preview your Quartz locally!
-
-## Syntax
-
-As Quartz uses Markdown files as the main way of writing content, it fully supports Markdown syntax. By default, Quartz also ships with a few syntax extensions like [Github Flavored Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) (footnotes, strikethrough, tables, tasklists) and [Obsidian Flavored Markdown](https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown) ([[callouts]], [[wikilinks]]).
-
-Additionally, Quartz also allows you to specify additional metadata in your notes called **frontmatter**.
-
-```md title="content/note.md"
----
-title: Example Title
-draft: false
-tags:
- - example-tag
----
-
-The rest of your content lives here. You can use **Markdown** here :)
-```
-
-Some common frontmatter fields that are natively supported by Quartz:
-
-- `title`: Title of the page. If it isn't provided, Quartz will use the name of the file as the title.
-- `description`: Description of the page used for link previews.
-- `permalink`: A custom URL for the page that will remain constant even if the path to the file changes.
-- `aliases`: Other names for this note. This is a list of strings.
-- `tags`: Tags for this note.
-- `draft`: Whether to publish the page or not. This is one way to make [[private pages|pages private]] in Quartz.
-- `date`: A string representing the day the note was published. Normally uses `YYYY-MM-DD` format.
-
-## Syncing your Content
-
-When your Quartz is at a point you're happy with, you can save your changes to GitHub.
-First, make sure you've [[setting up your GitHub repository|already setup your GitHub repository]] and then do `npx quartz sync`.
-
-## Customization
-
-Frontmatter parsing for `title`, `tags`, `aliases` and `cssclasses` is a functionality of the [[Frontmatter]] plugin, `date` is handled by the [[CreatedModifiedDate]] plugin and `description` by the [[Description]] plugin. See the plugin pages for customization options.
diff --git a/docs/build.md b/docs/build.md
deleted file mode 100644
index 6005770d..00000000
--- a/docs/build.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: "Building your Quartz"
----
-
-Once you've [[index#🪴 Get Started|initialized]] Quartz, let's see what it looks like locally:
-
-```bash
-npx quartz build --serve
-```
-
-This will start a local web server to run your Quartz on your computer. Open a web browser and visit `http://localhost:8080/` to view it.
-
-> [!hint] Flags and options
-> For full help options, you can run `npx quartz build --help`.
->
-> Most of these have sensible defaults but you can override them if you have a custom setup:
->
-> - `-d` or `--directory`: the content folder. This is normally just `content`
-> - `-v` or `--verbose`: print out extra logging information
-> - `-o` or `--output`: the output folder. This is normally just `public`
-> - `--serve`: run a local hot-reloading server to preview your Quartz
-> - `--port`: what port to run the local preview server on
-> - `--concurrency`: how many threads to use to parse notes
-
-> [!warning] Not to be used for production
-> Serve mode is intended for local previews only.
-> For production workloads, see the page on [[hosting]].
diff --git a/docs/configuration.md b/docs/configuration.md
deleted file mode 100644
index 1622da6f..00000000
--- a/docs/configuration.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: Configuration
----
-
-Quartz is meant to be extremely configurable, even if you don't know any coding. Most of the configuration you should need can be done by just editing `quartz.config.ts` or changing [[layout|the layout]] in `quartz.layout.ts`.
-
-> [!tip]
-> If you edit Quartz configuration using a text-editor that has TypeScript language support like VSCode, it will warn you when you you've made an error in your configuration, helping you avoid configuration mistakes!
-
-The configuration of Quartz can be broken down into two main parts:
-
-```ts title="quartz.config.ts"
-const config: QuartzConfig = {
- configuration: { ... },
- plugins: { ... },
-}
-```
-
-## General Configuration
-
-This part of the configuration concerns anything that can affect the whole site. The following is a list breaking down all the things you can configure:
-
-- `pageTitle`: title of the site. This is also used when generating the [[RSS Feed]] for your site.
-- `pageTitleSuffix`: a string added to the end of the page title. This only applies to the browser tab title, not the title shown at the top of the page.
-- `enableSPA`: whether to enable [[SPA Routing]] on your site.
-- `enablePopovers`: whether to enable [[popover previews]] on your site.
-- `analytics`: what to use for analytics on your site. Values can be
- - `null`: don't use analytics;
- - `{ provider: 'google', tagId: '' }`: use Google Analytics;
- - `{ provider: 'plausible' }` (managed) or `{ provider: 'plausible', host: '' }` (self-hosted): use [Plausible](https://plausible.io/);
- - `{ provider: 'umami', host: '', websiteId: '' }`: use [Umami](https://umami.is/);
- - `{ provider: 'goatcounter', websiteId: 'my-goatcounter-id' }` (managed) or `{ provider: 'goatcounter', websiteId: 'my-goatcounter-id', host: 'my-goatcounter-domain.com', scriptSrc: 'https://my-url.to/counter.js' }` (self-hosted) use [GoatCounter](https://goatcounter.com);
- - `{ provider: 'posthog', apiKey: '', host: '' }`: use [Posthog](https://posthog.com/);
- - `{ provider: 'tinylytics', siteId: '' }`: use [Tinylytics](https://tinylytics.app/);
- - `{ provider: 'cabin' }` or `{ provider: 'cabin', host: 'https://cabin.example.com' }` (custom domain): use [Cabin](https://withcabin.com);
- - `{provider: 'clarity', projectId: ') patterns that Quartz should ignore and not search through when looking for files inside the `content` folder. See [[private pages]] for more details.
-- `defaultDateType`: whether to use created, modified, or published as the default date to display on pages and page listings.
-- `theme`: configure how the site looks.
- - `cdnCaching`: If `true` (default), use Google CDN to cache the fonts. This will generally will be faster. Disable (`false`) this if you want Quartz to download the fonts to be self-contained.
- - `typography`: what fonts to use. Any font available on [Google Fonts](https://fonts.google.com/) works here.
- - `header`: Font to use for headers
- - `code`: Font for inline and block quotes.
- - `body`: Font for everything
- - `colors`: controls the theming of the site.
- - `light`: page background
- - `lightgray`: borders
- - `gray`: graph links, heavier borders
- - `darkgray`: body text
- - `dark`: header text and icons
- - `secondary`: link colour, current [[graph view|graph]] node
- - `tertiary`: hover states and visited [[graph view|graph]] nodes
- - `highlight`: internal link background, highlighted text, [[syntax highlighting|highlighted lines of code]]
- - `textHighlight`: markdown highlighted text background
-
-## Plugins
-
-You can think of Quartz plugins as a series of transformations over content.
-
-![[quartz transform pipeline.png]]
-
-```ts title="quartz.config.ts"
-plugins: {
- transformers: [...],
- filters: [...],
- emitters: [...],
-}
-```
-
-- [[tags/plugin/transformer|Transformers]] **map** over content (e.g. parsing frontmatter, generating a description)
-- [[tags/plugin/filter|Filters]] **filter** content (e.g. filtering out drafts)
-- [[tags/plugin/emitter|Emitters]] **reduce** over content (e.g. creating an RSS feed or pages that list all files with a specific tag)
-
-You can customize the behaviour of Quartz by adding, removing and reordering plugins in the `transformers`, `filters` and `emitters` fields.
-
-> [!note]
-> Each node is modified by every transformer _in order_. Some transformers are position sensitive, so you may need to pay particular attention to whether they need to come before or after certain other plugins.
-
-You should take care to add the plugin to the right entry corresponding to its plugin type. For example, to add the [[ExplicitPublish]] plugin (a [[tags/plugin/filter|Filter]]), you would add the following line:
-
-```ts title="quartz.config.ts"
-filters: [
- ...
- Plugin.ExplicitPublish(),
- ...
-],
-```
-
-To remove a plugin, you should remove all occurrences of it in the `quartz.config.ts`.
-
-To customize plugins further, some plugins may also have their own configuration settings that you can pass in. If you do not pass in a configuration, the plugin will use its default settings.
-
-For example, the [[plugins/Latex|Latex]] plugin allows you to pass in a field specifying the `renderEngine` to choose between Katex and MathJax.
-
-```ts title="quartz.config.ts"
-transformers: [
- Plugin.FrontMatter(), // use default options
- Plugin.Latex({ renderEngine: "katex" }), // set some custom options
-]
-```
-
-Some plugins are included by default in the [`quartz.config.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz.config.ts), but there are more available.
-
-You can see a list of all plugins and their configuration options [[tags/plugin|here]].
-
-If you'd like to make your own plugins, see the [[making plugins|making custom plugins]] guide.
diff --git a/docs/features/Docker Support.md b/docs/features/Docker Support.md
deleted file mode 100644
index cf73b7fc..00000000
--- a/docs/features/Docker Support.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Quartz comes shipped with a Docker image that will allow you to preview your Quartz locally without installing Node.
-
-You can run the below one-liner to run Quartz in Docker.
-
-```sh
-docker run --rm -itp 8080:8080 $(docker build -q .)
-```
diff --git a/docs/features/Latex.md b/docs/features/Latex.md
deleted file mode 100644
index fdc9d277..00000000
--- a/docs/features/Latex.md
+++ /dev/null
@@ -1,82 +0,0 @@
----
-title: LaTeX
-tags:
- - feature/transformer
----
-
-Quartz uses [Katex](https://katex.org/) by default to typeset both inline and block math expressions at build time.
-
-## Syntax
-
-### Block Math
-
-Block math can be rendered by delimiting math expression with `$$`.
-
-```
-$$
-f(x) = \int_{-\infty}^\infty
- f\hat(\xi),e^{2 \pi i \xi x}
- \,d\xi
-$$
-```
-
-$$
-f(x) = \int_{-\infty}^\infty
- f\hat(\xi),e^{2 \pi i \xi x}
- \,d\xi
-$$
-
-$$
-\begin{aligned}
-a &= b + c \\ &= e + f \\
-\end{aligned}
-$$
-
-$$
-\begin{bmatrix}
-1 & 2 & 3 \\
-a & b & c
-\end{bmatrix}
-$$
-
-$$
-\begin{array}{rll}
-E \psi &= H\psi & \text{Expanding the Hamiltonian Operator} \\
-&= -\frac{\hbar^2}{2m}\frac{\partial^2}{\partial x^2} \psi + \frac{1}{2}m\omega x^2 \psi & \text{Using the ansatz $\psi(x) = e^{-kx^2}f(x)$, hoping to cancel the $x^2$ term} \\
-&= -\frac{\hbar^2}{2m} [4k^2x^2f(x)+2(-2kx)f'(x) + f''(x)]e^{-kx^2} + \frac{1}{2}m\omega x^2 f(x)e^{-kx^2} &\text{Removing the $e^{-kx^2}$ term from both sides} \\
-& \Downarrow \\
-Ef(x) &= -\frac{\hbar^2}{2m} [4k^2x^2f(x)-4kxf'(x) + f''(x)] + \frac{1}{2}m\omega x^2 f(x) & \text{Choosing $k=\frac{im}{2}\sqrt{\frac{\omega}{\hbar}}$ to cancel the $x^2$ term, via $-\frac{\hbar^2}{2m}4k^2=\frac{1}{2}m \omega$} \\
-&= -\frac{\hbar^2}{2m} [-4kxf'(x) + f''(x)] \\
-\end{array}
-$$
-
-> [!warn]
-> Due to limitations in the [underlying parsing library](https://github.com/remarkjs/remark-math), block math in Quartz requires the `$$` delimiters to be on newlines like above.
-
-### Inline Math
-
-Similarly, inline math can be rendered by delimiting math expression with a single `$`. For example, `$e^{i\pi} = -1$` produces $e^{i\pi} = -1$
-
-### Escaping symbols
-
-There will be cases where you may have more than one `$` in a paragraph at once which may accidentally trigger MathJax/Katex.
-
-To get around this, you can escape the dollar sign by doing `\$` instead.
-
-For example:
-
-- Incorrect: `I have $1 and you have $2` produces I have $1 and you have $2
-- Correct: `I have \$1 and you have \$2` produces I have \$1 and you have \$2
-
-### Using mhchem
-
-Add the following import to the top of `quartz/plugins/transformers/latex.ts` (before all the other
-imports):
-
-```ts title="quartz/plugins/transformers/latex.ts"
-import "katex/contrib/mhchem"
-```
-
-## Customization
-
-Latex parsing is a functionality of the [[plugins/Latex|Latex]] plugin. See the plugin page for customization options.
diff --git a/docs/features/Mermaid diagrams.md b/docs/features/Mermaid diagrams.md
deleted file mode 100644
index 9cc40891..00000000
--- a/docs/features/Mermaid diagrams.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: "Mermaid Diagrams"
-tags:
- - feature/transformer
----
-
-Quartz supports Mermaid which allows you to add diagrams and charts to your notes. Mermaid supports a range of diagrams, such as [flow charts](https://mermaid.js.org/syntax/flowchart.html), [sequence diagrams](https://mermaid.js.org/syntax/sequenceDiagram.html), and [timelines](https://mermaid.js.org/syntax/timeline.html). This is enabled as a part of [[Obsidian compatibility]] and can be configured and enabled/disabled from that plugin.
-
-By default, Quartz will render Mermaid diagrams to match the site theme.
-
-> [!warning]
-> Wondering why Mermaid diagrams may not be showing up even if you have them enabled? You may need to reorder your plugins so that [[ObsidianFlavoredMarkdown]] is _after_ [[SyntaxHighlighting]].
-
-## Syntax
-
-To add a Mermaid diagram, create a mermaid code block.
-
-````
-```mermaid
-sequenceDiagram
- Alice->>+John: Hello John, how are you?
- Alice->>+John: John, can you hear me?
- John-->>-Alice: Hi Alice, I can hear you!
- John-->>-Alice: I feel great!
-```
-````
-
-```mermaid
-sequenceDiagram
- Alice->>+John: Hello John, how are you?
- Alice->>+John: John, can you hear me?
- John-->>-Alice: Hi Alice, I can hear you!
- John-->>-Alice: I feel great!
-```
diff --git a/docs/features/Obsidian compatibility.md b/docs/features/Obsidian compatibility.md
deleted file mode 100644
index e469f486..00000000
--- a/docs/features/Obsidian compatibility.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "Obsidian Compatibility"
-tags:
- - feature/transformer
----
-
-Quartz was originally designed as a tool to publish Obsidian vaults as websites. Even as the scope of Quartz has widened over time, it hasn't lost the ability to seamlessly interoperate with Obsidian.
-
-By default, Quartz ships with the [[ObsidianFlavoredMarkdown]] plugin, which is a transformer plugin that adds support for [Obsidian Flavored Markdown](https://help.obsidian.md/Editing+and+formatting/Obsidian+Flavored+Markdown). This includes support for features like [[wikilinks]] and [[Mermaid diagrams]].
-
-It also ships with support for [frontmatter parsing](https://help.obsidian.md/Editing+and+formatting/Properties) with the same fields that Obsidian uses through the [[Frontmatter]] transformer plugin.
-
-Finally, Quartz also provides [[CrawlLinks]] plugin, which allows you to customize Quartz's link resolution behaviour to match Obsidian.
-
-## Configuration
-
-This functionality is provided by the [[ObsidianFlavoredMarkdown]], [[Frontmatter]] and [[CrawlLinks]] plugins. See the plugin pages for customization options.
diff --git a/docs/features/OxHugo compatibility.md b/docs/features/OxHugo compatibility.md
deleted file mode 100644
index e2205114..00000000
--- a/docs/features/OxHugo compatibility.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: "OxHugo Compatibility"
-tags:
- - feature/transformer
----
-
-[org-roam](https://www.orgroam.com/) is a plain-text personal knowledge management system for [emacs](https://en.wikipedia.org/wiki/Emacs). [ox-hugo](https://github.com/kaushalmodi/ox-hugo) is org exporter backend that exports `org-mode` files to [Hugo](https://gohugo.io/) compatible Markdown.
-
-Because the Markdown generated by ox-hugo is not pure Markdown but Hugo specific, we need to transform it to fit into Quartz. This is done by the [[OxHugoFlavoredMarkdown]] plugin. Even though this plugin was written with `ox-hugo` in mind, it should work for any Hugo specific Markdown.
-
-```typescript title="quartz.config.ts"
-plugins: {
- transformers: [
- Plugin.FrontMatter({ delims: "+++", language: "toml" }), // if toml frontmatter
- // ...
- Plugin.OxHugoFlavouredMarkdown(),
- Plugin.GitHubFlavoredMarkdown(),
- // ...
- ],
-},
-```
-
-## Usage
-
-Quartz by default doesn't understand `org-roam` files as they aren't Markdown. You're responsible for using an external tool like `ox-hugo` to export the `org-roam` files as Markdown content to Quartz and managing the static assets so that they're available in the final output.
-
-## Configuration
-
-This functionality is provided by the [[OxHugoFlavoredMarkdown]] plugin. See the plugin page for customization options.
diff --git a/docs/features/RSS Feed.md b/docs/features/RSS Feed.md
deleted file mode 100644
index ed4138df..00000000
--- a/docs/features/RSS Feed.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Quartz emits an RSS feed for all the content on your site by generating an `index.xml` file that RSS readers can subscribe to. Because of the RSS spec, this requires the `baseUrl` property in your [[configuration]] to be set properly for RSS readers to pick it up properly.
-
-## Configuration
-
-This functionality is provided by the [[ContentIndex]] plugin. See the plugin page for customization options.
diff --git a/docs/features/Roam Research compatibility.md b/docs/features/Roam Research compatibility.md
deleted file mode 100644
index 41ea8856..00000000
--- a/docs/features/Roam Research compatibility.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: "Roam Research Compatibility"
-tags:
- - feature/transformer
----
-
-[Roam Research](https://roamresearch.com) is a note-taking tool that organizes your knowledge graph in a unique and interconnected way.
-
-Quartz supports transforming the special Markdown syntax from Roam Research (like `{{[[components]]}}` and other formatting) into
-regular Markdown via the [[RoamFlavoredMarkdown]] plugin.
-
-```typescript title="quartz.config.ts"
-plugins: {
- transformers: [
- // ...
- Plugin.RoamFlavoredMarkdown(),
- Plugin.ObsidianFlavoredMarkdown(),
- // ...
- ],
-},
-```
-
-> [!warning]
-> As seen above placement of `Plugin.RoamFlavoredMarkdown()` within `quartz.config.ts` is very important. It must come before `Plugin.ObsidianFlavoredMarkdown()`.
-
-## Customization
-
-This functionality is provided by the [[RoamFlavoredMarkdown]] plugin. See the plugin page for customization options.
diff --git a/docs/features/SPA Routing.md b/docs/features/SPA Routing.md
deleted file mode 100644
index 3004af97..00000000
--- a/docs/features/SPA Routing.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Single-page-app style rendering. This prevents flashes of unstyled content and improves the smoothness of Quartz.
-
-Under the hood, this is done by hijacking page navigations and instead fetching the HTML via a `GET` request and then diffing and selectively replacing parts of the page using [micromorph](https://github.com/natemoo-re/micromorph). This allows us to change the content of the page without fully refreshing the page, reducing the amount of content that the browser needs to load.
-
-## Configuration
-
-- Disable SPA Routing: set the `enableSPA` field of the [[configuration]] in `quartz.config.ts` to be `false`.
diff --git a/docs/features/backlinks.md b/docs/features/backlinks.md
deleted file mode 100644
index f558f4a5..00000000
--- a/docs/features/backlinks.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Backlinks
-tags:
- - component
----
-
-A backlink for a note is a link from another note to that note. Links in the backlink pane also feature rich [[popover previews]] if you have that feature enabled.
-
-## Customization
-
-- Removing backlinks: delete all usages of `Component.Backlinks()` from `quartz.layout.ts`.
-- Component: `quartz/components/Backlinks.tsx`
-- Style: `quartz/components/styles/backlinks.scss`
-- Script: `quartz/components/scripts/search.inline.ts`
diff --git a/docs/features/breadcrumbs.md b/docs/features/breadcrumbs.md
deleted file mode 100644
index a7018583..00000000
--- a/docs/features/breadcrumbs.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: "Breadcrumbs"
-tags:
- - component
----
-
-Breadcrumbs provide a way to navigate a hierarchy of pages within your site using a list of its parent folders.
-
-By default, the element at the very top of your page is the breadcrumb navigation bar (can also be seen at the top on this page!).
-
-## Customization
-
-Most configuration can be done by passing in options to `Component.Breadcrumbs()`.
-
-For example, here's what the default configuration looks like:
-
-```typescript title="quartz.layout.ts"
-Component.Breadcrumbs({
- spacerSymbol: "❯", // symbol between crumbs
- rootName: "Home", // name of first/root element
- resolveFrontmatterTitle: true, // whether to resolve folder names through frontmatter titles
- hideOnRoot: true, // whether to hide breadcrumbs on root `index.md` page
- showCurrentPage: true, // whether to display the current page in the breadcrumbs
-})
-```
-
-When passing in your own options, you can omit any or all of these fields if you'd like to keep the default value for that field.
-
-You can also adjust where the breadcrumbs will be displayed by adjusting the [[layout]] (moving `Component.Breadcrumbs()` up or down)
-
-Want to customize it even more?
-
-- Removing breadcrumbs: delete all usages of `Component.Breadcrumbs()` from `quartz.layout.ts`.
-- Component: `quartz/components/Breadcrumbs.tsx`
-- Style: `quartz/components/styles/breadcrumbs.scss`
-- Script: inline at `quartz/components/Breadcrumbs.tsx`
diff --git a/docs/features/callouts.md b/docs/features/callouts.md
deleted file mode 100644
index 4caeeb4c..00000000
--- a/docs/features/callouts.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: Callouts
-tags:
- - feature/transformer
----
-
-Quartz supports the same Admonition-callout syntax as Obsidian.
-
-This includes
-
-- 12 Distinct callout types (each with several aliases)
-- Collapsable callouts
-
-```
-> [!info] Title
-> This is a callout!
-```
-
-See [documentation on supported types and syntax here](https://help.obsidian.md/Editing+and+formatting/Callouts).
-
-> [!warning]
-> Wondering why callouts may not be showing up even if you have them enabled? You may need to reorder your plugins so that [[ObsidianFlavoredMarkdown]] is _after_ [[SyntaxHighlighting]].
-
-## Customization
-
-The callouts are a functionality of the [[ObsidianFlavoredMarkdown]] plugin. See the plugin page for how to enable or disable them.
-
-You can edit the icons by customizing `quartz/styles/callouts.scss`.
-
-### Add custom callouts
-
-By default, custom callouts are handled by applying the `note` style. To make fancy ones, you have to add these lines to `custom.scss`.
-
-```scss title="quartz/styles/custom.scss"
-.callout {
- &[data-callout="custom"] {
- --color: #customcolor;
- --border: #custombordercolor;
- --bg: #custombg;
- --callout-icon: url("data:image/svg+xml; utf8, "); //SVG icon code
- }
-}
-```
-
-> [!warning]
-> Don't forget to ensure that the SVG is URL encoded before putting it in the CSS. You can use tools like [this one](https://yoksel.github.io/url-encoder/) to help you do that.
-
-## Showcase
-
-> [!info]
-> Default title
-
-> [!question]+ Can callouts be _nested_?
->
-> > [!todo]- Yes!, they can. And collapsed!
-> >
-> > > [!example] You can even use multiple layers of nesting.
-
-> [!note]
-> Aliases: "note"
-
-> [!abstract]
-> Aliases: "abstract", "summary", "tldr"
-
-> [!info]
-> Aliases: "info"
-
-> [!todo]
-> Aliases: "todo"
-
-> [!tip]
-> Aliases: "tip", "hint", "important"
-
-> [!success]
-> Aliases: "success", "check", "done"
-
-> [!question]
-> Aliases: "question", "help", "faq"
-
-> [!warning]
-> Aliases: "warning", "attention", "caution"
-
-> [!failure]
-> Aliases: "failure", "missing", "fail"
-
-> [!danger]
-> Aliases: "danger", "error"
-
-> [!bug]
-> Aliases: "bug"
-
-> [!example]
-> Aliases: "example"
-
-> [!quote]
-> Aliases: "quote", "cite"
diff --git a/docs/features/comments.md b/docs/features/comments.md
deleted file mode 100644
index 48037735..00000000
--- a/docs/features/comments.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-title: Comments
-tags:
- - component
----
-
-Quartz also has the ability to hook into various providers to enable readers to leave comments on your site.
-
-![[giscus-example.png]]
-
-As of today, only [Giscus](https://giscus.app/) is supported out of the box but PRs to support other providers are welcome!
-
-## Providers
-
-### Giscus
-
-First, make sure that the [[setting up your GitHub repository|GitHub]] repository you are using for your Quartz meets the following requirements:
-
-1. The **repository is [public](https://docs.github.com/en/github/administering-a-repository/managing-repository-settings/setting-repository-visibility#making-a-repository-public)**, otherwise visitors will not be able to view the discussion.
-2. The **[giscus](https://github.com/apps/giscus) app is installed**, otherwise visitors will not be able to comment and react.
-3. The **Discussions feature is turned on** by [enabling it for your repository](https://docs.github.com/en/github/administering-a-repository/managing-repository-settings/enabling-or-disabling-github-discussions-for-a-repository).
-
-Then, use the [Giscus site](https://giscus.app/#repository) to figure out what your `repoId` and `categoryId` should be. Make sure you select `Announcements` for the Discussion category.
-
-![[giscus-repo.png]]
-
-![[giscus-discussion.png]]
-
-After entering both your repository and selecting the discussion category, Giscus will compute some IDs that you'll need to provide back to Quartz. You won't need to manually add the script yourself as Quartz will handle that part for you but will need these values in the next step!
-
-![[giscus-results.png]]
-
-Finally, in `quartz.layout.ts`, edit the `afterBody` field of `sharedPageComponents` to include the following options but with the values you got from above:
-
-```ts title="quartz.layout.ts"
-afterBody: [
- Component.Comments({
- provider: 'giscus',
- options: {
- // from data-repo
- repo: 'jackyzha0/quartz',
- // from data-repo-id
- repoId: 'MDEwOlJlcG9zaXRvcnkzODcyMTMyMDg',
- // from data-category
- category: 'Announcements',
- // from data-category-id
- categoryId: 'DIC_kwDOFxRnmM4B-Xg6',
- }
- }),
-],
-```
-
-### Customization
-
-Quartz also exposes a few of the other Giscus options as well and you can provide them the same way `repo`, `repoId`, `category`, and `categoryId` are provided.
-
-```ts
-type Options = {
- provider: "giscus"
- options: {
- repo: `${string}/${string}`
- repoId: string
- category: string
- categoryId: string
-
- // Url to folder with custom themes
- // defaults to 'https://${cfg.baseUrl}/static/giscus'
- themeUrl?: string
-
- // filename for light theme .css file
- // defaults to 'light'
- lightTheme?: string
-
- // filename for dark theme .css file
- // defaults to 'dark'
- darkTheme?: string
-
- // how to map pages -> discussions
- // defaults to 'url'
- mapping?: "url" | "title" | "og:title" | "specific" | "number" | "pathname"
-
- // use strict title matching
- // defaults to true
- strict?: boolean
-
- // whether to enable reactions for the main post
- // defaults to true
- reactionsEnabled?: boolean
-
- // where to put the comment input box relative to the comments
- // defaults to 'bottom'
- inputPosition?: "top" | "bottom"
- }
-}
-```
-
-#### Custom CSS theme
-
-Quartz supports custom theme for Giscus. To use a custom CSS theme, place the `.css` file inside the `quartz/static` folder and set the configuration values.
-
-For example, if you have a light theme `light-theme.css`, a dark theme `dark-theme.css`, and your Quartz site is hosted at `https://example.com/`:
-
-```ts
-afterBody: [
- Component.Comments({
- provider: 'giscus',
- options: {
- // Other options
-
- themeUrl: "https://example.com/static/giscus", // corresponds to quartz/static/giscus/
- lightTheme: "light-theme", // corresponds to light-theme.css in quartz/static/giscus/
- darkTheme: "dark-theme", // corresponds to dark-theme.css quartz/static/giscus/
- }
- }),
-],
-```
-
-#### Conditionally display comments
-
-Quartz can conditionally display the comment box based on a field `comments` in the frontmatter. By default, all pages will display comments, to disable it for a specific page, set `comments` to `false`.
-
-```
----
-title: Comments disabled here!
-comments: false
----
-```
diff --git a/docs/features/darkmode.md b/docs/features/darkmode.md
deleted file mode 100644
index dff75b44..00000000
--- a/docs/features/darkmode.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: "Darkmode"
-tags:
- - component
----
-
-Quartz supports darkmode out of the box that respects the user's theme preference. Any future manual toggles of the darkmode switch will be saved in the browser's local storage so it can be persisted across future page loads.
-
-## Customization
-
-- Removing darkmode: delete all usages of `Component.Darkmode()` from `quartz.layout.ts`.
-- Component: `quartz/components/Darkmode.tsx`
-- Style: `quartz/components/styles/darkmode.scss`
-- Script: `quartz/components/scripts/darkmode.inline.ts`
-
-You can also listen to the `themechange` event to perform any custom logic when the theme changes.
-
-```js
-document.addEventListener("themechange", (e) => {
- console.log("Theme changed to " + e.detail.theme) // either "light" or "dark"
- // your logic here
-})
-```
diff --git a/docs/features/explorer.md b/docs/features/explorer.md
deleted file mode 100644
index 95878f78..00000000
--- a/docs/features/explorer.md
+++ /dev/null
@@ -1,319 +0,0 @@
----
-title: "Explorer"
-tags:
- - component
----
-
-Quartz features an explorer that allows you to navigate all files and folders on your site. It supports nested folders and is highly customizable.
-
-By default, it shows all folders and files on your page. To display the explorer in a different spot, you can edit the [[layout]].
-
-Display names for folders get determined by the `title` frontmatter field in `folder/index.md` (more detail in [[authoring content | Authoring Content]]). If this file does not exist or does not contain frontmatter, the local folder name will be used instead.
-
-> [!info]
-> The explorer uses local storage by default to save the state of your explorer. This is done to ensure a smooth experience when navigating to different pages.
->
-> To clear/delete the explorer state from local storage, delete the `fileTree` entry (guide on how to delete a key from local storage in chromium based browsers can be found [here](https://docs.devolutions.net/kb/general-knowledge-base/clear-browser-local-storage/clear-chrome-local-storage/)). You can disable this by passing `useSavedState: false` as an argument.
-
-## Customization
-
-Most configuration can be done by passing in options to `Component.Explorer()`.
-
-For example, here's what the default configuration looks like:
-
-```typescript title="quartz.layout.ts"
-Component.Explorer({
- title: "Explorer", // title of the explorer component
- folderClickBehavior: "collapse", // what happens when you click a folder ("link" to navigate to folder page on click or "collapse" to collapse folder on click)
- folderDefaultState: "collapsed", // default state of folders ("collapsed" or "open")
- useSavedState: true, // whether to use local storage to save "state" (which folders are opened) of explorer
- // Sort order: folders first, then files. Sort folders and files alphabetically
- sortFn: (a, b) => {
- ... // default implementation shown later
- },
- filterFn: filterFn: (node) => node.name !== "tags", // filters out 'tags' folder
- mapFn: undefined,
- // what order to apply functions in
- order: ["filter", "map", "sort"],
-})
-```
-
-When passing in your own options, you can omit any or all of these fields if you'd like to keep the default value for that field.
-
-Want to customize it even more?
-
-- Removing explorer: remove `Component.Explorer()` from `quartz.layout.ts`
- - (optional): After removing the explorer component, you can move the [[table of contents | Table of Contents]] component back to the `left` part of the layout
-- Changing `sort`, `filter` and `map` behavior: explained in [[#Advanced customization]]
-- Component:
- - Wrapper (Outer component, generates file tree, etc): `quartz/components/Explorer.tsx`
- - Explorer node (recursive, either a folder or a file): `quartz/components/ExplorerNode.tsx`
-- Style: `quartz/components/styles/explorer.scss`
-- Script: `quartz/components/scripts/explorer.inline.ts`
-
-## Advanced customization
-
-This component allows you to fully customize all of its behavior. You can pass a custom `sort`, `filter` and `map` function.
-All functions you can pass work with the `FileNode` class, which has the following properties:
-
-```ts title="quartz/components/ExplorerNode.tsx" {2-5}
-export class FileNode {
- children: FileNode[] // children of current node
- name: string // last part of slug
- displayName: string // what actually should be displayed in the explorer
- file: QuartzPluginData | null // if node is a file, this is the file's metadata. See `QuartzPluginData` for more detail
- depth: number // depth of current node
-
- ... // rest of implementation
-}
-```
-
-Every function you can pass is optional. By default, only a `sort` function will be used:
-
-```ts title="Default sort function"
-// Sort order: folders first, then files. Sort folders and files alphabetically
-Component.Explorer({
- sortFn: (a, b) => {
- if ((!a.file && !b.file) || (a.file && b.file)) {
- // sensitivity: "base": Only strings that differ in base letters compare as unequal. Examples: a ≠ b, a = á, a = A
- // numeric: true: Whether numeric collation should be used, such that "1" < "2" < "10"
- return a.displayName.localeCompare(b.displayName, undefined, {
- numeric: true,
- sensitivity: "base",
- })
- }
- if (a.file && !b.file) {
- return 1
- } else {
- return -1
- }
- },
-})
-```
-
----
-
-You can pass your own functions for `sortFn`, `filterFn` and `mapFn`. All functions will be executed in the order provided by the `order` option (see [[#Customization]]). These functions behave similarly to their `Array.prototype` counterpart, except they modify the entire `FileNode` tree in place instead of returning a new one.
-
-For more information on how to use `sort`, `filter` and `map`, you can check [Array.prototype.sort()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort), [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) and [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).
-
-Type definitions look like this:
-
-```ts
-sortFn: (a: FileNode, b: FileNode) => number
-filterFn: (node: FileNode) => boolean
-mapFn: (node: FileNode) => void
-```
-
-> [!tip]
-> You can check if a `FileNode` is a folder or a file like this:
->
-> ```ts
-> if (node.file) {
-> // node is a file
-> } else {
-> // node is a folder
-> }
-> ```
-
-## Basic examples
-
-These examples show the basic usage of `sort`, `map` and `filter`.
-
-### Use `sort` to put files first
-
-Using this example, the explorer will alphabetically sort everything, but put all **files** above all **folders**.
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- sortFn: (a, b) => {
- if ((!a.file && !b.file) || (a.file && b.file)) {
- return a.displayName.localeCompare(b.displayName)
- }
- if (a.file && !b.file) {
- return -1
- } else {
- return 1
- }
- },
-})
-```
-
-### Change display names (`map`)
-
-Using this example, the display names of all `FileNodes` (folders + files) will be converted to full upper case.
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- mapFn: (node) => {
- node.displayName = node.displayName.toUpperCase()
- },
-})
-```
-
-### Remove list of elements (`filter`)
-
-Using this example, you can remove elements from your explorer by providing an array of folders/files using the `omit` set.
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- filterFn: (node) => {
- // set containing names of everything you want to filter out
- const omit = new Set(["authoring content", "tags", "hosting"])
- return !omit.has(node.name.toLowerCase())
- },
-})
-```
-
-You can customize this by changing the entries of the `omit` set. Simply add all folder or file names you want to remove.
-
-### Remove files by tag
-
-You can access the frontmatter of a file by `node.file?.frontmatter?`. This allows you to filter out files based on their frontmatter, for example by their tags.
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- filterFn: (node) => {
- // exclude files with the tag "explorerexclude"
- return node.file?.frontmatter?.tags?.includes("explorerexclude") !== true
- },
-})
-```
-
-### Show every element in explorer
-
-To override the default filter function that removes the `tags` folder from the explorer, you can set the filter function to `undefined`.
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- filterFn: undefined, // apply no filter function, every file and folder will visible
-})
-```
-
-## Advanced examples
-
-> [!tip]
-> When writing more complicated functions, the `layout` file can start to look very cramped.
-> You can fix this by defining your functions in another file.
->
-> ```ts title="functions.ts"
-> import { Options } from "./quartz/components/ExplorerNode"
-> export const mapFn: Options["mapFn"] = (node) => {
-> // implement your function here
-> }
-> export const filterFn: Options["filterFn"] = (node) => {
-> // implement your function here
-> }
-> export const sortFn: Options["sortFn"] = (a, b) => {
-> // implement your function here
-> }
-> ```
->
-> You can then import them like this:
->
-> ```ts title="quartz.layout.ts"
-> import { mapFn, filterFn, sortFn } from "./functions.ts"
-> Component.Explorer({
-> mapFn: mapFn,
-> filterFn: filterFn,
-> sortFn: sortFn,
-> })
-> ```
-
-### Add emoji prefix
-
-To add emoji prefixes (📁 for folders, 📄 for files), you could use a map function like this:
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- mapFn: (node) => {
- // dont change name of root node
- if (node.depth > 0) {
- // set emoji for file/folder
- if (node.file) {
- node.displayName = "📄 " + node.displayName
- } else {
- node.displayName = "📁 " + node.displayName
- }
- }
- },
-})
-```
-
-### Putting it all together
-
-In this example, we're going to customize the explorer by using functions from examples above to [[#Add emoji prefix | add emoji prefixes]], [[#remove-list-of-elements-filter| filter out some folders]] and [[#use-sort-to-put-files-first | sort with files above folders]].
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- filterFn: sampleFilterFn,
- mapFn: sampleMapFn,
- sortFn: sampleSortFn,
- order: ["filter", "sort", "map"],
-})
-```
-
-Notice how we customized the `order` array here. This is done because the default order applies the `sort` function last. While this normally works well, it would cause unintended behavior here, since we changed the first characters of all display names. In our example, `sort` would be applied based off the emoji prefix instead of the first _real_ character.
-
-To fix this, we just changed around the order and apply the `sort` function before changing the display names in the `map` function.
-
-### Use `sort` with pre-defined sort order
-
-Here's another example where a map containing file/folder names (as slugs) is used to define the sort order of the explorer in quartz. All files/folders that aren't listed inside of `nameOrderMap` will appear at the top of that folders hierarchy level.
-
-It's also worth mentioning, that the smaller the number set in `nameOrderMap`, the higher up the entry will be in the explorer. Incrementing every folder/file by 100, makes ordering files in their folders a lot easier. Lastly, this example still allows you to use a `mapFn` or frontmatter titles to change display names, as it uses slugs for `nameOrderMap` (which is unaffected by display name changes).
-
-```ts title="quartz.layout.ts"
-Component.Explorer({
- sortFn: (a, b) => {
- const nameOrderMap: Record = {
- "poetry-folder": 100,
- "essay-folder": 200,
- "research-paper-file": 201,
- "dinosaur-fossils-file": 300,
- "other-folder": 400,
- }
-
- let orderA = 0
- let orderB = 0
-
- if (a.file && a.file.slug) {
- orderA = nameOrderMap[a.file.slug] || 0
- } else if (a.name) {
- orderA = nameOrderMap[a.name] || 0
- }
-
- if (b.file && b.file.slug) {
- orderB = nameOrderMap[b.file.slug] || 0
- } else if (b.name) {
- orderB = nameOrderMap[b.name] || 0
- }
-
- return orderA - orderB
- },
-})
-```
-
-For reference, this is how the quartz explorer window would look like with that example:
-
-```
-📖 Poetry Folder
-📑 Essay Folder
- ⚗️ Research Paper File
-🦴 Dinosaur Fossils File
-🔮 Other Folder
-```
-
-And this is how the file structure would look like:
-
-```
-index.md
-poetry-folder
- index.md
-essay-folder
- index.md
- research-paper-file.md
-dinosaur-fossils-file.md
-other-folder
- index.md
-```
diff --git a/docs/features/folder and tag listings.md b/docs/features/folder and tag listings.md
deleted file mode 100644
index 3190709d..00000000
--- a/docs/features/folder and tag listings.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Folder and Tag Listings
-tags:
- - feature/emitter
----
-
-Quartz emits listing pages for any folders and tags you have.
-
-## Folder Listings
-
-Quartz will generate an index page for all the pages under that folder. This includes any content that is multiple levels deep.
-
-Additionally, Quartz will also generate pages for subfolders. Say you have a note in a nested folder `content/abc/def/note.md`. Then Quartz would generate a page for all the notes under `abc` _and_ a page for all the notes under `abc/def`.
-
-You can link to the folder listing by referencing its name, plus a trailing slash, like this: `[[advanced/]]` (results in [[advanced/]]).
-
-By default, Quartz will title the page `Folder: ` and no description. You can override this by creating an `index.md` file in the folder with the `title` [[authoring content#Syntax|frontmatter]] field. Any content you write in this file will also be used in the folder description.
-
-For example, for the folder `content/posts`, you can add another file `content/posts/index.md` to add a specific description for it.
-
-## Tag Listings
-
-Quartz will also create an index page for each unique tag in your vault and render a list of all notes with that tag.
-
-Quartz also supports tag hierarchies as well (e.g. `plugin/emitter`) and will also render a separate tag page for each level of the tag hierarchy. It will also create a default global tag index page at `/tags` that displays a list of all the tags in your Quartz.
-
-You can link to the tag listing by referencing its name with a `tag/` prefix, like this: `[[tags/plugin]]` (results in [[tags/plugin]]).
-
-As with folder listings, you can also provide a description and title for a tag page by creating a file for each tag. For example, if you wanted to create a custom description for the #component tag, you would create a file at `content/tags/component.md` with a title and description.
-
-## Customization
-
-Quartz allows you to define a custom sort ordering for content on both page types. The folder listings are a functionality of the [[FolderPage]] plugin, the tag listings of the [[TagPage]] plugin. See the plugin pages for customization options.
diff --git a/docs/features/full-text search.md b/docs/features/full-text search.md
deleted file mode 100644
index 85ec0300..00000000
--- a/docs/features/full-text search.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Full-text Search
-tags:
- - component
----
-
-Full-text search in Quartz is powered by [Flexsearch](https://github.com/nextapps-de/flexsearch). It's fast enough to return search results in under 10ms for Quartzs as large as half a million words.
-
-It can be opened by either clicking on the search bar or pressing `⌘`/`ctrl` + `K`. The top 5 search results are shown on each query. Matching subterms are highlighted and the most relevant 30 words are excerpted. Clicking on a search result will navigate to that page.
-
-To search content by tags, you can either press `⌘`/`ctrl` + `shift` + `K` or start your query with `#` (e.g. `#components`).
-
-This component is also keyboard accessible: Tab and Shift+Tab will cycle forward and backward through search results and Enter will navigate to the highlighted result (first result by default). You are also able to navigate search results using `ArrowUp` and `ArrowDown`.
-
-> [!info]
-> Search requires the `ContentIndex` emitter plugin to be present in the [[configuration]].
-
-### Indexing Behaviour
-
-By default, it indexes every page on the site with **Markdown syntax removed**. This means link URLs for instance are not indexed.
-
-It properly tokenizes Chinese, Korean, and Japenese characters and constructs separate indexes for the title, content and tags, weighing title matches above content matches.
-
-## Customization
-
-- Removing search: delete all usages of `Component.Search()` from `quartz.layout.ts`.
-- Component: `quartz/components/Search.tsx`
-- Style: `quartz/components/styles/search.scss`
-- Script: `quartz/components/scripts/search.inline.ts`
- - You can edit `contextWindowWords`, `numSearchResults` or `numTagResults` to suit your needs
diff --git a/docs/features/graph view.md b/docs/features/graph view.md
deleted file mode 100644
index 4f905c78..00000000
--- a/docs/features/graph view.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: "Graph View"
-tags:
- - component
----
-
-Quartz features a graph-view that can show both a local graph view and a global graph view.
-
-- The local graph view shows files that either link to the current file or are linked from the current file. In other words, it shows all notes that are _at most_ one hop away.
-- The global graph view can be toggled by clicking the graph icon on the top-right of the local graph view. It shows _all_ the notes in your graph and how they connect to each other.
-
-By default, the node radius is proportional to the total number of incoming and outgoing internal links from that file.
-
-Additionally, similar to how browsers highlight visited links a different colour, the graph view will also show nodes that you have visited in a different colour.
-
-> [!info]
-> Graph View requires the `ContentIndex` emitter plugin to be present in the [[configuration]].
-
-## Customization
-
-Most configuration can be done by passing in options to `Component.Graph()`.
-
-For example, here's what the default configuration looks like:
-
-```typescript title="quartz.layout.ts"
-Component.Graph({
- localGraph: {
- drag: true, // whether to allow panning the view around
- zoom: true, // whether to allow zooming in and out
- depth: 1, // how many hops of notes to display
- scale: 1.1, // default view scale
- repelForce: 0.5, // how much nodes should repel each other
- centerForce: 0.3, // how much force to use when trying to center the nodes
- linkDistance: 30, // how long should the links be by default?
- fontSize: 0.6, // what size should the node labels be?
- opacityScale: 1, // how quickly do we fade out the labels when zooming out?
- removeTags: [], // what tags to remove from the graph
- showTags: true, // whether to show tags in the graph
- },
- globalGraph: {
- drag: true,
- zoom: true,
- depth: -1,
- scale: 0.9,
- repelForce: 0.5,
- centerForce: 0.3,
- linkDistance: 30,
- fontSize: 0.6,
- opacityScale: 1,
- removeTags: [], // what tags to remove from the graph
- showTags: true, // whether to show tags in the graph
- },
-})
-```
-
-When passing in your own options, you can omit any or all of these fields if you'd like to keep the default value for that field.
-
-Want to customize it even more?
-
-- Removing graph view: delete all usages of `Component.Graph()` from `quartz.layout.ts`.
-- Component: `quartz/components/Graph.tsx`
-- Style: `quartz/components/styles/graph.scss`
-- Script: `quartz/components/scripts/graph.inline.ts`
diff --git a/docs/features/i18n.md b/docs/features/i18n.md
deleted file mode 100644
index 57547dda..00000000
--- a/docs/features/i18n.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Internationalization
----
-
-Internationalization allows users to translate text in the Quartz interface into various supported languages without needing to make extensive code changes. This can be changed via the `locale` [[configuration]] field in `quartz.config.ts`.
-
-The locale field generally follows a certain format: `{language}-{REGION}`
-
-- `{language}` is usually a [2-letter lowercase language code](https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes).
-- `{REGION}` is usually a [2-letter uppercase region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
-
-> [!tip] Interested in contributing?
-> We [gladly welcome translation PRs](https://github.com/jackyzha0/quartz/tree/v4/quartz/i18n/locales)! To contribute a translation, do the following things:
->
-> 1. In the `quartz/i18n/locales` folder, copy the `en-US.ts` file.
-> 2. Rename it to `{language}-{REGION}.ts` so it matches a locale of the format shown above.
-> 3. Fill in the translations!
-> 4. Add the entry under `TRANSLATIONS` in `quartz/i18n/index.ts`.
diff --git a/docs/features/index.md b/docs/features/index.md
deleted file mode 100644
index 2997b3aa..00000000
--- a/docs/features/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Feature List
----
diff --git a/docs/features/popover previews.md b/docs/features/popover previews.md
deleted file mode 100644
index 06660475..00000000
--- a/docs/features/popover previews.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Popover Previews
----
-
-Like Wikipedia, when you hover over a link in Quartz, there is a popup of a page preview that you can scroll to see the entire content. Links to headers will also scroll the popup to show that specific header in view.
-
-By default, Quartz only fetches previews for pages inside your vault due to [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). It does this by selecting all HTML elements with the `popover-hint` class. For most pages, this includes the page title, page metadata like words and time to read, tags, and the actual page content.
-
-When [[creating components|creating your own components]], you can include this `popover-hint` class to also include it in the popover.
-
-Similar to Obsidian, [[quartz layout.png|images referenced using wikilinks]] can also be viewed as popups.
-
-## Configuration
-
-- Remove popovers: set the `enablePopovers` field in `quartz.config.ts` to be `false`.
-- Style: `quartz/components/styles/popover.scss`
-- Script: `quartz/components/scripts/popover.inline.ts`
diff --git a/docs/features/private pages.md b/docs/features/private pages.md
deleted file mode 100644
index 1e8f8aa2..00000000
--- a/docs/features/private pages.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Private Pages
-tags:
- - feature/filter
----
-
-There may be some notes you want to avoid publishing as a website. Quartz supports this through two mechanisms which can be used in conjunction:
-
-## Filter Plugins
-
-[[making plugins#Filters|Filter plugins]] are plugins that filter out content based off of certain criteria. By default, Quartz uses the [[RemoveDrafts]] plugin which filters out any note that has `draft: true` in the frontmatter.
-
-If you'd like to only publish a select number of notes, you can instead use [[ExplicitPublish]] which will filter out all notes except for any that have `publish: true` in the frontmatter.
-
-> [!warning]
-> Regardless of the filter plugin used, **all non-markdown files will be emitted and available publically in the final build.** This includes files such as images, voice recordings, PDFs, etc. One way to prevent this and still be able to embed local images is to create a folder specifically for public media and add the following two patterns to the ignorePatterns array.
->
-> `"!(PublicMedia)**/!(*.md)", "!(*.md)"`
-
-## `ignorePatterns`
-
-This is a field in `quartz.config.ts` under the main [[configuration]] which allows you to specify a list of patterns to effectively exclude from parsing all together. Any valid [fast-glob](https://github.com/mrmlnc/fast-glob#pattern-syntax) pattern works here.
-
-> [!note]
-> Bash's glob syntax is slightly different from fast-glob's and using bash's syntax may lead to unexpected results.
-
-Common examples include:
-
-- `some/folder`: exclude the entire of `some/folder`
-- `*.md`: exclude all files with a `.md` extension
-- `!*.md` exclude all files that _don't_ have a `.md` extension
-- `**/private`: exclude any files or folders named `private` at any level of nesting
-
-> [!warning]
-> Marking something as private via either a plugin or through the `ignorePatterns` pattern will only prevent a page from being included in the final built site. If your GitHub repository is public, also be sure to include an ignore for those in the `.gitignore` of your Quartz. See the `git` [documentation](https://git-scm.com/docs/gitignore#_pattern_format) for more information.
diff --git a/docs/features/recent notes.md b/docs/features/recent notes.md
deleted file mode 100644
index 75406e50..00000000
--- a/docs/features/recent notes.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Recent Notes
-tags: component
----
-
-Quartz can generate a list of recent notes based on some filtering and sorting criteria. Though this component isn't included in any [[layout]] by default, you can add it by using `Component.RecentNotes` in `quartz.layout.ts`.
-
-## Customization
-
-- Changing the title from "Recent notes": pass in an additional parameter to `Component.RecentNotes({ title: "Recent writing" })`
-- Changing the number of recent notes: pass in an additional parameter to `Component.RecentNotes({ limit: 5 })`
-- Display the note's tags (defaults to true): `Component.RecentNotes({ showTags: false })`
-- Show a 'see more' link: pass in an additional parameter to `Component.RecentNotes({ linkToMore: "tags/components" })`. This field should be a full slug to a page that exists.
-- Customize filtering: pass in an additional parameter to `Component.RecentNotes({ filter: someFilterFunction })`. The filter function should be a function that has the signature `(f: QuartzPluginData) => boolean`.
-- Customize sorting: pass in an additional parameter to `Component.RecentNotes({ sort: someSortFunction })`. By default, Quartz will sort by date and then tie break lexographically. The sort function should be a function that has the signature `(f1: QuartzPluginData, f2: QuartzPluginData) => number`. See `byDateAndAlphabetical` in `quartz/components/PageList.tsx` for an example.
-- Component: `quartz/components/RecentNotes.tsx`
-- Style: `quartz/components/styles/recentNotes.scss`
diff --git a/docs/features/social images.md b/docs/features/social images.md
deleted file mode 100644
index 0822651f..00000000
--- a/docs/features/social images.md
+++ /dev/null
@@ -1,401 +0,0 @@
----
-title: "Social Media Preview Cards"
----
-
-A lot of social media platforms can display a rich preview for your website when sharing a link (most notably, a cover image, a title and a description). Quartz automatically handles most of this for you with reasonable defaults, but for more control, you can customize these by setting [[social images#Frontmatter Properties]].
-Quartz can also dynamically generate and use new cover images for every page to be used in link previews on social media for you. To get started with this, set `generateSocialImages: true` in `quartz.config.ts`.
-
-## Showcase
-
-After enabling `generateSocialImages` in `quartz.config.ts`, the social media link preview for [[authoring content | Authoring Content]] looks like this:
-
-| Light | Dark |
-| ----------------------------------- | ---------------------------------- |
-| ![[social-image-preview-light.png]] | ![[social-image-preview-dark.png]] |
-
-For testing, it is recommended to use [opengraph.xyz](https://www.opengraph.xyz/) to see what the link to your page will look like on various platforms (more info under [[social images#local testing]]).
-
-## Customization
-
-You can customize how images will be generated in the quartz config.
-
-For example, here's what the default configuration looks like if you set `generateSocialImages: true`:
-
-```typescript title="quartz.config.ts"
-generateSocialImages: {
- colorScheme: "lightMode", // what colors to use for generating image, same as theme colors from config, valid values are "darkMode" and "lightMode"
- width: 1200, // width to generate with (in pixels)
- height: 630, // height to generate with (in pixels)
- excludeRoot: false, // wether to exclude "/" index path to be excluded from auto generated images (false = use auto, true = use default og image)
-}
-```
-
----
-
-### Frontmatter Properties
-
-> [!tip] Hint
->
-> Overriding social media preview properties via frontmatter still works even if `generateSocialImages` is disabled.
-
-The following properties can be used to customize your link previews:
-
-| Property | Alias | Summary |
-| ------------------- | ---------------- | ----------------------------------- |
-| `socialDescription` | `description` | Description to be used for preview. |
-| `socialImage` | `image`, `cover` | Link to preview image. |
-
-The `socialImage` property should contain a link to an image relative to `quartz/static`. If you have a folder for all your images in `quartz/static/my-images`, an example for `socialImage` could be `"my-images/cover.png"`.
-
-> [!info] Info
->
-> The priority for what image will be used for the cover image looks like the following: `frontmatter property > generated image (if enabled) > default image`.
->
-> The default image (`quartz/static/og-image.png`) will only be used as a fallback if nothing else is set. If `generateSocialImages` is enabled, it will be treated as the new default per page, but can be overwritten by setting the `socialImage` frontmatter property for that page.
-
----
-
-### Fully customized image generation
-
-You can fully customize how the images being generated look by passing your own component to `generateSocialImages.imageStructure`. This component takes html/css + some page metadata/config options and converts it to an image using [satori](https://github.com/vercel/satori). Vercel provides an [online playground](https://og-playground.vercel.app/) that can be used to preview how your html/css looks like as a picture. This is ideal for prototyping your custom design.
-
-It is recommended to write your own image components in `quartz/util/og.tsx` or any other `.tsx` file, as passing them to the config won't work otherwise. An example of the default image component can be found in `og.tsx` in `defaultImage()`.
-
-> [!tip] Hint
->
-> Satori only supports a subset of all valid CSS properties. All supported properties can be found in their [documentation](https://github.com/vercel/satori#css).
-
-Your custom image component should have the `SocialImageOptions["imageStructure"]` type, to make development easier for you. Using a component of this type, you will be passed the following variables:
-
-```ts
-imageStructure: (
- cfg: GlobalConfiguration, // global Quartz config (useful for getting theme colors and other info)
- userOpts: UserOpts, // options passed to `generateSocialImage`
- title: string, // title of current page
- description: string, // description of current page
- fonts: SatoriOptions["fonts"], // header + body font
-) => JSXInternal.Element
-```
-
-Now, you can let your creativity flow and design your own image component! For reference and some cool tips, you can check how the markup for the default image looks.
-
-> [!example] Examples
->
-> Here are some examples for markup you may need to get started:
->
-> - Get a theme color
->
-> `cfg.theme.colors[colorScheme].`, where `` corresponds to a key in `ColorScheme` (defined at the top of `quartz/util/theme.ts`)
->
-> - Use the page title/description
->
-> `
{title}
`/`
{description}
`
->
-> - Use a font family
->
-> Detailed in the Fonts chapter below
-
----
-
-### Fonts
-
-You will also be passed an array containing a header and a body font (where the first entry is header and the second is body). The fonts matches the ones selected in `theme.typography.header` and `theme.typography.body` from `quartz.config.ts` and will be passed in the format required by [`satori`](https://github.com/vercel/satori). To use them in CSS, use the `.name` property (e.g. `fontFamily: fonts[1].name` to use the "body" font family).
-
-An example of a component using the header font could look like this:
-
-```tsx title="socialImage.tsx"
-export const myImage: SocialImageOptions["imageStructure"] = (...) => {
- return
Cool Header!
-}
-```
-
-> [!example]- Local fonts
->
-> For cases where you use a local fonts under `static` folder, make sure to set the correct `@font-face` in `custom.scss`
->
-> ```scss title="custom.scss"
-> @font-face {
-> font-family: "Newsreader";
-> font-style: normal;
-> font-weight: normal;
-> font-display: swap;
-> src: url("/static/Newsreader.woff2") format("woff2");
-> }
-> ```
->
-> Then in `quartz/util/og.tsx`, you can load the satori fonts like so:
->
-> ```tsx title="quartz/util/og.tsx"
-> const headerFont = joinSegments("static", "Newsreader.woff2")
-> const bodyFont = joinSegments("static", "Newsreader.woff2")
->
-> export async function getSatoriFont(cfg: GlobalConfiguration): Promise {
-> const headerWeight: FontWeight = 700
-> const bodyWeight: FontWeight = 400
->
-> const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`)
->
-> const [header, body] = await Promise.all(
-> [headerFont, bodyFont].map((font) =>
-> fetch(`${url.toString()}/${font}`).then((res) => res.arrayBuffer()),
-> ),
-> )
->
-> return [
-> { name: cfg.theme.typography.header, data: header, weight: headerWeight, style: "normal" },
-> { name: cfg.theme.typography.body, data: body, weight: bodyWeight, style: "normal" },
-> ]
-> }
-> ```
->
-> This font then can be used with your custom structure
-
-### Local testing
-
-To test how the full preview of your page is going to look even before deploying, you can forward the port you're serving quartz on. In VSCode, this can easily be achieved following [this guide](https://code.visualstudio.com/docs/editor/port-forwarding) (make sure to set `Visibility` to `public` if testing on external tools like [opengraph.xyz](https://www.opengraph.xyz/)).
-
-If you have `generateSocialImages` enabled, you can check out all generated images under `public/static/social-images`.
-
-## Technical info
-
-Images will be generated as `.webp` files, which helps to keep images small (the average image takes ~`19kB`). They are also compressed further using [sharp](https://sharp.pixelplumbing.com/).
-
-When using images, the appropriate [Open Graph](https://ogp.me/) and [Twitter](https://developer.twitter.com/en/docs/twitter-for-websites/cards/guides/getting-started) meta tags will be set to ensure they work and look as expected.
-
-## Examples
-
-Besides the template for the default image generation (found under `quartz/util/og.tsx`), you can also add your own! To do this, you can either edit the source code of that file (not recommended) or create a new one (e.g. `customSocialImage.tsx`, source shown below).
-
-After adding that file, you can update `quartz.config.ts` to use your image generation template as follows:
-
-```ts
-// Import component at start of file
-import { customImage } from "./quartz/util/customSocialImage.tsx"
-
-// In main config
-const config: QuartzConfig = {
- ...
- generateSocialImages: {
- ...
- imageStructure: customImage, // tells quartz to use your component when generating images
- },
-}
-```
-
-The following example will generate images that look as follows:
-
-| Light | Dark |
-| ------------------------------------------ | ----------------------------------------- |
-| ![[custom-social-image-preview-light.png]] | ![[custom-social-image-preview-dark.png]] |
-
-This example (and the default template) use colors and fonts from your theme specified in the quartz config. Fonts get passed in as a prop, where `fonts[0]` will contain the header font and `fonts[1]` will contain the body font (more info in the [[#fonts]] section).
-
-```tsx
-import { SatoriOptions } from "satori/wasm"
-import { GlobalConfiguration } from "../cfg"
-import { SocialImageOptions, UserOpts } from "./imageHelper"
-import { QuartzPluginData } from "../plugins/vfile"
-
-export const customImage: SocialImageOptions["imageStructure"] = (
- cfg: GlobalConfiguration,
- userOpts: UserOpts,
- title: string,
- description: string,
- fonts: SatoriOptions["fonts"],
- fileData: QuartzPluginData,
-) => {
- // How many characters are allowed before switching to smaller font
- const fontBreakPoint = 22
- const useSmallerFont = title.length > fontBreakPoint
-
- const { colorScheme } = userOpts
- return (
-
-
-
- {title}
-
-
- {description}
-
-
-
-
- )
-}
-```
-
-> [!example]- Advanced example
->
-> The following example includes a customized social image with a custom background and formatted date.
->
-> ```typescript title="custom-og.tsx"
-> export const og: SocialImageOptions["Component"] = (
-> cfg: GlobalConfiguration,
-> fileData: QuartzPluginData,
-> { colorScheme }: Options,
-> title: string,
-> description: string,
-> fonts: SatoriOptions["fonts"],
-> ) => {
-> let created: string | undefined
-> let reading: string | undefined
-> if (fileData.dates) {
-> created = formatDate(getDate(cfg, fileData)!, cfg.locale)
-> }
-> const { minutes, text: _timeTaken, words: _words } = readingTime(fileData.text!)
-> reading = i18n(cfg.locale).components.contentMeta.readingTime({
-> minutes: Math.ceil(minutes),
-> })
->
-> const Li = [created, reading]
->
-> return (
->
-> )
-> }
-> ```
diff --git a/docs/features/syntax highlighting.md b/docs/features/syntax highlighting.md
deleted file mode 100644
index bf9baaee..00000000
--- a/docs/features/syntax highlighting.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: Syntax Highlighting
-tags:
- - feature/transformer
----
-
-Syntax highlighting in Quartz is completely done at build-time. This means that Quartz only ships pre-calculated CSS to highlight the right words so there is no heavy client-side bundle that does the syntax highlighting.
-
-And, unlike some client-side highlighters, it has a full TextMate parser grammar instead of using Regexes, allowing for highly accurate code highlighting.
-
-In short, it generates HTML that looks exactly like your code in an editor like VS Code. Under the hood, it's powered by [Rehype Pretty Code](https://rehype-pretty-code.netlify.app/) which uses [Shiki](https://github.com/shikijs/shiki).
-
-> [!warning]
-> Syntax highlighting does have an impact on build speed if you have a lot of code snippets in your notes.
-
-## Formatting
-
-Text inside `backticks` on a line will be formatted like code.
-
-````
-```ts
-export function trimPathSuffix(fp: string): string {
- fp = clientSideSlug(fp)
- let [cleanPath, anchor] = fp.split("#", 2)
- anchor = anchor === undefined ? "" : "#" + anchor
-
- return cleanPath + anchor
-}
-```
-````
-
-```ts
-export function trimPathSuffix(fp: string): string {
- fp = clientSideSlug(fp)
- let [cleanPath, anchor] = fp.split("#", 2)
- anchor = anchor === undefined ? "" : "#" + anchor
-
- return cleanPath + anchor
-}
-```
-
-### Titles
-
-Add a file title to your code block, with text inside double quotes (`""`):
-
-````
-```js title="..."
-
-```
-````
-
-```ts title="quartz/path.ts"
-export function trimPathSuffix(fp: string): string {
- fp = clientSideSlug(fp)
- let [cleanPath, anchor] = fp.split("#", 2)
- anchor = anchor === undefined ? "" : "#" + anchor
-
- return cleanPath + anchor
-}
-```
-
-### Line highlighting
-
-Place a numeric range inside `{}`.
-
-````
-```js {1-3,4}
-
-```
-````
-
-```ts {2-3,6}
-export function trimPathSuffix(fp: string): string {
- fp = clientSideSlug(fp)
- let [cleanPath, anchor] = fp.split("#", 2)
- anchor = anchor === undefined ? "" : "#" + anchor
-
- return cleanPath + anchor
-}
-```
-
-### Word highlighting
-
-A series of characters, like a literal regex.
-
-````
-```js /useState/
-const [age, setAge] = useState(50);
-const [name, setName] = useState('Taylor');
-```
-````
-
-```js /useState/
-const [age, setAge] = useState(50)
-const [name, setName] = useState("Taylor")
-```
-
-### Inline Highlighting
-
-Append {:lang} to the end of inline code to highlight it like a regular code block.
-
-```
-This is an array `[1, 2, 3]{:js}` of numbers 1 through 3.
-```
-
-This is an array `[1, 2, 3]{:js}` of numbers 1 through 3.
-
-### Line numbers
-
-Syntax highlighting has line numbers configured automatically. If you want to start line numbers at a specific number, use `showLineNumbers{number}`:
-
-````
-```js showLineNumbers{number}
-
-```
-````
-
-```ts showLineNumbers{20}
-export function trimPathSuffix(fp: string): string {
- fp = clientSideSlug(fp)
- let [cleanPath, anchor] = fp.split("#", 2)
- anchor = anchor === undefined ? "" : "#" + anchor
-
- return cleanPath + anchor
-}
-```
-
-### Escaping code blocks
-
-You can format a codeblock inside of a codeblock by wrapping it with another level of backtick fences that has one more backtick than the previous fence.
-
-`````
-````
-```js /useState/
-const [age, setAge] = useState(50);
-const [name, setName] = useState('Taylor');
-```
-````
-`````
-
-## Customization
-
-Syntax highlighting is a functionality of the [[SyntaxHighlighting]] plugin. See the plugin page for customization options.
diff --git a/docs/features/table of contents.md b/docs/features/table of contents.md
deleted file mode 100644
index 4ecccc93..00000000
--- a/docs/features/table of contents.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "Table of Contents"
-tags:
- - component
- - feature/transformer
----
-
-Quartz can automatically generate a table of contents (TOC) from a list of headings on each page. It will also show you your current scrolling position on the page by highlighting headings you've scrolled through with a different color.
-
-You can hide the TOC on a page by adding `enableToc: false` to the frontmatter for that page.
-
-By default, the TOC shows all headings from H1 (`# Title`) to H3 (`### Title`) and is only displayed if there is more than one heading on the page.
-
-## Customization
-
-The table of contents is a functionality of the [[TableOfContents]] plugin. See the plugin page for more customization options.
-
-It also needs the `TableOfContents` component, which is displayed in the right sidebar by default. You can change this by customizing the [[layout]]. The TOC component can be configured with the `layout` parameter, which can either be `modern` (default) or `legacy`.
diff --git a/docs/features/upcoming features.md b/docs/features/upcoming features.md
deleted file mode 100644
index d45ebeda..00000000
--- a/docs/features/upcoming features.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-draft: true
----
-
-## misc backlog
-
-- static dead link detection
-- cursor chat extension
-- sidenotes? https://github.com/capnfabs/paperesque
-- direct match in search using double quotes
-- https://help.obsidian.md/Advanced+topics/Using+Obsidian+URI
-- Canvas
diff --git a/docs/features/wikilinks.md b/docs/features/wikilinks.md
deleted file mode 100644
index ad4f2d77..00000000
--- a/docs/features/wikilinks.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Wikilinks
----
-
-Wikilinks were pioneered by earlier internet wikis to make it easier to write links across pages without needing to write Markdown or HTML links each time.
-
-Quartz supports Wikilinks by default and these links are resolved by Quartz using the [[CrawlLinks]] plugin. See the [Obsidian Help page on Internal Links](https://help.obsidian.md/Linking+notes+and+files/Internal+links) for more information on Wikilink syntax.
-
-This is enabled as a part of [[Obsidian compatibility]] and can be configured and enabled/disabled from that plugin.
-
-## Syntax
-
-- `[[Path to file]]`: produces a link to `Path to file.md` (or `Path-to-file.md`) with the text `Path to file`
-- `[[Path to file | Here's the title override]]`: produces a link to `Path to file.md` with the text `Here's the title override`
-- `[[Path to file#Anchor]]`: produces a link to the anchor `Anchor` in the file `Path to file.md`
-- `[[Path to file#^block-ref]]`: produces a link to the specific block `block-ref` in the file `Path to file.md`
-
-### Embeds
-
-- `![[Path to image]]`: embeds an image into the page
-- `![[Path to image|100x145]]`: embeds an image into the page with dimensions 100px by 145px
-- `![[Path to file]]`: transclude an entire page
-- `![[Path to file#Anchor]]`: transclude everything under the header `Anchor`
-- `![[Path to file#^b15695]]`: transclude block with ID `^b15695`
diff --git a/docs/hosting.md b/docs/hosting.md
deleted file mode 100644
index 8b945a24..00000000
--- a/docs/hosting.md
+++ /dev/null
@@ -1,288 +0,0 @@
----
-title: Hosting
----
-
-Quartz effectively turns your Markdown files and other resources into a bundle of HTML, JS, and CSS files (a website!).
-
-However, if you'd like to publish your site to the world, you need a way to host it online. This guide will detail how to deploy with common hosting providers but any service that allows you to deploy static HTML should work as well.
-
-> [!warning]
-> The rest of this guide assumes that you've already created your own GitHub repository for Quartz. If you haven't already, [[setting up your GitHub repository|make sure you do so]].
-
-> [!hint]
-> Some Quartz features (like [[RSS Feed]] and sitemap generation) require `baseUrl` to be configured properly in your [[configuration]] to work properly. Make sure you set this before deploying!
-
-## Cloudflare Pages
-
-1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account.
-2. In Account Home, select **Workers & Pages** > **Create application** > **Pages** > **Connect to Git**.
-3. Select the new GitHub repository that you created and, in the **Set up builds and deployments** section, provide the following information:
-
-| Configuration option | Value |
-| ---------------------- | ------------------ |
-| Production branch | `v4` |
-| Framework preset | `None` |
-| Build command | `npx quartz build` |
-| Build output directory | `public` |
-
-Press "Save and deploy" and Cloudflare should have a deployed version of your site in about a minute. Then, every time you sync your Quartz changes to GitHub, your site should be updated.
-
-To add a custom domain, check out [Cloudflare's documentation](https://developers.cloudflare.com/pages/platform/custom-domains/).
-
-> [!warning]
-> Cloudflare Pages performs a shallow clone by default, so if you rely on `git` for timestamps, it is recommended that you add `git fetch --unshallow &&` to the beginning of the build command (e.g., `git fetch --unshallow && npx quartz build`).
-
-## GitHub Pages
-
-In your local Quartz, create a new file `quartz/.github/workflows/deploy.yml`.
-
-```yaml title="quartz/.github/workflows/deploy.yml"
-name: Deploy Quartz site to GitHub Pages
-
-on:
- push:
- branches:
- - v4
-
-permissions:
- contents: read
- pages: write
- id-token: write
-
-concurrency:
- group: "pages"
- cancel-in-progress: false
-
-jobs:
- build:
- runs-on: ubuntu-22.04
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0 # Fetch all history for git info
- - uses: actions/setup-node@v4
- with:
- node-version: 22
- - name: Install Dependencies
- run: npm ci
- - name: Build Quartz
- run: npx quartz build
- - name: Upload artifact
- uses: actions/upload-pages-artifact@v3
- with:
- path: public
-
- deploy:
- needs: build
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v4
-```
-
-Then:
-
-1. Head to "Settings" tab of your forked repository and in the sidebar, click "Pages". Under "Source", select "GitHub Actions".
-2. Commit these changes by doing `npx quartz sync`. This should deploy your site to `.github.io/`.
-
-> [!hint]
-> If you get an error about not being allowed to deploy to `github-pages` due to environment protection rules, make sure you remove any existing GitHub pages environments.
->
-> You can do this by going to your Settings page on your GitHub fork and going to the Environments tab and pressing the trash icon. The GitHub action will recreate the environment for you correctly the next time you sync your Quartz.
-
-> [!info]
-> Quartz generates files in the format of `file.html` instead of `file/index.html` which means the trailing slashes for _non-folder paths_ are dropped. As GitHub pages does not do this redirect, this may cause existing links to your site that use trailing slashes to break. If not breaking existing links is important to you (e.g. you are migrating from Quartz 3), consider using [[#Cloudflare Pages]].
-
-### Custom Domain
-
-Here's how to add a custom domain to your GitHub pages deployment.
-
-1. Head to the "Settings" tab of your forked repository.
-2. In the "Code and automation" section of the sidebar, click "Pages".
-3. Under "Custom Domain", type your custom domain and click "Save".
-4. This next step depends on whether you are using an apex domain (`example.com`) or a subdomain (`subdomain.example.com`).
- - If you are using an apex domain, navigate to your DNS provider and create an `A` record that points your apex domain to GitHub's name servers which have the following IP addresses:
- - `185.199.108.153`
- - `185.199.109.153`
- - `185.199.110.153`
- - `185.199.111.153`
- - If you are using a subdomain, navigate to your DNS provider and create a `CNAME` record that points your subdomain to the default domain for your site. For example, if you want to use the subdomain `quartz.example.com` for your user site, create a `CNAME` record that points `quartz.example.com` to `.github.io`.
-
-![[dns records.png]]_The above shows a screenshot of Google Domains configured for both `jzhao.xyz` (an apex domain) and `quartz.jzhao.xyz` (a subdomain)._
-
-See the [GitHub documentation](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain) for more detail about how to setup your own custom domain with GitHub Pages.
-
-> [!question] Why aren't my changes showing up?
-> There could be many different reasons why your changes aren't showing up but the most likely reason is that you forgot to push your changes to GitHub.
->
-> Make sure you save your changes to Git and sync it to GitHub by doing `npx quartz sync`. This will also make sure to pull any updates you may have made from other devices so you have them locally.
-
-## Vercel
-
-### Fix URLs
-
-Before deploying to Vercel, a `vercel.json` file is required at the root of the project directory. It needs to contain the following configuration so that URLs don't require the `.html` extension:
-
-```json title="vercel.json"
-{
- "cleanUrls": true
-}
-```
-
-### Deploy to Vercel
-
-1. Log in to the [Vercel Dashboard](https://vercel.com/dashboard) and click "Add New..." > Project
-2. Import the Git repository containing your Quartz project.
-3. Give the project a name (lowercase characters and hyphens only)
-4. Check that these configuration options are set:
-
-| Configuration option | Value |
-| ----------------------------------------- | ------------------ |
-| Framework Preset | `Other` |
-| Root Directory | `./` |
-| Build and Output Settings > Build Command | `npx quartz build` |
-
-5. Press Deploy. Once it's live, you'll have 2 `*.vercel.app` URLs to view the page.
-
-### Custom Domain
-
-> [!note]
-> If there is something already hosted on the domain, these steps will not work without replacing the previous content. As a workaround, you could use Next.js rewrites or use the next section to create a subdomain.
-
-1. Update the `baseUrl` in `quartz.config.js` if necessary.
-2. Go to the [Domains - Dashboard](https://vercel.com/dashboard/domains) page in Vercel.
-3. Connect the domain to Vercel
-4. Press "Add" to connect a custom domain to Vercel.
-5. Select your Quartz repository and press Continue.
-6. Enter the domain you want to connect it to.
-7. Follow the instructions to update your DNS records until you see "Valid Configuration"
-
-### Use a Subdomain
-
-Using `docs.example.com` is an example of a subdomain. They're a simple way of connecting multiple deployments to one domain.
-
-1. Update the `baseUrl` in `quartz.config.js` if necessary.
-2. Ensure your domain has been added to the [Domains - Dashboard](https://vercel.com/dashboard/domains) page in Vercel.
-3. Go to the [Vercel Dashboard](https://vercel.com/dashboard) and select your Quartz project.
-4. Go to the Settings tab and then click Domains in the sidebar
-5. Enter your subdomain into the field and press Add
-
-## Netlify
-
-1. Log in to the [Netlify dashboard](https://app.netlify.com/) and click "Add new site".
-2. Select your Git provider and repository containing your Quartz project.
-3. Under "Build command", enter `npx quartz build`.
-4. Under "Publish directory", enter `public`.
-5. Press Deploy. Once it's live, you'll have a `*.netlify.app` URL to view the page.
-6. To add a custom domain, check "Domain management" in the left sidebar, just like with Vercel.
-
-## GitLab Pages
-
-In your local Quartz, create a new file `.gitlab-ci.yml`.
-
-```yaml title=".gitlab-ci.yml"
-stages:
- - build
- - deploy
-
-image: node:20
-cache: # Cache modules in between jobs
- key: $CI_COMMIT_REF_SLUG
- paths:
- - .npm/
-
-build:
- stage: build
- rules:
- - if: '$CI_COMMIT_REF_NAME == "v4"'
- before_script:
- - hash -r
- - npm ci --cache .npm --prefer-offline
- script:
- - npx quartz build
- artifacts:
- paths:
- - public
- tags:
- - gitlab-org-docker
-
-pages:
- stage: deploy
- rules:
- - if: '$CI_COMMIT_REF_NAME == "v4"'
- script:
- - echo "Deploying to GitLab Pages..."
- artifacts:
- paths:
- - public
-```
-
-When `.gitlab-ci.yaml` is committed, GitLab will build and deploy the website as a GitLab Page. You can find the url under `Deploy > Pages` in the sidebar.
-
-By default, the page is private and only visible when logged in to a GitLab account with access to the repository but can be opened in the settings under `Deploy` -> `Pages`.
-
-## Self-Hosting
-
-Copy the `public` directory to your web server and configure it to serve the files. You can use any web server to host your site. Since Quartz generates links that do not include the `.html` extension, you need to let your web server know how to deal with it.
-
-### Using Nginx
-
-Here's an example of how to do this with Nginx:
-
-```nginx title="nginx.conf"
-server {
- listen 80;
- server_name example.com;
- root /path/to/quartz/public;
- index index.html;
- error_page 404 /404.html;
-
- location / {
- try_files $uri $uri.html $uri/ =404;
- }
-}
-```
-
-### Using Apache
-
-Here's an example of how to do this with Apache:
-
-```apache title=".htaccess"
-RewriteEngine On
-
-ErrorDocument 404 /404.html
-
-# Rewrite rule for .html extension removal (with directory check)
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteCond %{REQUEST_FILENAME} !-d
-RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.html -f
-RewriteRule ^(.*)$ $1.html [L]
-
-# Handle directory requests explicitly
-RewriteCond %{REQUEST_FILENAME} -d
-RewriteRule ^(.*)/$ $1/index.html [L]
-```
-
-Don't forget to activate brotli / gzip compression.
-
-### Using Caddy
-
-Here's and example of how to do this with Caddy:
-
-```caddy title="Caddyfile"
-example.com {
- root * /path/to/quartz/public
- try_files {path} {path}.html {path}/ =404
- file_server
- encode gzip
-
- handle_errors {
- rewrite * /{err.status_code}.html
- file_server
- }
-}
-```
diff --git a/docs/images/custom-social-image-preview-dark.png b/docs/images/custom-social-image-preview-dark.png
deleted file mode 100644
index 60c4e85c..00000000
Binary files a/docs/images/custom-social-image-preview-dark.png and /dev/null differ
diff --git a/docs/images/custom-social-image-preview-light.png b/docs/images/custom-social-image-preview-light.png
deleted file mode 100644
index 046a4070..00000000
Binary files a/docs/images/custom-social-image-preview-light.png and /dev/null differ
diff --git a/docs/images/dns records.png b/docs/images/dns records.png
deleted file mode 100644
index bf9f854b..00000000
Binary files a/docs/images/dns records.png and /dev/null differ
diff --git a/docs/images/giscus-discussion.png b/docs/images/giscus-discussion.png
deleted file mode 100644
index 939af624..00000000
Binary files a/docs/images/giscus-discussion.png and /dev/null differ
diff --git a/docs/images/giscus-example.png b/docs/images/giscus-example.png
deleted file mode 100644
index f59f52ba..00000000
Binary files a/docs/images/giscus-example.png and /dev/null differ
diff --git a/docs/images/giscus-repo.png b/docs/images/giscus-repo.png
deleted file mode 100644
index bfabc569..00000000
Binary files a/docs/images/giscus-repo.png and /dev/null differ
diff --git a/docs/images/giscus-results.png b/docs/images/giscus-results.png
deleted file mode 100644
index b25c7515..00000000
Binary files a/docs/images/giscus-results.png and /dev/null differ
diff --git a/docs/images/github-init-repo-options.png b/docs/images/github-init-repo-options.png
deleted file mode 100644
index dd889315..00000000
Binary files a/docs/images/github-init-repo-options.png and /dev/null differ
diff --git a/docs/images/github-quick-setup.png b/docs/images/github-quick-setup.png
deleted file mode 100644
index 5be333f1..00000000
Binary files a/docs/images/github-quick-setup.png and /dev/null differ
diff --git a/docs/images/quartz transform pipeline.png b/docs/images/quartz transform pipeline.png
deleted file mode 100644
index 657f0a3a..00000000
Binary files a/docs/images/quartz transform pipeline.png and /dev/null differ
diff --git a/docs/images/quartz-layout-desktop.png b/docs/images/quartz-layout-desktop.png
deleted file mode 100644
index 461d7916..00000000
Binary files a/docs/images/quartz-layout-desktop.png and /dev/null differ
diff --git a/docs/images/quartz-layout-mobile.png b/docs/images/quartz-layout-mobile.png
deleted file mode 100644
index ad6c09e1..00000000
Binary files a/docs/images/quartz-layout-mobile.png and /dev/null differ
diff --git a/docs/images/quartz-layout-tablet.png b/docs/images/quartz-layout-tablet.png
deleted file mode 100644
index 6349f297..00000000
Binary files a/docs/images/quartz-layout-tablet.png and /dev/null differ
diff --git a/docs/images/social-image-preview-dark.png b/docs/images/social-image-preview-dark.png
deleted file mode 100644
index c1254516..00000000
Binary files a/docs/images/social-image-preview-dark.png and /dev/null differ
diff --git a/docs/images/social-image-preview-light.png b/docs/images/social-image-preview-light.png
deleted file mode 100644
index ca0bdbc7..00000000
Binary files a/docs/images/social-image-preview-light.png and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index e41c1711..00000000
--- a/docs/index.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-title: Welcome to Quartz 4
----
-
-Quartz is a fast, batteries-included static-site generator that transforms Markdown content into fully functional websites. Thousands of students, developers, and teachers are [[showcase|already using Quartz]] to publish personal notes, websites, and [digital gardens](https://jzhao.xyz/posts/networked-thought) to the web.
-
-## 🪴 Get Started
-
-Quartz requires **at least [Node](https://nodejs.org/) v20** and `npm` v9.3.1 to function correctly. Ensure you have this installed on your machine before continuing.
-
-Then, in your terminal of choice, enter the following commands line by line:
-
-```shell
-git clone https://github.com/jackyzha0/quartz.git
-cd quartz
-npm i
-npx quartz create
-```
-
-This will guide you through initializing your Quartz with content. Once you've done so, see how to:
-
-1. [[authoring content|Writing content]] in Quartz
-2. [[configuration|Configure]] Quartz's behaviour
-3. Change Quartz's [[layout]]
-4. [[build|Build and preview]] Quartz
-5. Sync your changes with [[setting up your GitHub repository|GitHub]]
-6. [[hosting|Host]] Quartz online
-
-If you prefer instructions in a video format you can try following Nicole van der Hoeven's
-[video guide on how to set up Quartz!](https://www.youtube.com/watch?v=6s6DT1yN4dw&t=227s)
-
-## 🔧 Features
-
-- [[Obsidian compatibility]], [[full-text search]], [[graph view]], note transclusion, [[wikilinks]], [[backlinks]], [[features/Latex|Latex]], [[syntax highlighting]], [[popover previews]], [[Docker Support]], [[i18n|internationalization]], [[comments]] and [many more](./features) right out of the box
-- Hot-reload for both configuration and content
-- Simple JSX layouts and [[creating components|page components]]
-- [[SPA Routing|Ridiculously fast page loads]] and tiny bundle sizes
-- Fully-customizable parsing, filtering, and page generation through [[making plugins|plugins]]
-
-For a comprehensive list of features, visit the [features page](/features). You can read more about the _why_ behind these features on the [[philosophy]] page and a technical overview on the [[architecture]] page.
-
-### 🚧 Troubleshooting + Updating
-
-Having trouble with Quartz? Try searching for your issue using the search feature. If you haven't already, [[upgrading|upgrade]] to the newest version of Quartz to see if this fixes your issue.
-
-If you're still having trouble, feel free to [submit an issue](https://github.com/jackyzha0/quartz/issues) if you feel you found a bug or ask for help in our [Discord Community](https://discord.gg/cRFFHYye7t).
diff --git a/docs/layout.md b/docs/layout.md
deleted file mode 100644
index d8427c4c..00000000
--- a/docs/layout.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: Layout
----
-
-Certain emitters may also output [HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) files. To enable easy customization, these emitters allow you to fully rearrange the layout of the page. The default page layouts can be found in `quartz.layout.ts`.
-
-Each page is composed of multiple different sections which contain `QuartzComponents`. The following code snippet lists all of the valid sections that you can add components to:
-
-```typescript title="quartz/cfg.ts"
-export interface FullPageLayout {
- head: QuartzComponent // single component
- header: QuartzComponent[] // laid out horizontally
- beforeBody: QuartzComponent[] // laid out vertically
- pageBody: QuartzComponent // single component
- afterBody: QuartzComponent[] // laid out vertically
- left: QuartzComponent[] // vertical on desktop and tablet, horizontal on mobile
- right: QuartzComponent[] // vertical on desktop, horizontal on tablet and mobile
- footer: QuartzComponent // single component
-}
-```
-
-These correspond to following parts of the page:
-
-| Layout | Preview |
-| ------------------------------- | ----------------------------------- |
-| Desktop (width > 1200px) | ![[quartz-layout-desktop.png\|800]] |
-| Tablet (800px < width < 1200px) | ![[quartz-layout-tablet.png\|800]] |
-| Mobile (width < 800px) | ![[quartz-layout-mobile.png\|800]] |
-
-> [!note]
-> There are two additional layout fields that are _not_ shown in the above diagram.
->
-> 1. `head` is a single component that renders the `` [tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head) in the HTML. This doesn't appear visually on the page and is only is responsible for metadata about the document like the tab title, scripts, and styles.
-> 2. `header` is a set of components that are laid out horizontally and appears _before_ the `beforeBody` section. This enables you to replicate the old Quartz 3 header bar where the title, search bar, and dark mode toggle. By default, Quartz 4 doesn't place any components in the `header`.
-
-Quartz **components**, like plugins, can take in additional properties as configuration options. If you're familiar with React terminology, you can think of them as Higher-order Components.
-
-See [a list of all the components](component.md) for all available components along with their configuration options. You can also checkout the guide on [[creating components]] if you're interested in further customizing the behaviour of Quartz.
-
-### Layout breakpoints
-
-Quartz has different layouts depending on the width the screen viewing the website.
-
-The breakpoints for layouts can be configured in `variables.scss`.
-
-- `mobile`: screen width below this size will use mobile layout.
-- `desktop`: screen width above this size will use desktop layout.
-- Screen width between `mobile` and `desktop` width will use the tablet layout.
-
-```scss
-$breakpoints: (
- mobile: 800px,
- desktop: 1200px,
-);
-```
-
-### Style
-
-Most meaningful style changes like colour scheme and font can be done simply through the [[configuration#General Configuration|general configuration]] options. However, if you'd like to make more involved style changes, you can do this by writing your own styles. Quartz 4, like Quartz 3, uses [Sass](https://sass-lang.com/guide/) for styling.
-
-You can see the base style sheet in `quartz/styles/base.scss` and write your own in `quartz/styles/custom.scss`.
-
-> [!note]
-> Some components may provide their own styling as well! For example, `quartz/components/Darkmode.tsx` imports styles from `quartz/components/styles/darkmode.scss`. If you'd like to customize styling for a specific component, double check the component definition to see how its styles are defined.
diff --git a/docs/migrating from Quartz 3.md b/docs/migrating from Quartz 3.md
deleted file mode 100644
index 2fdc7315..00000000
--- a/docs/migrating from Quartz 3.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: "Migrating from Quartz 3"
----
-
-As you already have Quartz locally, you don't need to fork or clone it again. Simply just checkout the alpha branch, install the dependencies, and import your old vault.
-
-```bash
-git fetch
-git checkout v4
-git pull upstream v4
-npm i
-npx quartz create
-```
-
-If you get an error like `fatal: 'upstream' does not appear to be a git repository`, make sure you add `upstream` as a remote origin:
-
-```shell
-git remote add upstream https://github.com/jackyzha0/quartz.git
-```
-
-When running `npx quartz create`, you will be prompted as to how to initialize your content folder. Here, you can choose to import or link your previous content folder and Quartz should work just as you expect it to.
-
-> [!note]
-> If the existing content folder you'd like to use is at the _same_ path on a different branch, clone the repo again somewhere at a _different_ path in order to use it.
-
-## Key changes
-
-1. **Removing Hugo and `hugo-obsidian`**: Hugo worked well for earlier versions of Quartz but it also made it hard for people outside of the Golang and Hugo communities to fully understand what Quartz was doing under the hood and be able to properly customize it to their needs. Quartz 4 now uses a Node-based static-site generation process which should lead to a much more helpful error messages and an overall smoother user experience.
-2. **Full-hot reload**: The many rough edges of how `hugo-obsidian` integrated with Hugo meant that watch mode didn't re-trigger `hugo-obsidian` to update the content index. This lead to a lot of weird cases where the watch mode output wasn't accurate. Quartz 4 now uses a cohesive parse, filter, and emit pipeline which gets run on every change so hot-reloads are always accurate.
-3. **Replacing Go template syntax with JSX**: Quartz 3 used [Go templates](https://pkg.go.dev/text/template) to create layouts for pages. However, the syntax isn't great for doing any sort of complex rendering (like [text processing](https://github.com/jackyzha0/quartz/blob/hugo/layouts/partials/textprocessing.html)) and it got very difficult to make any meaningful layout changes to Quartz 3. Quartz 4 uses an extension of JavaScript syntax called JSX which allows you to write layout code that looks like HTML in JavaScript which is significantly easier to understand and maintain.
-4. **A new extensible [[configuration]] and [[configuration#Plugins|plugin]] system**: Quartz 3 was hard to configure without technical knowledge of how Hugo's partials worked. Extensions were even hard to make. Quartz 4's configuration and plugin system is designed to be extended by users while making updating to new versions of Quartz easy.
-
-## Things to update
-
-- You will need to update your deploy scripts. See the [[hosting]] guide for more details.
-- Ensure that your default branch on GitHub is updated from `hugo` to `v4`.
-- [[folder and tag listings|Folder and tag listings]] have also changed.
- - Folder descriptions should go under `content//index.md` where `` is the name of the folder.
- - Tag descriptions should go under `content/tags/.md` where `` is the name of the tag.
-- Some HTML layout may not be the same between Quartz 3 and Quartz 4. If you depended on a particular HTML hierarchy or class names, you may need to update your custom CSS to reflect these changes.
-- If you customized the layout of Quartz 3, you may need to translate these changes from Go templates back to JSX as Quartz 4 no longer uses Hugo. For components, check out the guide on [[creating components]] for more details on this.
diff --git a/docs/philosophy.md b/docs/philosophy.md
deleted file mode 100644
index af5510aa..00000000
--- a/docs/philosophy.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Philosophy of Quartz
----
-
-## A garden should be a true hypertext
-
-> The garden is the web as topology. Every walk through the garden creates new paths, new meanings, and when we add things to the garden we add them in a way that allows many future, unpredicted relationships.
->
-> _(The Garden and the Stream)_
-
-The problem with the file cabinet is that it focuses on efficiency of access and interoperability rather than generativity and creativity. Thinking is not linear, nor is it hierarchical. In fact, not many things are linear or hierarchical at all. Then why is it that most tools and thinking strategies assume a nice chronological or hierarchical order for my thought processes?
-
-The ideal tool for thought for me would embrace the messiness of my mind, and organically help insights emerge from chaos instead of forcing an artificial order. A rhizomatic, not arboresecent, form of note taking.
-
-My goal with a digital garden is not purely as an organizing system and information store (though it works nicely for that). I want my digital garden to be a playground for new ways ideas can connect together. As a result, existing formal organizing systems like Zettelkasten or the hierarchical folder structures of Notion don’t work well for me. There is way too much upfront friction that by the time I’ve thought about how to organize my thought into folders categories, I’ve lost it.
-
-Quartz embraces the inherent rhizomatic and web-like nature of our thinking and tries to encourage note-taking in a similar form.
-
----
-
-## A garden should be shared
-
-The goal of digital gardening should be to tap into your network’s collective intelligence to create constructive feedback loops. If done well, I have a shareable representation of my thoughts that I can send out into the world and people can respond. Even for my most half-baked thoughts, this helps me create a feedback cycle to strengthen and fully flesh out that idea.
-
-Quartz is designed first and foremost as a tool for publishing [digital gardens](https://jzhao.xyz/posts/networked-thought) to the web. To me, digital gardening is not just passive knowledge collection. It’s a form of expression and sharing.
-
-> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.”
-> — Richard Hamming
-
-**The goal of Quartz is to make sharing your digital garden free and simple.**
-
----
-
-## A garden should be your own
-
-At its core, Quartz is designed to be easy to use enough for non-technical people to get going but also powerful enough that senior developers can tweak it to work how they'd like it to work.
-
-1. If you like the default configuration of Quartz and just want to change the content, the only thing that you need to change is the contents of the `content` folder.
-2. If you'd like to make basic configuration tweaks but don't want to edit source code, one can tweak the plugins and components in `quartz.config.ts` and `quartz.layout.ts` in a guided manner to their liking.
-3. If you'd like to tweak the actual source code of the underlying plugins, components, or even build process, Quartz purposefully ships its full source code to the end user to allow customization at this level too.
-
-Most software either confines you to either
-
-1. Makes it easy to tweak content but not the presentation
-2. Gives you too many knobs to tune the presentation without good opinionated defaults
-
-**Quartz should feel powerful but ultimately be an intuitive tool fully within your control.** It should be a piece of [agentic software](https://jzhao.xyz/posts/agentic-computing). Ultimately, it should have the right affordances to nudge users towards good defaults but never dictate what the 'correct' way of using it is.
diff --git a/docs/plugins/AliasRedirects.md b/docs/plugins/AliasRedirects.md
deleted file mode 100644
index 8c036537..00000000
--- a/docs/plugins/AliasRedirects.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: AliasRedirects
-tags:
- - plugin/emitter
----
-
-This plugin emits HTML redirect pages for aliases and permalinks defined in the frontmatter of content files.
-
-For example, A `foo.md` has the following frontmatter
-
-```md title="foo.md"
----
-title: "Foo"
-alias:
- - "bar"
----
-```
-
-The target `host.me/bar` will be redirected to `host.me/foo`
-
-Note that these are permanent redirect.
-
-The emitter supports the following aliases:
-
-- `aliases`
-- `alias`
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.AliasRedirects()`.
-- Source: [`quartz/plugins/emitters/aliases.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/aliases.ts).
diff --git a/docs/plugins/Assets.md b/docs/plugins/Assets.md
deleted file mode 100644
index 47589b2c..00000000
--- a/docs/plugins/Assets.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Assets
-tags:
- - plugin/emitter
----
-
-This plugin emits all non-Markdown static assets in your content folder (like images, videos, HTML, etc). The plugin respects the `ignorePatterns` in the global [[configuration]].
-
-Note that all static assets will then be accessible through its path on your generated site, i.e: `host.me/path/to/static.pdf`
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.Assets()`.
-- Source: [`quartz/plugins/emitters/assets.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/assets.ts).
diff --git a/docs/plugins/CNAME.md b/docs/plugins/CNAME.md
deleted file mode 100644
index bc12b5ac..00000000
--- a/docs/plugins/CNAME.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: CNAME
-tags:
- - plugin/emitter
----
-
-This plugin emits a `CNAME` record that points your subdomain to the default domain of your site.
-
-If you want to use a custom domain name like `quartz.example.com` for the site, then this is needed.
-
-See [[hosting|Hosting]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.CNAME()`.
-- Source: [`quartz/plugins/emitters/cname.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/cname.ts).
diff --git a/docs/plugins/ComponentResources.md b/docs/plugins/ComponentResources.md
deleted file mode 100644
index 6e8c82ef..00000000
--- a/docs/plugins/ComponentResources.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: ComponentResources
-tags:
- - plugin/emitter
----
-
-This plugin manages and emits the static resources required for the Quartz framework. This includes CSS stylesheets and JavaScript scripts that enhance the functionality and aesthetics of the generated site. See also the `cdnCaching` option in the `theme` section of the [[configuration]].
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.ComponentResources()`.
-- Source: [`quartz/plugins/emitters/componentResources.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/componentResources.ts).
diff --git a/docs/plugins/ContentIndex.md b/docs/plugins/ContentIndex.md
deleted file mode 100644
index eb7265d4..00000000
--- a/docs/plugins/ContentIndex.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: ContentIndex
-tags:
- - plugin/emitter
----
-
-This plugin emits both RSS and an XML sitemap for your site. The [[RSS Feed]] allows users to subscribe to content on your site and the sitemap allows search engines to better index your site. The plugin also emits a `contentIndex.json` file which is used by dynamic frontend components like search and graph.
-
-This plugin emits a comprehensive index of the site's content, generating additional resources such as a sitemap, an RSS feed, and a
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `enableSiteMap`: If `true` (default), generates a sitemap XML file (`sitemap.xml`) listing all site URLs for search engines in content discovery.
-- `enableRSS`: If `true` (default), produces an RSS feed (`index.xml`) with recent content updates.
-- `rssLimit`: Defines the maximum number of entries to include in the RSS feed, helping to focus on the most recent or relevant content. Defaults to `10`.
-- `rssFullHtml`: If `true`, the RSS feed includes full HTML content. Otherwise it includes just summaries.
-- `includeEmptyFiles`: If `true` (default), content files with no body text are included in the generated index and resources.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.ContentIndex()`.
-- Source: [`quartz/plugins/emitters/contentIndex.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/contentIndex.ts).
diff --git a/docs/plugins/ContentPage.md b/docs/plugins/ContentPage.md
deleted file mode 100644
index bd33e4ee..00000000
--- a/docs/plugins/ContentPage.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: ContentPage
-tags:
- - plugin/emitter
----
-
-This plugin is a core component of the Quartz framework. It generates the HTML pages for each piece of Markdown content. It emits the full-page [[layout]], including headers, footers, and body content, among others.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.ContentPage()`.
-- Source: [`quartz/plugins/emitters/contentPage.tsx`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/contentPage.tsx).
diff --git a/docs/plugins/CrawlLinks.md b/docs/plugins/CrawlLinks.md
deleted file mode 100644
index 47b7bdd7..00000000
--- a/docs/plugins/CrawlLinks.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: CrawlLinks
-tags:
- - plugin/transformer
----
-
-This plugin parses links and processes them to point to the right places. It is also needed for embedded links (like images). See [[Obsidian compatibility]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `markdownLinkResolution`: Sets the strategy for resolving Markdown paths, can be `"absolute"` (default), `"relative"` or `"shortest"`. You should use the same setting here as in [[Obsidian compatibility|Obsidian]].
- - `absolute`: Path relative to the root of the content folder.
- - `relative`: Path relative to the file you are linking from.
- - `shortest`: Name of the file. If this isn't enough to identify the file, use the full absolute path.
-- `prettyLinks`: If `true` (default), simplifies links by removing folder paths, making them more user friendly (e.g. `folder/deeply/nested/note` becomes `note`).
-- `openLinksInNewTab`: If `true`, configures external links to open in a new tab. Defaults to `false`.
-- `lazyLoad`: If `true`, adds lazy loading to resource elements (`img`, `video`, etc.) to improve page load performance. Defaults to `false`.
-- `externalLinkIcon`: Adds an icon next to external links when `true` (default) to visually distinguishing them from internal links.
-
-> [!warning]
-> Removing this plugin is _not_ recommended and will likely break the page.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.CrawlLinks()`.
-- Source: [`quartz/plugins/transformers/links.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/links.ts).
diff --git a/docs/plugins/CreatedModifiedDate.md b/docs/plugins/CreatedModifiedDate.md
deleted file mode 100644
index f4134c47..00000000
--- a/docs/plugins/CreatedModifiedDate.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: "CreatedModifiedDate"
-tags:
- - plugin/transformer
----
-
-This plugin determines the created, modified, and published dates for a document using three potential data sources: frontmatter metadata, Git history, and the filesystem. See [[authoring content#Syntax]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `priority`: The data sources to consult for date information. Highest priority first. Possible values are `"frontmatter"`, `"git"`, and `"filesystem"`. Defaults to `["frontmatter", "git", "filesystem"]`.
-
-> [!warning]
-> If you rely on `git` for dates, make sure `defaultDateType` is set to `modified` in `quartz.config.ts`.
->
-> Depending on how you [[hosting|host]] your Quartz, the `filesystem` dates of your local files may not match the final dates. In these cases, it may be better to use `git` or `frontmatter` to guarantee correct dates.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.CreatedModifiedDate()`.
-- Source: [`quartz/plugins/transformers/lastmod.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/lastmod.ts).
diff --git a/docs/plugins/Description.md b/docs/plugins/Description.md
deleted file mode 100644
index af1c8b7c..00000000
--- a/docs/plugins/Description.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Description
-tags:
- - plugin/transformer
----
-
-This plugin generates descriptions that are used as metadata for the HTML `head`, the [[RSS Feed]] and in [[folder and tag listings]] if there is no main body content, the description is used as the text between the title and the listing.
-
-If the frontmatter contains a `description` property, it is used (see [[authoring content#Syntax]]). Otherwise, the plugin will do its best to use the first few sentences of the content to reach the target description length.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `descriptionLength`: the maximum length of the generated description. Default is 150 characters. The cut off happens after the first _sentence_ that ends after the given length.
-- `replaceExternalLinks`: If `true` (default), replace external links with their domain and path in the description (e.g. `https://domain.tld/some_page/another_page?query=hello&target=world` is replaced with `domain.tld/some_page/another_page`).
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.Description()`.
-- Source: [`quartz/plugins/transformers/description.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/description.ts).
diff --git a/docs/plugins/ExplicitPublish.md b/docs/plugins/ExplicitPublish.md
deleted file mode 100644
index 2fd929b9..00000000
--- a/docs/plugins/ExplicitPublish.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: ExplicitPublish
-tags:
- - plugin/filter
----
-
-This plugin filters content based on an explicit `publish` flag in the frontmatter, allowing only content that is explicitly marked for publication to pass through. It's the opt-in version of [[RemoveDrafts]]. See [[private pages]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Filter
-- Function name: `Plugin.ExplicitPublish()`.
-- Source: [`quartz/plugins/filters/explicit.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/filters/explicit.ts).
diff --git a/docs/plugins/FolderPage.md b/docs/plugins/FolderPage.md
deleted file mode 100644
index 45cfa157..00000000
--- a/docs/plugins/FolderPage.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: FolderPage
-tags:
- - plugin/emitter
----
-
-This plugin generates index pages for folders, creating a listing page for each folder that contains multiple content files. See [[folder and tag listings]] for more information.
-
-Example: [[advanced/|Advanced]]
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-The pages are displayed using the `defaultListPageLayout` in `quartz.layouts.ts`. For the content, the `FolderContent` component is used. If you want to modify the layout, you must edit it directly (`quartz/components/pages/FolderContent.tsx`).
-
-This plugin accepts the following configuration options:
-
-- `sort`: A function of type `(f1: QuartzPluginData, f2: QuartzPluginData) => number{:ts}` used to sort entries. Defaults to sorting by date and tie-breaking on lexographical order.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.FolderPage()`.
-- Source: [`quartz/plugins/emitters/folderPage.tsx`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/folderPage.tsx).
diff --git a/docs/plugins/Frontmatter.md b/docs/plugins/Frontmatter.md
deleted file mode 100644
index 879d087d..00000000
--- a/docs/plugins/Frontmatter.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: "Frontmatter"
-tags:
- - plugin/transformer
----
-
-This plugin parses the frontmatter of the page using the [gray-matter](https://github.com/jonschlinkert/gray-matter) library. See [[authoring content#Syntax]], [[Obsidian compatibility]] and [[OxHugo compatibility]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `delimiters`: the delimiters to use for the frontmatter. Can have one value (e.g. `"---"`) or separate values for opening and closing delimiters (e.g. `["---", "~~~"]`). Defaults to `"---"`.
-- `language`: the language to use for parsing the frontmatter. Can be `yaml` (default) or `toml`.
-
-> [!warning]
-> This plugin must not be removed, otherwise Quartz will break.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.Frontmatter()`.
-- Source: [`quartz/plugins/transformers/frontmatter.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/frontmatter.ts).
diff --git a/docs/plugins/GitHubFlavoredMarkdown.md b/docs/plugins/GitHubFlavoredMarkdown.md
deleted file mode 100644
index 41fab6b2..00000000
--- a/docs/plugins/GitHubFlavoredMarkdown.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: GitHubFlavoredMarkdown
-tags:
- - plugin/transformer
----
-
-This plugin enhances Markdown processing to support GitHub Flavored Markdown (GFM) which adds features like autolink literals, footnotes, strikethrough, tables and tasklists.
-
-In addition, this plugin adds optional features for typographic refinement (such as converting straight quotes to curly quotes, dashes to en-dashes/em-dashes, and ellipses) and automatic heading links as a symbol that appears next to the heading on hover.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `enableSmartyPants`: When true, enables typographic enhancements. Default is true.
-- `linkHeadings`: When true, automatically adds links to headings. Default is true.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.GitHubFlavoredMarkdown()`.
-- Source: [`quartz/plugins/transformers/gfm.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/gfm.ts).
diff --git a/docs/plugins/HardLineBreaks.md b/docs/plugins/HardLineBreaks.md
deleted file mode 100644
index e24f7e12..00000000
--- a/docs/plugins/HardLineBreaks.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: HardLineBreaks
-tags:
- - plugin/transformer
----
-
-This plugin automatically converts single line breaks in Markdown text into hard line breaks in the HTML output. This plugin is not enabled by default as this doesn't follow the semantics of actual Markdown but you may enable it if you'd like parity with [[Obsidian compatibility|Obsidian]].
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.HardLineBreaks()`.
-- Source: [`quartz/plugins/transformers/linebreaks.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/linebreaks.ts).
diff --git a/docs/plugins/Latex.md b/docs/plugins/Latex.md
deleted file mode 100644
index 9ef37ff5..00000000
--- a/docs/plugins/Latex.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: "Latex"
-tags:
- - plugin/transformer
----
-
-This plugin adds LaTeX support to Quartz. See [[features/Latex|Latex]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `renderEngine`: the engine to use to render LaTeX equations. Can be `"katex"` for [KaTeX](https://katex.org/), `"mathjax"` for [MathJax](https://www.mathjax.org/) [SVG rendering](https://docs.mathjax.org/en/latest/output/svg.html), or `"typst"` for [Typst](https://typst.app/) (a new way to compose LaTeX equation). Defaults to KaTeX.
-- `customMacros`: custom macros for all LaTeX blocks. It takes the form of a key-value pair where the key is a new command name and the value is the expansion of the macro. For example: `{"\\R": "\\mathbb{R}"}`
-
-> [!note] Typst support
->
-> Currently, typst doesn't support inline-math
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.Latex()`.
-- Source: [`quartz/plugins/transformers/latex.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/latex.ts).
diff --git a/docs/plugins/NotFoundPage.md b/docs/plugins/NotFoundPage.md
deleted file mode 100644
index b6799432..00000000
--- a/docs/plugins/NotFoundPage.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: NotFoundPage
-tags:
- - plugin/emitter
----
-
-This plugin emits a 404 (Not Found) page for broken or non-existent URLs.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.NotFoundPage()`.
-- Source: [`quartz/plugins/emitters/404.tsx`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/404.tsx).
diff --git a/docs/plugins/ObsidianFlavoredMarkdown.md b/docs/plugins/ObsidianFlavoredMarkdown.md
deleted file mode 100644
index 30d1f717..00000000
--- a/docs/plugins/ObsidianFlavoredMarkdown.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: ObsidianFlavoredMarkdown
-tags:
- - plugin/transformer
----
-
-This plugin provides support for [[Obsidian compatibility]].
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `comments`: If `true` (default), enables parsing of `%%` style Obsidian comment blocks.
-- `highlight`: If `true` (default), enables parsing of `==` style highlights within content.
-- `wikilinks`:If `true` (default), turns [[wikilinks]] into regular links.
-- `callouts`: If `true` (default), adds support for [[callouts|callout]] blocks for emphasizing content.
-- `mermaid`: If `true` (default), enables [[Mermaid diagrams|Mermaid diagram]] rendering within Markdown files.
-- `parseTags`: If `true` (default), parses and links tags within the content.
-- `parseArrows`: If `true` (default), transforms arrow symbols into their HTML character equivalents.
-- `parseBlockReferences`: If `true` (default), handles block references, linking to specific content blocks.
-- `enableInHtmlEmbed`: If `true`, allows embedding of content directly within HTML. Defaults to `false`.
-- `enableYouTubeEmbed`: If `true` (default), enables the embedding of YouTube videos and playlists using external image Markdown syntax.
-- `enableVideoEmbed`: If `true` (default), enables the embedding of video files.
-- `enableCheckbox`: If `true`, adds support for interactive checkboxes in content. Defaults to `false`.
-
-> [!warning]
-> Don't remove this plugin if you're using [[Obsidian compatibility|Obsidian]] to author the content!
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.ObsidianFlavoredMarkdown()`.
-- Source: [`quartz/plugins/transformers/toc.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/toc.ts).
diff --git a/docs/plugins/OxHugoFlavoredMarkdown.md b/docs/plugins/OxHugoFlavoredMarkdown.md
deleted file mode 100644
index 5c2afeea..00000000
--- a/docs/plugins/OxHugoFlavoredMarkdown.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: OxHugoFlavoredMarkdown
-tags:
- - plugin/transformer
----
-
-This plugin provides support for [ox-hugo](https://github.com/kaushalmodi/ox-hugo) compatibility. See [[OxHugo compatibility]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `wikilinks`: If `true` (default), converts Hugo `{{ relref }}` shortcodes to Quartz [[wikilinks]].
-- `removePredefinedAnchor`: If `true` (default), strips predefined anchors from headings.
-- `removeHugoShortcode`: If `true` (default), removes Hugo shortcode syntax (`{{}}`) from the content.
-- `replaceFigureWithMdImg`: If `true` (default), replaces `` with `![]()`.
-- `replaceOrgLatex`: If `true` (default), converts Org-mode [[features/Latex|Latex]] fragments to Quartz-compatible LaTeX wrapped in `$` (for inline) and `$$` (for block equations).
-
-> [!warning]
-> While you can use this together with [[ObsidianFlavoredMarkdown]], it's not recommended because it might mutate the file in unexpected ways. Use with caution.
->
-> If you use `toml` frontmatter, make sure to configure the [[Frontmatter]] plugin accordingly. See [[OxHugo compatibility]] for an example.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.OxHugoFlavoredMarkdown()`.
-- Source: [`quartz/plugins/transformers/oxhugofm.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/oxhugofm.ts).
diff --git a/docs/plugins/RemoveDrafts.md b/docs/plugins/RemoveDrafts.md
deleted file mode 100644
index 07fb4d0e..00000000
--- a/docs/plugins/RemoveDrafts.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: RemoveDrafts
-tags:
- - plugin/filter
----
-
-This plugin filters out content from your vault, so that only finalized content is made available. This prevents [[private pages]] from being published. By default, it filters out all pages with `draft: true` in the frontmatter and leaves all other pages intact.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Filter
-- Function name: `Plugin.RemoveDrafts()`.
-- Source: [`quartz/plugins/filters/draft.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/filters/draft.ts).
diff --git a/docs/plugins/RoamFlavoredMarkdown.md b/docs/plugins/RoamFlavoredMarkdown.md
deleted file mode 100644
index 9d89477a..00000000
--- a/docs/plugins/RoamFlavoredMarkdown.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: RoamFlavoredMarkdown
-tags:
- - plugin/transformer
----
-
-This plugin provides support for [Roam Research](https://roamresearch.com) compatibility. See [[Roam Research Compatibility]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[Configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `orComponent`: If `true` (default), converts Roam `{{ or:ONE|TWO|THREE }}` shortcodes into HTML Dropdown options.
-- `TODOComponent`: If `true` (default), converts Roam `{{[[TODO]]}}` shortcodes into HTML check boxes.
-- `DONEComponent`: If `true` (default), converts Roam `{{[[DONE]]}}` shortcodes into checked HTML check boxes.
-- `videoComponent`: If `true` (default), converts Roam `{{[[video]]:URL}}` shortcodes into embeded HTML video.
-- `audioComponent`: If `true` (default), converts Roam `{{[[audio]]:URL}}` shortcodes into embeded HTML audio.
-- `pdfComponent`: If `true` (default), converts Roam `{{[[pdf]]:URL}}` shortcodes into embeded HTML PDF viewer.
-- `blockquoteComponent`: If `true` (default), converts Roam `{{[[>]]}}` shortcodes into Quartz blockquotes.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.RoamFlavoredMarkdown()`.
-- Source: [`quartz/plugins/transformers/roam.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/roam.ts).
diff --git a/docs/plugins/Static.md b/docs/plugins/Static.md
deleted file mode 100644
index 80bf5a15..00000000
--- a/docs/plugins/Static.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Static
-tags:
- - plugin/emitter
----
-
-This plugin emits all static resources needed by Quartz. This is used, for example, for fonts and images that need a stable position, such as banners and icons. The plugin respects the `ignorePatterns` in the global [[configuration]].
-
-> [!important]
-> This is different from [[Assets]]. The resources from the [[Static]] plugin are located under `quartz/static`, whereas [[Assets]] renders all static resources under `content` and is used for images, videos, audio, etc. that are directly referenced by your markdown content.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin has no configuration options.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.Static()`.
-- Source: [`quartz/plugins/emitters/static.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/static.ts).
diff --git a/docs/plugins/SyntaxHighlighting.md b/docs/plugins/SyntaxHighlighting.md
deleted file mode 100644
index 6fb67dba..00000000
--- a/docs/plugins/SyntaxHighlighting.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: "SyntaxHighlighting"
-tags:
- - plugin/transformer
----
-
-This plugin is used to add syntax highlighting to code blocks in Quartz. See [[syntax highlighting]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `theme`: a separate id of one of the [themes bundled with Shikiji](https://shikiji.netlify.app/themes). One for light mode and one for dark mode. Defaults to `theme: { light: "github-light", dark: "github-dark" }`.
-- `keepBackground`: If set to `true`, the background of the Shikiji theme will be used. With `false` (default) the Quartz theme color for background will be used instead.
-
-In addition, you can further override the colours in the `quartz/styles/syntax.scss` file.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.SyntaxHighlighting()`.
-- Source: [`quartz/plugins/transformers/syntax.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/syntax.ts).
diff --git a/docs/plugins/TableOfContents.md b/docs/plugins/TableOfContents.md
deleted file mode 100644
index 0e9e4ea7..00000000
--- a/docs/plugins/TableOfContents.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: TableOfContents
-tags:
- - plugin/transformer
----
-
-This plugin generates a table of contents (TOC) for Markdown documents. See [[table of contents]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-This plugin accepts the following configuration options:
-
-- `maxDepth`: Limits the depth of headings included in the TOC, ranging from `1` (top level headings only) to `6` (all heading levels). Default is `3`.
-- `minEntries`: The minimum number of heading entries required for the TOC to be displayed. Default is `1`.
-- `showByDefault`: If `true` (default), the TOC should be displayed by default. Can be overridden by frontmatter settings.
-- `collapseByDefault`: If `true`, the TOC will start in a collapsed state. Default is `false`.
-
-> [!warning]
-> This plugin needs the `Component.TableOfContents` component in `quartz.layout.ts` to determine where to display the TOC. Without it, nothing will be displayed. They should always be added or removed together.
-
-## API
-
-- Category: Transformer
-- Function name: `Plugin.TableOfContents()`.
-- Source: [`quartz/plugins/transformers/toc.ts`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/transformers/toc.ts).
diff --git a/docs/plugins/TagPage.md b/docs/plugins/TagPage.md
deleted file mode 100644
index 9556363f..00000000
--- a/docs/plugins/TagPage.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: TagPage
-tags:
- - plugin/emitter
----
-
-This plugin emits dedicated pages for each tag used in the content. See [[folder and tag listings]] for more information.
-
-> [!note]
-> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page.
-
-The pages are displayed using the `defaultListPageLayout` in `quartz.layouts.ts`. For the content, the `TagContent` component is used. If you want to modify the layout, you must edit it directly (`quartz/components/pages/TagContent.tsx`).
-
-This plugin accepts the following configuration options:
-
-- `sort`: A function of type `(f1: QuartzPluginData, f2: QuartzPluginData) => number{:ts}` used to sort entries. Defaults to sorting by date and tie-breaking on lexographical order.
-
-## API
-
-- Category: Emitter
-- Function name: `Plugin.TagPage()`.
-- Source: [`quartz/plugins/emitters/tagPage.tsx`](https://github.com/jackyzha0/quartz/blob/v4/quartz/plugins/emitters/tagPage.tsx).
diff --git a/docs/plugins/index.md b/docs/plugins/index.md
deleted file mode 100644
index 298ff164..00000000
--- a/docs/plugins/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Plugins
----
diff --git a/docs/setting up your GitHub repository.md b/docs/setting up your GitHub repository.md
deleted file mode 100644
index 43a556dc..00000000
--- a/docs/setting up your GitHub repository.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: Setting up your GitHub repository
----
-
-First, make sure you have Quartz [[index#🪴 Get Started|cloned and setup locally]].
-
-Then, create a new repository on GitHub.com. Do **not** initialize the new repository with `README`, license, or `gitignore` files.
-
-![[github-init-repo-options.png]]
-
-At the top of your repository on GitHub.com's Quick Setup page, click the clipboard to copy the remote repository URL.
-
-![[github-quick-setup.png]]
-
-In your terminal of choice, navigate to the root of your Quartz folder. Then, run the following commands, replacing `REMOTE-URL` with the URL you just copied from the previous step.
-
-```bash
-# list all the repositories that are tracked
-git remote -v
-
-# if the origin doesn't match your own repository, set your repository as the origin
-git remote set-url origin REMOTE-URL
-
-# if you don't have upstream as a remote, add it so updates work
-git remote add upstream https://github.com/jackyzha0/quartz.git
-```
-
-Then, you can sync the content to upload it to your repository. This is a helper command that will do the initial push of your content to your repository.
-
-```bash
-npx quartz sync --no-pull
-```
-
-> [!warning]- `fatal: --[no-]autostash option is only valid with --rebase`
-> You may have an outdated version of `git`. Updating `git` should fix this issue.
-
-In future updates, you can simply run `npx quartz sync` every time you want to push updates to your repository.
-
-> [!hint] Flags and options
-> For full help options, you can run `npx quartz sync --help`.
->
-> Most of these have sensible defaults but you can override them if you have a custom setup:
->
-> - `-d` or `--directory`: the content folder. This is normally just `content`
-> - `-v` or `--verbose`: print out extra logging information
-> - `--commit` or `--no-commit`: whether to make a `git` commit for your changes
-> - `--push` or `--no-push`: whether to push updates to your GitHub fork of Quartz
-> - `--pull` or `--no-pull`: whether to try and pull in any updates from your GitHub fork (i.e. from other devices) before pushing
diff --git a/docs/showcase.md b/docs/showcase.md
deleted file mode 100644
index bb95acca..00000000
--- a/docs/showcase.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: "Quartz Showcase"
----
-
-Want to see what Quartz can do? Here are some cool community gardens:
-
-- [Quartz Documentation (this site!)](https://quartz.jzhao.xyz/)
-- [Jacky Zhao's Garden](https://jzhao.xyz/)
-- [Socratica Toolbox](https://toolbox.socratica.info/)
-- [Morrowind Modding Wiki](https://morrowind-modding.github.io/)
-- [Aaron Pham's Garden](https://aarnphm.xyz/)
-- [The Pond](https://turntrout.com/welcome)
-- [Pelayo Arbues' Notes](https://pelayoarbues.com/)
-- [Stanford CME 302 Numerical Linear Algebra](https://ericdarve.github.io/NLA/)
-- [A Pattern Language - Christopher Alexander (Architecture)](https://patternlanguage.cc/)
-- [oldwinter の数字花园](https://garden.oldwinter.top/)
-- [Eilleen's Everything Notebook](https://quartz.eilleeenz.com/)
-- [🧠🌳 Chad's Mind Garden](https://www.chadly.net/)
-- [Pedro MC Fernandes's Topo da Mente](https://www.pmcf.xyz/topo-da-mente/)
-- [Mau Camargo's Notkesto](https://notes.camargomau.com/)
-- [Sideny's 3D Artist's Handbook](https://sidney-eliot.github.io/3d-artists-handbook/)
-- [Brandon Boswell's Garden](https://brandonkboswell.com)
-- [Scaling Synthesis - A hypertext research notebook](https://scalingsynthesis.com/)
-- [Simon's Second Brain: Crafted, Curated, Connected, Compounded](https://brain.ssp.sh/)
-- [Data Engineering Vault: A Second Brain Knowledge Network](https://vault.ssp.sh/)
-- [Data Dictionary 🧠](https://glossary.airbyte.com/)
-- [🪴Aster's notebook](https://notes.asterhu.com)
-- [Gatekeeper Wiki](https://www.gatekeeper.wiki)
-- [Ellie's Notes](https://ellie.wtf)
-- [🥷🏻🌳🍃 Computer Science & Thinkering Garden](https://notes.yxy.ninja)
-- [Eledah's Crystalline](https://blog.eledah.ir/)
-- [🌓 Projects & Privacy - FOSS, tech, law](https://be-far.com)
-- [Zen Browser Docs](https://docs.zen-browser.app)
-
-If you want to see your own on here, submit a [Pull Request adding yourself to this file](https://github.com/jackyzha0/quartz/blob/v4/docs/showcase.md)!
diff --git a/docs/tags/component.md b/docs/tags/component.md
deleted file mode 100644
index 57592e8c..00000000
--- a/docs/tags/component.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Components
----
-
-Want to create your own custom component? Check out the advanced guide on [[creating components]] for more information.
diff --git a/docs/tags/plugin.md b/docs/tags/plugin.md
deleted file mode 100644
index 298ff164..00000000
--- a/docs/tags/plugin.md
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Plugins
----
diff --git a/docs/upgrading.md b/docs/upgrading.md
deleted file mode 100644
index a3a82754..00000000
--- a/docs/upgrading.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: "Upgrading Quartz"
----
-
-> [!note]
-> This is specifically a guide for upgrading Quartz 4 version to a more recent update. If you are coming from Quartz 3, check out the [[migrating from Quartz 3|migration guide]] for more info.
-
-To fetch the latest Quartz updates, simply run
-
-```bash
-npx quartz update
-```
-
-As Quartz uses [git](https://git-scm.com/) under the hood for versioning, updating effectively 'pulls' in the updates from the official Quartz GitHub repository. If you have local changes that might conflict with the updates, you may need to resolve these manually yourself (or, pull manually using `git pull origin upstream`).
-
-> [!hint]
-> Quartz will try to cache your content before updating to try and prevent merge conflicts. If you get a conflict mid-merge, you can stop the merge and then run `npx quartz restore` to restore your content from the cache.
-
-If you have the [GitHub desktop app](https://desktop.github.com/), this will automatically open to help you resolve the conflicts. Otherwise, you will need to resolve this in a text editor like VSCode. For more help on resolving conflicts manually, check out the [GitHub guide on resolving merge conflicts](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line#competing-line-change-merge-conflicts).