vault backup: 2025-12-10 12:30:43

This commit is contained in:
Tellsanguis 2025-12-10 12:30:43 +01:00
parent e7d1126470
commit 073ef0fd3b
9 changed files with 869 additions and 0 deletions

View file

@ -0,0 +1,409 @@
---
slug: obsidian-git-workflow
title: "Écrire ses articles de blog avec Obsidian et Git"
authors: [tellserv]
tags: [obsidian, git, workflow, documentation]
date: 2025-12-10
image: /img/blog/2025-12-10-obsidian-git/2023_Obsidian_logo.svg
---
Comment j'ai configuré Obsidian avec le plugin Git pour rédiger et synchroniser mes articles de blog et ma documentation technique, avec des templates personnalisés et un workflow Git propre.
<!--truncate-->
## Contexte et motivation
Mon blog technique fonctionne avec Docusaurus, un générateur de site statique qui utilise du Markdown pour le contenu. Bien que je puisse éditer les fichiers directement avec VS Code ou n'importe quel éditeur de texte, j'avais besoin d'un environnement d'édition plus adapté à la rédaction d'articles longs avec :
- **Une interface dédiée à l'écriture** : Obsidian offre un mode focus et une prévisualisation Markdown en temps réel
- **Des templates réutilisables** : Pour garantir la cohérence du frontmatter Docusaurus (métadonnées en YAML)
- **Une synchronisation Git automatique** : Pulls automatiques toutes les 10 minutes pour récupérer les changements distants
- **Une séparation claire** : Uniquement le contenu éditorial (blog, docs, images) sans les fichiers techniques de Docusaurus
## Architecture du setup
Le principe est simple : utiliser **Git sparse checkout** pour ne récupérer que les dossiers de contenu du dépôt, et configurer Obsidian avec le plugin Git pour synchroniser les modifications sur une branche dédiée.
```
Vault Obsidian (local)
├── blog/ ← Articles de blog (FR)
├── docs/ ← Documentation (FR)
├── i18n/ ← Traductions (EN)
├── static/ ← Images et assets
└── templates/ ← Templates locaux (non versionnés)
↓ Synchronisation Git (branche "contenu")
Forgejo → GitHub → Cloudflare Pages
```
**Workflow de publication** :
1. J'écris dans Obsidian et commite manuellement sur la branche `contenu`
2. Pull automatique toutes les 10 minutes pour récupérer les changements distants
3. Push manuel quand je veux synchroniser avec le serveur
4. Quand l'article est prêt : Pull Request sur Forgejo de `contenu` vers `main`
5. Après merge : déploiement automatique sur Cloudflare Pages
## Étape 1 : Mise en place du vault Obsidian avec sparse checkout
### Clone initial avec sparse checkout
Le sparse checkout permet de ne récupérer que les dossiers nécessaires sans télécharger tout le projet Docusaurus (node_modules, build, etc.).
```powershell
New-Item -ItemType Directory .\Obsidian
Set-Location .\Obsidian
git clone --no-checkout https://forgejo.tellserv.fr/Tellsanguis/blog_tech.git .
git sparse-checkout disable
git sparse-checkout init --cone
git sparse-checkout set blog docs i18n static
git read-tree -mu HEAD
git ls-files | Where-Object { $_ -notmatch '/' } | ForEach-Object { git update-index --assume-unchanged -- $_ }
git ls-files | Where-Object { $_ -notmatch '/' } | ForEach-Object { if (Test-Path $_) { Remove-Item -Force $_ -ErrorAction SilentlyContinue } }
git read-tree -mu HEAD
git checkout -b contenu
git push -u origin contenu
```
**Explication des commandes** :
- `git clone --no-checkout` : Clone le dépôt sans extraire les fichiers
- `git sparse-checkout set blog docs i18n static` : Définit les dossiers à récupérer
- Les commandes `git ls-files` : Marquent les fichiers racine comme "assume-unchanged" et les suppriment du working tree
- `git checkout -b contenu` : Crée et bascule sur la branche de travail
**Résultat attendu** : Seuls les dossiers `blog/`, `docs/`, `i18n/`, `static/` et `.git/` sont présents.
### Configuration du .gitignore
Pour éviter de versionner les fichiers spécifiques à Obsidian :
```gitignore
# Obsidian
.obsidian/
.trash/
templates/
# Fichiers système
.DS_Store
Thumbs.db
```
Les templates sont locaux et personnels, inutile de les versionner dans le dépôt principal.
## Étape 2 : Installation et configuration d'Obsidian
### Ouvrir le vault
1. Lancer **Obsidian**
2. **Open folder as vault** → Sélectionner `C:\Users\Tellsanguis\Documents\Obsidian`
### Installation du plugin Obsidian Git
Le plugin Obsidian Git permet de gérer Git directement depuis Obsidian sans passer par la ligne de commande.
1. **Settings** (roue dentée en bas à gauche) → **Community plugins**
2. **Turn on community plugins**
3. **Browse** → Rechercher "**Obsidian Git**" (par Vinzent03)
4. **Install** → **Enable**
![Installation du plugin Obsidian Git](/img/blog/2025-12-10-obsidian-git/obsidian_module_complementaire.png)
### Configuration du plugin Obsidian Git
**Settings → Obsidian Git** :
#### Section "Automatic"
![Configuration auto pull](/img/blog/2025-12-10-obsidian-git/auto_pull.png)
- `Auto pull interval (minutes)` : **10** → Récupère les changements distants toutes les 10 minutes
Cette configuration permet de rester synchronisé avec les changements faits depuis d'autres machines ou par d'autres contributeurs.
#### Section "Pull"
![Pull on startup et autres paramètres](/img/blog/2025-12-10-obsidian-git/pull_on_startup.png)
- `Pull on startup` : **Activé** → Pull automatique au démarrage d'Obsidian
- `Merge strategy` : **Merge** → Stratégie de fusion par défaut
#### Section "Commit author"
![Configuration de l'auteur des commits](/img/blog/2025-12-10-obsidian-git/commit_author.png)
- `Author name for commit` : **Tellsanguis**
- `Author email for commit` : **mael.bene@tellserv.fr**
Cela permet d'identifier correctement l'auteur des commits dans l'historique Git.
#### Section "Commit message"
- `Commit message` : **"vault backup: {{date}}"**
Cette syntaxe permet d'avoir des messages de commit automatiques avec la date, par exemple : `vault backup: 2025-12-10 14:30`
## Étape 3 : Création des templates
Les templates facilitent la création d'articles et de documentation avec le bon format frontmatter attendu par Docusaurus.
### Configuration du plugin Templates
1. **Settings → Core plugins → Templates** : **Activer**
2. **Settings → Templates** :
- `Template folder location` : **templates**
- `Date format` : **YYYY-MM-DD**
### Affichage des propriétés frontmatter
![Propriétés dans les documents source](/img/blog/2025-12-10-obsidian-git/proprietes_dans_les_documents_source.png)
Pour voir les propriétés YAML (frontmatter) directement dans l'éditeur, sélectionner "source" dans les paramètres d'affichage des propriétés.
### Template pour article de blog
<details>
<summary><strong>Voir le template blog-cheatsheet.md</strong></summary>
```markdown
---
slug: titre-slug
title: "Titre de l'article"
authors: [tellserv]
tags: [tag1, tag2, tag3]
date: {{date:YYYY-MM-DD}}
image: /img/blog/{{date:YYYY-MM-DD}}-slug/banniere.png
---
Résumé court avant la coupure...
<!--truncate-->
## Fonctionnalités disponibles
### Images
<!-- Image simple -->
![Texte alternatif](/img/blog/dossier/image.png)
<!-- Image avec légende -->
![Description](/img/blog/dossier/image.png)
*Légende en italique sous l'image*
<!-- Image centrée avec taille personnalisée -->
<p align="center">
<img src="/img/blog/dossier/banniere.png" alt="Description" width="600" />
</p>
### PDF et téléchargements
<!-- Lien de téléchargement PDF -->
[📥 Télécharger le PDF](/img/diagrams/schema.pdf)
### Tableaux
| Colonne 1 | Colonne 2 | Colonne 3 |
|-----------|-----------|-----------|
| Valeur A | Valeur B | Valeur C |
| Valeur D | Valeur E | Valeur F |
### Blocs de code
```bash
# Commande shell
commande --option valeur
```
```yaml
# Configuration YAML
key: value
```
```python
# Code Python
def fonction():
return True
```
### Listes
- Point simple
- **Point en gras** : avec explication
- Sous-point indenté
1. Étape 1
2. Étape 2
3. Étape 3
### Liens
- Lien interne doc : [Texte](/docs/categorie/page)
- Lien interne blog : [Texte](/blog/slug-article)
- Lien externe : [Texte](https://example.com)
### Mise en forme
- `code inline` pour paramètres/commandes
- **gras** pour emphase forte
- _italique_ pour légendes
### Structure de dossier
```
arborescence/
├── fichier1.yml
├── dossier/
│ └── fichier2.yml
└── README.md
```
```
</details>
### Template pour documentation
<details>
<summary><strong>Voir le template doc-cheatsheet.md</strong></summary>
```markdown
---
sidebar_position: 1
tags: [tag1, tag2, tag3]
last_update:
date: {{date:YYYY-MM-DD}}
---
# Titre de la page
## Fonctionnalités disponibles
### Schémas avec PDF
![Nom du schéma](/img/diagrams/nom-schema.png)
[📥 Télécharger le PDF](/img/diagrams/nom-schema.pdf)
### Images simples
![Description](/img/path/image.png)
*Légende optionnelle en italique*
### Tableaux
| Paramètre | Description | Valeur |
|-----------|-------------|--------|
| `param1` | Explication | val1 |
| `param2` | Explication | val2 |
### Blocs de code avec langage
```bash
# Commande shell
commande exemple
```
```yaml
# Configuration YAML
config: valeur
```
```python
# Code Python
def fonction():
return True
```
### Listes et sous-listes
- **Titre point** : Explication
- Sous-point
- Autre sous-point
- Autre point
1. Première étape
2. Deuxième étape
3. Troisième étape
### Structure arborescente
```
projet/
├── dossier1/
│ └── fichier.yml
└── dossier2/
└── autre.yml
```
### Liens
- [Autre doc](/docs/autre-page)
- [Article blog](/blog/slug)
- [Externe](https://url.com)
### Mise en forme
- `code inline` pour paramètres/commandes
- **gras** pour emphase
- _italique_ pour légendes
```
</details>
**Note importante** : `{{date:YYYY-MM-DD}}` est automatiquement remplacé par Obsidian lors de l'insertion du template avec la date du jour.
## Workflow d'utilisation au quotidien
### Créer un nouvel article de blog
1. **Clic droit** dans le dossier `blog/` → **New note**
2. **Nommer** : `YYYY-MM-DD-titre-slug.md` (ex: `2025-12-10-mon-article.md`)
3. **Insérer le template** :
- `Ctrl+P` (Command Palette)
- Taper "template"
- Sélectionner "Templates: Insert template"
- Choisir `blog-cheatsheet`
4. **Modifier le frontmatter** :
- `slug` : titre-slug (sans la date)
- `title` : Titre complet de l'article
- `tags` : Remplacer par les vrais tags
- `date` : Automatiquement rempli par Obsidian
- `image` : Chemin vers la bannière (si utilisée)
5. **Écrire le contenu** avec prévisualisation en temps réel
6. **Ajouter les images** dans `static/img/blog/YYYY-MM-DD-slug/`
### Synchronisation avec Git
Le plugin Obsidian Git affiche un panel à droite de la fenêtre pour gérer la synchronisation :
![Panel Git dans Obsidian](/img/blog/2025-12-10-obsidian-git/git_panel_obsidian.png)
**Pull automatique** :
- Pull automatique toutes les 10 minutes pour récupérer les changements distants
- Pull automatique au démarrage d'Obsidian
**Commit et push manuels** :
1. **Vérifier les changements** : Le panel Git affiche les fichiers modifiés dans la section "Changes"
2. **Commit** : Cliquer sur le bouton de commit en bas du panel ou utiliser `Ctrl+P` → "Git: Commit all changes"
3. **Push** : Cliquer sur le bouton de push en bas du panel ou utiliser `Ctrl+P` → "Git: Push"
### Publier sur le blog
1. **Sur Forgejo** : https://forgejo.tellserv.fr/Tellsanguis/blog_tech
2. **Pull Requests** → **New Pull Request**
3. **Base branch** : `main` / **Compare branch** : `contenu`
4. **Create Pull Request** → Revue du contenu → **Merge**
5. **Pipeline automatique** : Forgejo → GitHub mirror → Cloudflare Pages → Publication en ligne
Ce workflow permet de relire et valider le contenu avant publication, avec un historique Git complet de toutes les modifications.
## Conclusion
Ce setup me permet de bénéficier d'un environnement d'édition optimisé pour la rédaction tout en gardant un workflow Git avec review et historique complet.
Le panel Git intégré directement dans Obsidian facilite grandement la gestion des commits et des pushs, avec une visualisation claire des fichiers modifiés. Les pulls automatiques garantissent que je reste toujours synchronisé avec le dépôt distant, tout en gardant le contrôle total sur ce que je commite et quand je le fais (dans les faits, je suis seul à travailler sur ce blog : c'est surtout utile pour le travail en équipe afin d'avoir les mises à jour en temps réel).
Si vous utilisez Docusaurus ou un autre générateur de site statique basé sur Markdown, je recommande vivement ce type de setup pour faciliter la rédaction de contenu technique !

View file

@ -0,0 +1,409 @@
---
slug: obsidian-git-workflow
title: "Writing Blog Posts with Obsidian and Git"
authors: [tellserv]
tags: [obsidian, git, workflow, documentation]
date: 2025-12-10
image: /img/blog/2025-12-10-obsidian-git/2023_Obsidian_logo.svg
---
How I configured Obsidian with the Git plugin to write and synchronize my blog posts and technical documentation, with custom templates and a clean Git workflow.
<!--truncate-->
## Context and motivation
My technical blog runs on Docusaurus, a static site generator that uses Markdown for content. While I could edit files directly with VS Code or any text editor, I needed a writing environment better suited for writing long articles with:
- **A dedicated writing interface**: Obsidian offers focus mode and real-time Markdown preview
- **Reusable templates**: To ensure consistency of Docusaurus frontmatter (YAML metadata)
- **Automatic Git synchronization**: Automatic pulls every 10 minutes to fetch remote changes
- **Clear separation**: Only editorial content (blog, docs, images) without Docusaurus technical files
## Setup architecture
The principle is simple: use **Git sparse checkout** to retrieve only content folders from the repository, and configure Obsidian with the Git plugin to synchronize changes on a dedicated branch.
```
Obsidian Vault (local)
├── blog/ ← Blog posts (FR)
├── docs/ ← Documentation (FR)
├── i18n/ ← Translations (EN)
├── static/ ← Images and assets
└── templates/ ← Local templates (not versioned)
↓ Git sync (branch "contenu")
Forgejo → GitHub → Cloudflare Pages
```
**Publishing workflow**:
1. I write in Obsidian and commit manually on the `contenu` branch
2. Automatic pull every 10 minutes to fetch remote changes
3. Manual push when I want to sync with the server
4. When the article is ready: Pull Request on Forgejo from `contenu` to `main`
5. After merge: automatic deployment on Cloudflare Pages
## Step 1: Setting up the Obsidian vault with sparse checkout
### Initial clone with sparse checkout
Sparse checkout allows retrieving only the necessary folders without downloading the entire Docusaurus project (node_modules, build, etc.).
```powershell
New-Item -ItemType Directory .\Obsidian
Set-Location .\Obsidian
git clone --no-checkout https://forgejo.tellserv.fr/Tellsanguis/blog_tech.git .
git sparse-checkout disable
git sparse-checkout init --cone
git sparse-checkout set blog docs i18n static
git read-tree -mu HEAD
git ls-files | Where-Object { $_ -notmatch '/' } | ForEach-Object { git update-index --assume-unchanged -- $_ }
git ls-files | Where-Object { $_ -notmatch '/' } | ForEach-Object { if (Test-Path $_) { Remove-Item -Force $_ -ErrorAction SilentlyContinue } }
git read-tree -mu HEAD
git checkout -b contenu
git push -u origin contenu
```
**Command explanation**:
- `git clone --no-checkout`: Clones the repository without extracting files
- `git sparse-checkout set blog docs i18n static`: Defines folders to retrieve
- `git ls-files` commands: Mark root files as "assume-unchanged" and remove them from the working tree
- `git checkout -b contenu`: Creates and switches to the working branch
**Expected result**: Only `blog/`, `docs/`, `i18n/`, `static/` and `.git/` folders are present.
### Configuring .gitignore
To avoid versioning Obsidian-specific files:
```gitignore
# Obsidian
.obsidian/
.trash/
templates/
# System files
.DS_Store
Thumbs.db
```
Templates are local and personal, no need to version them in the main repository.
## Step 2: Installing and configuring Obsidian
### Opening the vault
1. Launch **Obsidian**
2. **Open folder as vault** → Select `C:\Users\Tellsanguis\Documents\Obsidian`
### Installing the Obsidian Git plugin
The Obsidian Git plugin allows managing Git directly from Obsidian without using the command line.
1. **Settings** (gear icon at the bottom left) → **Community plugins**
2. **Turn on community plugins**
3. **Browse** → Search for "**Obsidian Git**" (by Vinzent03)
4. **Install** → **Enable**
![Installing the Obsidian Git plugin](/img/blog/2025-12-10-obsidian-git/obsidian_module_complementaire.png)
### Configuring the Obsidian Git plugin
**Settings → Obsidian Git**:
#### "Automatic" section
![Auto pull configuration](/img/blog/2025-12-10-obsidian-git/auto_pull.png)
- `Auto pull interval (minutes)`: **10** → Fetches remote changes every 10 minutes
This configuration keeps you synchronized with changes made from other machines or by other contributors.
#### "Pull" section
![Pull on startup and other settings](/img/blog/2025-12-10-obsidian-git/pull_on_startup.png)
- `Pull on startup`: **Enabled** → Automatic pull when Obsidian starts
- `Merge strategy`: **Merge** → Default merge strategy
#### "Commit author" section
![Commit author configuration](/img/blog/2025-12-10-obsidian-git/commit_author.png)
- `Author name for commit`: **Tellsanguis**
- `Author email for commit`: **mael.bene@tellserv.fr**
This correctly identifies the commit author in Git history.
#### "Commit message" section
- `Commit message`: **"vault backup: {{date}}"**
This syntax provides automatic commit messages with the date, for example: `vault backup: 2025-12-10 14:30`
## Step 3: Creating templates
Templates facilitate creating articles and documentation with the correct frontmatter format expected by Docusaurus.
### Configuring the Templates plugin
1. **Settings → Core plugins → Templates**: **Enable**
2. **Settings → Templates**:
- `Template folder location`: **templates**
- `Date format`: **YYYY-MM-DD**
### Displaying frontmatter properties
![Properties in source documents](/img/blog/2025-12-10-obsidian-git/proprietes_dans_les_documents_source.png)
To see YAML properties (frontmatter) directly in the editor, select "source" in the property display settings.
### Blog post template
<details>
<summary><strong>View blog-cheatsheet.md template</strong></summary>
```markdown
---
slug: titre-slug
title: "Titre de l'article"
authors: [tellserv]
tags: [tag1, tag2, tag3]
date: {{date:YYYY-MM-DD}}
image: /img/blog/{{date:YYYY-MM-DD}}-slug/banniere.png
---
Résumé court avant la coupure...
<!--truncate-->
## Fonctionnalités disponibles
### Images
<!-- Image simple -->
![Texte alternatif](/img/blog/dossier/image.png)
<!-- Image avec légende -->
![Description](/img/blog/dossier/image.png)
*Légende en italique sous l'image*
<!-- Image centrée avec taille personnalisée -->
<p align="center">
<img src="/img/blog/dossier/banniere.png" alt="Description" width="600" />
</p>
### PDF et téléchargements
<!-- Lien de téléchargement PDF -->
[📥 Télécharger le PDF](/img/diagrams/schema.pdf)
### Tableaux
| Colonne 1 | Colonne 2 | Colonne 3 |
|-----------|-----------|-----------|
| Valeur A | Valeur B | Valeur C |
| Valeur D | Valeur E | Valeur F |
### Blocs de code
```bash
# Commande shell
commande --option valeur
```
```yaml
# Configuration YAML
key: value
```
```python
# Code Python
def fonction():
return True
```
### Listes
- Point simple
- **Point en gras** : avec explication
- Sous-point indenté
1. Étape 1
2. Étape 2
3. Étape 3
### Liens
- Lien interne doc : [Texte](/docs/categorie/page)
- Lien interne blog : [Texte](/blog/slug-article)
- Lien externe : [Texte](https://example.com)
### Mise en forme
- `code inline` pour paramètres/commandes
- **gras** pour emphase forte
- _italique_ pour légendes
### Structure de dossier
```
arborescence/
├── fichier1.yml
├── dossier/
│ └── fichier2.yml
└── README.md
```
```
</details>
### Documentation template
<details>
<summary><strong>View doc-cheatsheet.md template</strong></summary>
```markdown
---
sidebar_position: 1
tags: [tag1, tag2, tag3]
last_update:
date: {{date:YYYY-MM-DD}}
---
# Titre de la page
## Fonctionnalités disponibles
### Schémas avec PDF
![Nom du schéma](/img/diagrams/nom-schema.png)
[📥 Télécharger le PDF](/img/diagrams/nom-schema.pdf)
### Images simples
![Description](/img/path/image.png)
*Légende optionnelle en italique*
### Tableaux
| Paramètre | Description | Valeur |
|-----------|-------------|--------|
| `param1` | Explication | val1 |
| `param2` | Explication | val2 |
### Blocs de code avec langage
```bash
# Commande shell
commande exemple
```
```yaml
# Configuration YAML
config: valeur
```
```python
# Code Python
def fonction():
return True
```
### Listes et sous-listes
- **Titre point** : Explication
- Sous-point
- Autre sous-point
- Autre point
1. Première étape
2. Deuxième étape
3. Troisième étape
### Structure arborescente
```
projet/
├── dossier1/
│ └── fichier.yml
└── dossier2/
└── autre.yml
```
### Liens
- [Autre doc](/docs/autre-page)
- [Article blog](/blog/slug)
- [Externe](https://url.com)
### Mise en forme
- `code inline` pour paramètres/commandes
- **gras** pour emphase
- _italique_ pour légendes
```
</details>
**Important note**: `{{date:YYYY-MM-DD}}` is automatically replaced by Obsidian when inserting the template with the current date.
## Daily workflow
### Creating a new blog post
1. **Right-click** in the `blog/` folder → **New note**
2. **Name**: `YYYY-MM-DD-title-slug.md` (e.g., `2025-12-10-my-article.md`)
3. **Insert template**:
- `Ctrl+P` (Command Palette)
- Type "template"
- Select "Templates: Insert template"
- Choose `blog-cheatsheet`
4. **Edit frontmatter**:
- `slug`: title-slug (without date)
- `title`: Full article title
- `tags`: Replace with actual tags
- `date`: Automatically filled by Obsidian
- `image`: Path to banner (if used)
5. **Write content** with real-time preview
6. **Add images** in `static/img/blog/YYYY-MM-DD-slug/`
### Git synchronization
The Obsidian Git plugin displays a panel on the right side of the window to manage synchronization:
![Git panel in Obsidian](/img/blog/2025-12-10-obsidian-git/git_panel_obsidian.png)
**Automatic pull**:
- Automatic pull every 10 minutes to fetch remote changes
- Automatic pull when Obsidian starts
**Manual commit and push**:
1. **Check changes**: The Git panel displays modified files in the "Changes" section
2. **Commit**: Click the commit button at the bottom of the panel or use `Ctrl+P` → "Git: Commit all changes"
3. **Push**: Click the push button at the bottom of the panel or use `Ctrl+P` → "Git: Push"
### Publishing to the blog
1. **On Forgejo**: https://forgejo.tellserv.fr/Tellsanguis/blog_tech
2. **Pull Requests** → **New Pull Request**
3. **Base branch**: `main` / **Compare branch**: `contenu`
4. **Create Pull Request** → Review content → **Merge**
5. **Automatic pipeline**: Forgejo → GitHub mirror → Cloudflare Pages → Online publication
This workflow allows reviewing and validating content before publication, with a complete Git history of all modifications.
## Conclusion
This setup allows me to benefit from a writing environment optimized for editing while maintaining a professional Git workflow with review and complete history.
The Git panel integrated directly into Obsidian greatly facilitates commit and push management, with a clear visualization of modified files. Automatic pulls ensure I always stay synchronized with the remote repository, while maintaining total control over what I commit and when I do it (in practice, I work alone on this blog: it's mainly useful for team work to have real-time updates).
If you use Docusaurus or another Markdown-based static site generator, I highly recommend this type of setup to facilitate technical content writing!

View file

@ -0,0 +1,51 @@
<svg fill="none" height="100%" width="100%" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
<radialGradient id="logo-bottom-left" cx="0" cy="0" gradientTransform="matrix(-59 -225 150 -39 161.4 470)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".4"/>
<stop offset="1" stop-opacity=".1"/>
</radialGradient>
<radialGradient id="logo-top-right" cx="0" cy="0" gradientTransform="matrix(50 -379 280 37 360 374.2)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".6"/>
<stop offset="1" stop-color="#fff" stop-opacity=".1"/>
</radialGradient>
<radialGradient id="logo-top-left" cx="0" cy="0" gradientTransform="matrix(69 -319 218 47 175.4 307)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".8"/>
<stop offset="1" stop-color="#fff" stop-opacity=".4"/>
</radialGradient>
<radialGradient id="logo-bottom-right" cx="0" cy="0" gradientTransform="matrix(-96 -163 187 -111 335.3 512.2)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".3"/>
<stop offset="1" stop-opacity=".3"/>
</radialGradient>
<radialGradient id="logo-top-edge" cx="0" cy="0" gradientTransform="matrix(-36 166 -112 -24 310 128.2)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity="0"/>
<stop offset="1" stop-color="#fff" stop-opacity=".2"/>
</radialGradient>
<radialGradient id="logo-left-edge" cx="0" cy="0" gradientTransform="matrix(88 89 -190 187 111 220.2)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".2"/>
<stop offset="1" stop-color="#fff" stop-opacity=".4"/>
</radialGradient>
<radialGradient id="logo-bottom-edge" cx="0" cy="0" gradientTransform="matrix(9 130 -276 20 215 284)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".2"/>
<stop offset="1" stop-color="#fff" stop-opacity=".3"/>
</radialGradient>
<radialGradient id="logo-middle-edge" cx="0" cy="0" gradientTransform="matrix(-198 -104 327 -623 400 399.2)" gradientUnits="userSpaceOnUse" r="1">
<stop offset="0" stop-color="#fff" stop-opacity=".2"/>
<stop offset=".5" stop-color="#fff" stop-opacity=".2"/>
<stop offset="1" stop-color="#fff" stop-opacity=".3"/>
</radialGradient>
<clipPath id="clip">
<path d="M.2.2h512v512H.2z"/>
</clipPath>
<g clip-path="url(#clip)">
<path d="M382.3 475.6c-3.1 23.4-26 41.6-48.7 35.3-32.4-8.9-69.9-22.8-103.6-25.4l-51.7-4a34 34 0 0 1-22-10.2l-89-91.7a34 34 0 0 1-6.7-37.7s55-121 57.1-127.3c2-6.3 9.6-61.2 14-90.6 1.2-7.9 5-15 11-20.3L248 8.9a34.1 34.1 0 0 1 49.6 4.3L386 125.6a37 37 0 0 1 7.6 22.4c0 21.3 1.8 65 13.6 93.2 11.5 27.3 32.5 57 43.5 71.5a17.3 17.3 0 0 1 1.3 19.2 1494 1494 0 0 1-44.8 70.6c-15 22.3-21.9 49.9-25 73.1z" fill="#6c31e3"/>
<path d="M165.9 478.3c41.4-84 40.2-144.2 22.6-187-16.2-39.6-46.3-64.5-70-80-.6 2.3-1.3 4.4-2.2 6.5L60.6 342a34 34 0 0 0 6.6 37.7l89.1 91.7a34 34 0 0 0 9.6 7z" fill="url(#logo-bottom-left)"/>
<path d="M278.4 307.8c11.2 1.2 22.2 3.6 32.8 7.6 34 12.7 65 41.2 90.5 96.3 1.8-3.1 3.6-6.2 5.6-9.2a1536 1536 0 0 0 44.8-70.6 17 17 0 0 0-1.3-19.2c-11-14.6-32-44.2-43.5-71.5-11.8-28.2-13.5-72-13.6-93.2 0-8.1-2.6-16-7.6-22.4L297.6 13.2a34 34 0 0 0-1.5-1.7 96 96 0 0 1 2 54 198.3 198.3 0 0 1-17.6 41.3l-7.2 14.2a171 171 0 0 0-19.4 71c-1.2 29.4 4.8 66.4 24.5 115.8z" fill="url(#logo-top-right)"/>
<path d="M278.4 307.8c-19.7-49.4-25.8-86.4-24.5-115.9a171 171 0 0 1 19.4-71c2.3-4.8 4.8-9.5 7.2-14.1 7.1-13.9 14-27 17.6-41.4a96 96 0 0 0-2-54A34.1 34.1 0 0 0 248 9l-105.4 94.8a34.1 34.1 0 0 0-10.9 20.3l-12.8 85-.5 2.3c23.8 15.5 54 40.4 70.1 80a147 147 0 0 1 7.8 24.8c28-6.8 55.7-11 82.1-8.3z" fill="url(#logo-top-left)"/>
<path d="M333.6 511c22.7 6.2 45.6-12 48.7-35.4a187 187 0 0 1 19.4-63.9c-25.6-55-56.5-83.6-90.4-96.3-36-13.4-75.2-9-115 .7 8.9 40.4 3.6 93.3-30.4 162.2 4 1.8 8.1 3 12.5 3.3 0 0 24.4 2 53.6 4.1 29 2 72.4 17.1 101.6 25.2z" fill="url(#logo-bottom-right)"/>
<g clip-rule="evenodd" fill-rule="evenodd">
<path d="M254.1 190c-1.3 29.2 2.4 62.8 22.1 112.1l-6.2-.5c-17.7-51.5-21.5-78-20.2-107.6a174.7 174.7 0 0 1 20.4-72c2.4-4.9 8-14.1 10.5-18.8 7.1-13.7 11.9-21 16-33.6 5.7-17.5 4.5-25.9 3.8-34.1 4.6 29.9-12.7 56-25.7 82.4a177.1 177.1 0 0 0-20.7 72z" fill="url(#logo-top-edge)"/>
<path d="M194.3 293.4c2.4 5.4 4.6 9.8 6 16.5L195 311c-2.1-7.8-3.8-13.4-6.8-20-17.8-42-46.3-63.6-69.7-79.5 28.2 15.2 57.2 39 75.7 81.9z" fill="url(#logo-left-edge)"/>
<path d="M200.6 315.1c9.8 46-1.2 104.2-33.6 160.9 27.1-56.2 40.2-110.1 29.3-160z" fill="url(#logo-bottom-edge)"/>
<path d="M312.5 311c53.1 19.9 73.6 63.6 88.9 100-19-38.1-45.2-80.3-90.8-96-34.8-11.8-64.1-10.4-114.3 1l-1.1-5c53.2-12.1 81-13.5 117.3 0z" fill="url(#logo-middle-edge)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB