diff --git a/.gitignore b/.gitignore
index 546c018..269355f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,14 @@
-.decrypted*.yml
-
-# Project
-docs/nvim/tags
+public
# direnv
.direnv
-# Devenv
-.devenv*
-devenv.local.nix
+# LaTeX
+*.aux
+*.fdb_latexmk
+*.fls
+*.idx
+*.ilg
+*.ind
+*.log
+*.toc
diff --git a/content/_index.en.md b/content/_index.en.md
index b68f738..198c05f 100644
--- a/content/_index.en.md
+++ b/content/_index.en.md
@@ -1,15 +1,16 @@
---
-title: Welcome to JSL Devops
+title: Welcome
---
-During our DevOps journey, we have used a multitude tools and infrastructure,
-and encountered many problems.
+During our DevOps journey, we use a multitude tools and infrastructure, and
+encounter many problems.
-Sometimes we have failed to document certain situations, thinking that we We
-wouldn't encounter these problems anymore.
+Sometimes we judge that it is not necessary to document certain situations,
+thinking that we will no longer encounter these problems.
-However, recently I have been working with different startups and I have
-realized that I found myself repeating the same tasks.
+However, recently I have been working with different startups and have found
+myself realized that I found myself repeating practically the same tasks.
-This is why I decided to create this documentation site to record the problems
-we face and their solutions.
+This is why I decided to create this site to document the tools that we use as
+well as to record the problems we face in our daily lives and provide their
+solutions.
diff --git a/content/_index.fr.md b/content/_index.fr.md
index bd30f33..69fe1c3 100644
--- a/content/_index.fr.md
+++ b/content/_index.fr.md
@@ -1,15 +1,16 @@
---
-title: Bienvenue sur JSL Devops
+title: Bienvenue
---
-Au cours de notre parcours en tant que DevOps, nous avons utilisé une multitude
-d'outils et d'infrastructures, et avons rencontré de nombreuses problématiques.
+Au cours de notre parcours en tant que DevOps, nous utilisons une multitude
+d’outils et d’infrastructures, et rencontrons de nombreuses problématiques.
-Parfois, nous avons omis de documenter certaines situations, pensant que nous ne
-rencontrerions plus ces problèmes.
+Parfois, nous jugeons qu'il n'est pas nécessaire de documenter certaines
+situations, pensant que nous ne rencontrerons plus ces problématiques.
-Cependant, récemment, j'ai travaillé avec différentes startups et je me suis
-rendu compte que je me retrouvais à refaire les mêmes tâches.
+Cependant, récemment, j’ai travaillé avec différentes startups et je me suis
+rendu compte que je me retrouvais à refaire pratiquement les mêmes tâches.
-C'est pourquoi j'ai décidé de créer ce site de documentation pour consigner les
-problèmes auxquels nous sommes confrontés ainsi que leurs solutions.
+C’est pourquoi j’ai décidé de créer ce site pour documenter les outils que nous
+utilisons ainsi que pour consigner les problèmes auxquels nous sommes confrontés
+dans notre quotidien et apporter leurs solutions.
diff --git a/content/developer/_index.en.md b/content/developer/_index.en.md
new file mode 100644
index 0000000..a37a0a5
--- /dev/null
+++ b/content/developer/_index.en.md
@@ -0,0 +1,3 @@
+---
+title: Develop
+---
diff --git a/content/developer/_index.fr.md b/content/developer/_index.fr.md
new file mode 100644
index 0000000..d7f7084
--- /dev/null
+++ b/content/developer/_index.fr.md
@@ -0,0 +1,3 @@
+---
+title: Developer
+---
diff --git a/content/developer/ghq/_index.en.md b/content/developer/ghq/_index.en.md
new file mode 100644
index 0000000..c1894f2
--- /dev/null
+++ b/content/developer/ghq/_index.en.md
@@ -0,0 +1,43 @@
+---
+title: ghq
+resources:
+ - name: demo-ghq
+ src: demo-ghq.gif
+ title: "ghq demo"
+ params:
+ credits: "generated with `vhs demo-ghq.tape`"
+---
+
+{{< hint type=note title=Intro >}} **[ghq](https://github.com/x-motemen/ghq)**
+allows you to clone a project without worrying where the project will be cloned,
+it allows also to clone while respecting the aborescende of the remote repo. {{<
+/hint >}}
+
+## git clone, it's simple!
+
+The cloning process with the `git clone` command may seem simple at first
+glance. at first glance, but when managing several **Git** repositories, this
+can quickly become complex. This is even more true when working with repository
+forks. The **ghq** tool simplifies this management by centralizing repositories
+in a specific location on your machine.
+
+Let's say you use work with **dotfiles** and you get a **dotfiles** with the
+command `ghq get https://github.com/mathiasbynens/dotfiles.git`. And now you
+also want to work on your **dotfiles**, no need to worry question where you were
+going to clone your project, you just need to run
+`ghq get https://github.com/badele/dotfiles.git`. After executing these orders,
+the structure of the projects will be clearly organized in your **ghq**
+directory.
+
+```text
+└─ ~/ghq
+ └─ github.com
+ ├─ mathiasbynens
+ │ └─ dotfiles
+ └─ badele
+ └─ dotfiles
+```
+
+Here is an example of using **ghq**
+
+{{< img name="demo-ghq" size=origin lazy=false >}}
diff --git a/content/developer/ghq/_index.fr.md b/content/developer/ghq/_index.fr.md
new file mode 100644
index 0000000..2584f1d
--- /dev/null
+++ b/content/developer/ghq/_index.fr.md
@@ -0,0 +1,43 @@
+---
+title: ghq
+resources:
+ - name: demo-ghq
+ src: demo-ghq.gif
+ title: "ghq demo"
+ params:
+ credits: "generated with `vhs demo-ghq.tape`"
+---
+
+{{< hint type=note title=Intro >}} **[ghq](https://github.com/x-motemen/ghq)**
+permet de cloner un projet sans se soucier où sera cloner le projet, il permet
+égallement de cloner en respectant l'aborescende du repo distant. {{< /hint >}}
+
+## git clone, c'est pourtant simple !
+
+Le processus de clonage avec la commande `git clone` peut sembler simple au
+premier abord, mais lorsqu'on gère plusieurs dépôts **Git**, cela peut
+rapidement devenir complexe. C'est encore plus vrai lorsque l'on travaille avec
+des forks de dépôts. L'outil **ghq** vient simplifier cette gestion en
+centralisant les dépôts dans un emplacement spécifique sur votre machine.
+
+Imaginons que vous utilisiez travailler avec des **dotfiles** et que vous
+récupériez un **dotfiles** avec la commande
+`ghq get https://github.com/mathiasbynens/dotfiles.git`. Et que maintenant vous
+voulez égallement travailler sur votre **dotfiles**, pas besoins de se poser la
+question où vous alliez cloner votre projet, il vous suffit d'exécuter
+`ghq get https://github.com/badele/dotfiles.git`. Après l'exécution de ces
+commandes, la structure des projets sera organisée de manière claire dans votre
+répertoire **ghq**.
+
+```text
+└─ ~/ghq
+ └─ github.com
+ ├─ mathiasbynens
+ │ └─ dotfiles
+ └─ badele
+ └─ dotfiles
+```
+
+Voici un exemple d'utilisation de **ghq**
+
+{{< img name="demo-ghq" size=origin lazy=false >}}
diff --git a/content/developer/ghq/demo-ghq.gif b/content/developer/ghq/demo-ghq.gif
new file mode 100644
index 0000000..fd9feda
Binary files /dev/null and b/content/developer/ghq/demo-ghq.gif differ
diff --git a/content/developer/ghq/demo-ghq.tape b/content/developer/ghq/demo-ghq.tape
new file mode 100644
index 0000000..aefd28a
--- /dev/null
+++ b/content/developer/ghq/demo-ghq.tape
@@ -0,0 +1,25 @@
+Output demo-ghq.gif
+
+Require nix-shell
+
+Set TypingSpeed 75ms
+Set FontSize 12
+Set Width 800
+Set Height 680
+
+Hide
+Type "nix-shell -p ghq tree --run zsh" Sleep 500ms Enter Sleep 2s
+Type "reset" Sleep 500ms Enter Sleep 2s
+Show
+
+Type "tree -d -L 6 ~/ghq" Sleep 500ms Enter Sleep 2s
+
+Type "ghq get https://github.com/mathiasbynens/dotfiles.git" Sleep 500ms Enter Sleep 2s
+
+Type "tree -d -L 6 ~/ghq" Sleep 500ms Enter Sleep 2s
+
+Type "ghq get https://github.com/badele/dotfiles.git" Sleep 500ms Enter Sleep 2s
+
+Type "tree -d -L 6 ~/ghq" Sleep 500ms Enter Sleep 2s
+
+Sleep 5s
diff --git a/content/documenter/VHS/_index.en.md b/content/documenter/VHS/_index.en.md
new file mode 100644
index 0000000..fc620c7
--- /dev/null
+++ b/content/documenter/VHS/_index.en.md
@@ -0,0 +1,50 @@
+---
+title: VHS
+resources:
+ - name: demo-vhs
+ src: demo-vhs.gif
+ title: "VHS demo"
+ params:
+ credits: "generated with `vhs demo-vhs.tape`"
+---
+
+{{< hint type=note title=Intro >}} Sometimes, **A picture is worth a thousand
+words**. [VHS](https://github.com/charmbracelet/vhs) is the perfect tool to
+explain in animated image how to use command line tools {{< /hint >}}
+
+## VHS in pictures
+
+[VHS](https://github.com/charmbracelet/vhs) is a substantially identical tool at
+[asciinema](https://asciinema.org/). Nevertheless **VHS** uses an approach
+declarative (via the creation of a `.tape` file). It allows you to automate the
+execution of a scenario composed of a series of commands to be executed, to then
+record the results of the actions in the form of videos in different formats
+(webm, mp4, gif), which can be particularly useful for documentation or
+knowledge sharing.
+
+Starting from this `demo-vhs.tape` file
+
+```text
+Output demo-vhs.gif
+
+Require nix
+
+Set TypingSpeed 75ms
+Set FontSize 18
+Set Width 800
+Set Height 680
+
+Type "# Install the needed packages" Sleep 500ms Enter Enter Sleep 2s
+
+Type "nix-shell -p dotacat neofetch"
+
+Type "neofetch" Sleep 500ms Enter Sleep 2s
+
+Type "dotacat --help | dotacat" Sleep 500ms Enter
+
+Sleep 5s
+```
+
+We obtain the result below with the following command `vhs demo-vhs.tape`
+
+{{< img name="demo-vhs" size=origin lazy=false >}}
diff --git a/content/documenter/VHS/_index.fr.md b/content/documenter/VHS/_index.fr.md
new file mode 100644
index 0000000..7f669b0
--- /dev/null
+++ b/content/documenter/VHS/_index.fr.md
@@ -0,0 +1,50 @@
+---
+title: VHS
+resources:
+ - name: demo-vhs
+ src: demo-vhs.gif
+ title: "VHS demo"
+ params:
+ credits: "generated with `vhs demo-vhs.tape`"
+---
+
+{{< hint type=note title=Intro >}} Parfois, **Une image vaut mille mots**.
+[VHS](https://github.com/charmbracelet/vhs) est l'outil parfait expliquer en
+image animée comment utiliser des outils en ligne de commande {{< /hint >}}
+
+## VHS en image
+
+[VHS](https://github.com/charmbracelet/vhs) est un outil sensiblement identique
+à [asciinema](https://asciinema.org/). Néamoins **VHS** utilise une approche
+déclarative (via la création de fichier `.tape`). Il permet d'automatiser
+l'éxecution d'un scénario composé d'une suite de commandes à executer, pour
+ensuite enregrister le résultat des actions sous forme de videos dans différents
+formats (webm, mp4, gif), ce qui peut être particulièrement utile pour la
+documentation ou le partage de connaissances.
+
+En partant de ce fichier `demo-vhs.tape`
+
+```text
+Output demo-vhs.gif
+
+Require nix
+
+Set TypingSpeed 75ms
+Set FontSize 18
+Set Width 800
+Set Height 680
+
+Type "# Install the needed packages" Sleep 500ms Enter Enter Sleep 2s
+
+Type "nix-shell -p dotacat neofetch"
+
+Type "neofetch" Sleep 500ms Enter Sleep 2s
+
+Type "dotacat --help | dotacat" Sleep 500ms Enter
+
+Sleep 5s
+```
+
+Nous obtenos le résultat ci-dessous avec commande suivante `vhs demo-vhs.tape`
+
+{{< img name="demo-vhs" size=origin lazy=false >}}
diff --git a/content/documenter/VHS/demo-vhs.gif b/content/documenter/VHS/demo-vhs.gif
new file mode 100644
index 0000000..9f2ef6b
Binary files /dev/null and b/content/documenter/VHS/demo-vhs.gif differ
diff --git a/content/documenter/VHS/demo-vhs.tape b/content/documenter/VHS/demo-vhs.tape
new file mode 100644
index 0000000..19a4e17
--- /dev/null
+++ b/content/documenter/VHS/demo-vhs.tape
@@ -0,0 +1,18 @@
+Output demo-vhs.gif
+
+Require nix-shell
+
+Set TypingSpeed 75ms
+Set FontSize 12
+Set Width 800
+Set Height 680
+
+Type "# Install the needed packages" Sleep 500ms Enter Enter Sleep 2s
+
+Type "nix-shell -p dotacat neofetch" Sleep 500ms Enter Sleep 4s
+
+Type "neofetch" Sleep 500ms Enter Sleep 2s
+
+Type "dotacat --help | dotacat" Sleep 500ms Enter
+
+Sleep 5s
diff --git a/content/documenter/geekdoc/_index.en.md b/content/documenter/geekdoc/_index.en.md
index b8c95ba..5d3dd79 100644
--- a/content/documenter/geekdoc/_index.en.md
+++ b/content/documenter/geekdoc/_index.en.md
@@ -1,5 +1,6 @@
---
-title: Geekdoc
+title: geekdoc
+url: document/geekdoc
resources:
- name: demo-geekdoc
src: demo-geekdoc.gif
@@ -29,6 +30,13 @@ inherit the following features:
But above all thanks to hugo, it is possible to have a documentation site
statistics (no need for `PHP` or `Node.js` server)
+## Example of use
+
+Here is an example of using this template for the site
+[JSL Devops documentation](https://devops.jesuislibre.org)
+
+{{< img name="demo-geekdoc" size=origin lazy=false >}}
+
## Install
Installing `Geekdoc` will use the trio
@@ -49,10 +57,3 @@ cd geekdoc
nix develop
sh init_project
```
-
-## Example of use
-
-Here is an example of using this template for the site
-[JSL Devops documentation](https://devops.jesuislibre.org)
-
-{{< img name="demo-geekdoc" size=origin lazy=false >}}
diff --git a/content/documenter/geekdoc/_index.fr.md b/content/documenter/geekdoc/_index.fr.md
index 06602a2..178e81f 100644
--- a/content/documenter/geekdoc/_index.fr.md
+++ b/content/documenter/geekdoc/_index.fr.md
@@ -1,5 +1,5 @@
---
-title: Geekdoc
+title: geekdoc
resources:
- name: demo-geekdoc
src: demo-geekdoc.gif
@@ -17,10 +17,10 @@ offrent de nombreux avantages pour la création de sites de documentation.
## Pourquoi geekdoc ?
-D'une part, `Geekdoc` offre une structure de navigation claire et organisée, ce
-qui permet aux utilisateurs de trouver rapidement les informations dont ils ont
-besoin, mais égallement `Geekdoc` s'appuie sur [Hugo](https://gohugo.io/), ce
-qui lui permet hériter des features suivantes :
+D'une part, [Geekdoc](https://geekdocs.de/) offre une structure de navigation
+claire et organisée, ce qui permet aux utilisateurs de trouver rapidement les
+informations dont ils ont besoin, mais égallement **Geekdoc** s'appuie sur
+[Hugo](https://gohugo.io/), ce qui lui permet hériter des features suivantes :
- Support du multi-langes
- customisation de fonction grace au shortcodes d'hugo.
@@ -29,15 +29,22 @@ qui lui permet hériter des features suivantes :
Mais surtout grace à hugo, il est possible d'avoir un site de documentation
statisque (pas besoin de serveur `PHP` ou `Node.js`)
+## Exemple d'utilisation
+
+Voici un exemple d'utilisation de ce template pour le site de documentation
+[Devops jesuislibre](https://devops.jesuislibre.org)
+
+{{< img name="demo-geekdoc" size=origin lazy=false >}}
+
## Installation
-L'installation de `Geekdoc` utilisera le trio
+L'installation de **Geekdoc** utilisera le trio
[nix, direnv, just](/onboarding/nix-direnv-just). Ce trio permet d'installer
automatiquement un environement de developpement ainsi qu'il facilite la
contribution à un projet sans devoir installer les outils nécéssaire pour y
contribuer.
-Donc pour installer et configurer `Geekdoc`, commencer par
+Donc pour installer et configurer **Geekdoc**, commencer par
[installer le trio nix, direnv, just](/onboarding/nix-direnv-just).
Ensuite récupérer et configurer le template `hugo-geekdoc` avec les commandes
@@ -49,10 +56,3 @@ cd geekdoc
nix develop
sh init_project
```
-
-## Exemple d'utilisation
-
-Voici un exemple d'utilisation de ce template pour le site
-[JSL Devops documentation](https://devops.jesuislibre.org)
-
-{{< img name="demo-geekdoc" size=origin lazy=false >}}
diff --git a/content/documenter/geekdoc/demo-geekdoc.gif b/content/documenter/geekdoc/demo-geekdoc.gif
index 2bfe415..49c3f94 100644
Binary files a/content/documenter/geekdoc/demo-geekdoc.gif and b/content/documenter/geekdoc/demo-geekdoc.gif differ
diff --git a/content/documenter/geekdoc/demo-geekdoc.tape b/content/documenter/geekdoc/demo-geekdoc.tape
new file mode 100644
index 0000000..6bd9b20
--- /dev/null
+++ b/content/documenter/geekdoc/demo-geekdoc.tape
@@ -0,0 +1,41 @@
+# Output format
+Output demo-geekdoc.gif
+
+Require nix
+
+Set Shell "bash"
+Set FontSize 18
+Set Width 800
+Set Height 680
+
+###############################################################################
+# Init project
+###############################################################################
+
+Type "cd /tmp ; nix flake new -t 'github:badele/nix-projects#hugo-geekdoc' devops.jesuislibre.org" Sleep 500ms Enter
+
+Type "cd /tmp/devops.jesuislibre.org" Sleep 500ms Enter
+
+Type "nix develop" Sleep 500ms Enter Sleep 4s
+
+Type "sh init_project" Sleep 500ms Enter Sleep 1s
+
+Type "github.com" Sleep 500ms Enter Sleep 1s
+
+Type "badele" Sleep 500ms Enter Sleep 1s
+
+Type "devops.jesuislibre.org" Sleep 500ms Enter Sleep 1s
+
+Type "https://devops.jesuislibre.org" Sleep 500ms Enter Sleep 1s
+
+Type "JSL Devops" Sleep 500ms Enter Sleep 1s
+
+###############################################################################
+# Push project
+###############################################################################
+
+Type "git remote add origin git@github.com:badele/devops.jesuislibre.org.git" Sleep 500ms Enter Sleep 1s
+Type "git commit -m 'feat: init project'" Sleep 500ms Enter Sleep 3s
+Type "git push -u origin main" Sleep 500ms Enter Sleep 3s
+
+Sleep 5s
diff --git a/content/documenter/latex/01-simple_example.pdf b/content/documenter/latex/01-simple_example.pdf
new file mode 100644
index 0000000..4447c40
Binary files /dev/null and b/content/documenter/latex/01-simple_example.pdf differ
diff --git a/content/documenter/latex/01-simple_example.png b/content/documenter/latex/01-simple_example.png
new file mode 100644
index 0000000..6ca1bfe
Binary files /dev/null and b/content/documenter/latex/01-simple_example.png differ
diff --git a/content/documenter/latex/01-simple_example.tex b/content/documenter/latex/01-simple_example.tex
new file mode 100644
index 0000000..849f67f
--- /dev/null
+++ b/content/documenter/latex/01-simple_example.tex
@@ -0,0 +1,32 @@
+% Define document type and format
+% available class :article, report, book, letter, beamer
+\documentclass[twocolumn, a4paper, 12pt]{article}
+\usepackage[left=0.5in, right=0.5in]{geometry}
+
+% Use french babel
+\usepackage{french}
+
+% generate a lipsum paragraph
+\usepackage{lipsum}
+
+% Set the title and author
+\title{\Huge Document sample}
+\author{Bruno Adelé}
+
+%allow underfull vbox (allow empty space at the bottom of the page
+\raggedbottom
+
+% Set the space between paragraphs
+\parskip=5pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+\maketitle
+
+\lipsum[1-2]
+\lipsum[6-7]
+
+\end{document}
diff --git a/content/documenter/latex/02-section_example.pdf b/content/documenter/latex/02-section_example.pdf
new file mode 100644
index 0000000..9c788e0
Binary files /dev/null and b/content/documenter/latex/02-section_example.pdf differ
diff --git a/content/documenter/latex/02-section_example.png b/content/documenter/latex/02-section_example.png
new file mode 100644
index 0000000..bb5aaa9
Binary files /dev/null and b/content/documenter/latex/02-section_example.png differ
diff --git a/content/documenter/latex/02-section_example.tex b/content/documenter/latex/02-section_example.tex
new file mode 100644
index 0000000..93bb3ba
--- /dev/null
+++ b/content/documenter/latex/02-section_example.tex
@@ -0,0 +1,46 @@
+% Define document type and format
+% available class :article, report, book, letter, beamer
+\documentclass[a4paper, 12pt]{article}
+
+\listfiles
+
+% Use french babel
+\usepackage{french}
+
+% generate a lipsum paragraph
+\usepackage{lipsum}
+
+% Set the title and author
+\title{\Huge Sections list}
+\author{Bruno Adelé}
+\date{}
+
+%allow underfull vbox
+\raggedbottom
+
+% Set the space between paragraphs
+\parskip=5pt
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+\section{Section}
+\lipsum[1][-2]
+
+\subsection{Subsection}
+\lipsum[2][-2]
+
+\subsubsection{Subsubsection}
+\lipsum[3][-2]
+
+\subsubsection*{Section without counter}
+\addcontentsline{toc}{section}{Section without counter}
+\lipsum[4][-2]
+
+\end{document}
diff --git a/content/documenter/latex/03-textsize_example.pdf b/content/documenter/latex/03-textsize_example.pdf
new file mode 100644
index 0000000..833d204
Binary files /dev/null and b/content/documenter/latex/03-textsize_example.pdf differ
diff --git a/content/documenter/latex/03-textsize_example.png b/content/documenter/latex/03-textsize_example.png
new file mode 100644
index 0000000..9fe36a6
Binary files /dev/null and b/content/documenter/latex/03-textsize_example.png differ
diff --git a/content/documenter/latex/03-textsize_example.tex b/content/documenter/latex/03-textsize_example.tex
new file mode 100644
index 0000000..6c267a5
--- /dev/null
+++ b/content/documenter/latex/03-textsize_example.tex
@@ -0,0 +1,39 @@
+% Define document type and format
+% available class :article, report, book, letter, beamer
+\documentclass[a4paper, 12pt]{article}
+
+% Use french babel
+\usepackage{french}
+
+% generate a lipsum paragraph
+\usepackage{lipsum}
+
+% Set the title and author
+\title{\Huge Sections list}
+\author{Bruno Adelé}
+\date{}
+
+\newcommand{\showsize}[1]{\csname #1 \endcsname $\setminus$#1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+\section{Sizes}
+\noindent \showsize{tiny}
+\showsize{scriptsize}
+\showsize{footnotesize}
+\showsize{small}
+\showsize{normalsize}
+\showsize{large}
+\showsize{Large}
+\showsize{LARGE}
+\showsize{huge}
+\showsize{Huge}
+
+\section{Styles}
+\noindent \textnormal{textnormal} \emph{emph} \textrm{textrm} \textsf{textsf} \texttt{texttt} \textup{textup} \textit{textit} \textsl{textsl} \textsc{textsc} \\
+\uppercase{uppercase} \textbf{textbf} \textmd{textmd}
+
+\end{document}
diff --git a/content/documenter/latex/04-debug_example.pdf b/content/documenter/latex/04-debug_example.pdf
new file mode 100644
index 0000000..088a001
Binary files /dev/null and b/content/documenter/latex/04-debug_example.pdf differ
diff --git a/content/documenter/latex/04-debug_example.png b/content/documenter/latex/04-debug_example.png
new file mode 100644
index 0000000..ba06091
Binary files /dev/null and b/content/documenter/latex/04-debug_example.png differ
diff --git a/content/documenter/latex/04-debug_example.tex b/content/documenter/latex/04-debug_example.tex
new file mode 100644
index 0000000..4a98f87
--- /dev/null
+++ b/content/documenter/latex/04-debug_example.tex
@@ -0,0 +1,34 @@
+% Define document type and format
+% available class :article, report, book, letter, beamer
+\documentclass[draft, showframe, twocolumn, a4paper, 12pt]{article}
+\usepackage[left=0.5in, right=0.5in]{geometry}
+
+% Use french babel
+\usepackage{french}
+
+% generate a lipsum paragraph
+\usepackage{lipsum}
+
+% Set the title and author
+\title{\Huge Document sample}
+\author{Bruno Adelé}
+
+%allow underfull vbox (allow empty space at the bottom of the page
+\raggedbottom
+
+% Set the space between paragraphs
+\parskip=5pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+\maketitle
+
+\lipsum[3-5]
+\lipsum[12]
+
+
+\end{document}
+
diff --git a/content/documenter/latex/_index.en.md b/content/documenter/latex/_index.en.md
new file mode 100644
index 0000000..268d0f5
--- /dev/null
+++ b/content/documenter/latex/_index.en.md
@@ -0,0 +1,153 @@
+---
+title: LaTeX
+resources:
+ - name: vim_latex
+ src: vim_latex.png
+ title: "Vim latex editor"
+ - name: simple_example
+ src: 01-simple_example.png
+ title: "simple example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: section_example
+ src: 02-section_example.png
+ title: "section example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: textsize_example
+ src: 03-textsize_example.png
+ title: "textsize example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: debug_example
+ src: 04-debug_example.png
+ title: "debug example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+---
+
+{{< hint type=note title=Intro >}} **LaTeX** is a programming language layout
+used to create scientific and academic documents with precision. Its
+command-based syntax is reminiscent of the approach of the automation of the IT
+infrastructure (**IAC**) used by **DevOps**. As the IAC makes it possible to
+describe and manage the infrastructure of reproducible way via code, LaTeX
+offers similar control over the presentation of documents, allowing coherent and
+efficient management of complex elements such as mathematical equations and
+references bibliographic.
+
+{{< /hint >}}
+
+## Why LaTeX?
+
+As **DevOps** we like to master code generation, deployment generation, document
+generation. This is why that **[LaTeX](https://www.latex-project.org/)** can be
+a good tool in replacement for Office or LibreOffice.
+
+Without a special editor, coding a LaTeX document is much easier to read an
+Office/LibreOffice document that is saved in format
+**[Office Open XML](https://fr.wikipedia.org/wiki/Office_Open_XML)** LaTeX is
+mainly
+
+Personally, although you can write LaTeX documents with a editor like
+[TeXstudio](https://www.texstudio.org/), it is also possible to use simpler
+editors such as Nano or Vim. For my part, I use
+**[my own IDE](https://github.com/badele/vide)**, based on Vim, which not only
+allows you to edit, reformat, linter and view files LaTeX documents, but also,
+thanks to Nix, to download LaTeX packages.
+
+{{< img name="vim_latex" size=origin lazy=false >}}
+
+## The basics
+
+### The preamble
+
+The preamble allows you to configure the form of your document and to indicate
+the additional packages to download as well as their configuration.
+
+the preamble is inserted between the start of the document and the command
+`\begin{document}`, it allows you to define the global configurations of the
+document, such as the document class, the packages to use, and the metadata.
+
+Here is a simple example
+
+{{< include file="content/documenter/latex/01-simple_example.tex"
+language="latex">}}
+
+{{< img name="simple_example" size=origin lazy=false >}}
+
+### The sections
+
+Sections and subsections in LaTeX are used to organize a document into parts and
+sub-parts, similar to the structuring by titles in Office. In Additionally, it
+is possible to generate a table of contents using the command
+`\tableofcontents`. Additionally, it is possible to include sections not
+numbered in the table of contents by adding an asterisk as a suffix
+(`section*{Title}`).
+
+{{< include file="content/documenter/latex/02-section_example.tex"
+language="latex">}}
+
+{{< img name="section_example" size=origin lazy=false >}}
+
+### Text style
+
+Here is a range of text styles.
+
+{{< include file="content/documenter/latex/03-textsize_example.tex"
+language="latex">}}
+
+{{< img name="textsize_example" size=origin lazy=false >}}
+
+## Some tips
+
+### Debug
+
+#### In the Preamble
+
+##### draf, showframe
+
+LaTeX is a tool that aims to produce optimal formatting for documents, but when
+it encounters rules that it cannot apply, it generates warnings or errors.
+However, these error messages can sometimes be difficult to understand. To
+resolve these problems, it is possible enable a debug mode that provides
+additional information for understand and correct errors.
+
+By adding the `draft` and `showframe` options to the `\documentclass` command,
+you can display the borders of the boxes as well as turn the boxes black problem
+parts.
+
+{{< include file="content/documenter/latex/04-debug_example.tex"
+language="latex">}}
+
+{{< img name="debug_example" size=origin lazy=false >}}
+
+##### listfiles
+
+To list the installed packages, simply add the command `\listfiles` in the
+preamble, during the next compilation via `pdflatex` you will have command
+output the list of files.
+
+```text
+ *File List*
+ article.cls 2023/05/17 v1.4n Standard LaTeX document class
+ size12.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
+ french.sty 2019/09/06 The e-french package /V6,11/
+ msg.sty 2019/01/01 loading localization extension (V0.51).
+latexsym.sty 1998/08/17 v2.2e Standard LaTeX package (lasy symbols)
+fenglish.sty 2004/06/23 english interface for the french(le/pro) package
+ lipsum.sty 2021-09-20 v2.7 150 paragraphs of Lorem Ipsum dummy text
+l3keys2e.sty 2024-02-18 LaTeX2e option processing using LaTeX3 keys
+ expl3.sty 2024-02-20 L3 programming layer (loader)
+l3backend-pdftex.def 2024-02-20 L3 backend support: PDF output (pdfTeX)
+ lipsum.ltd
+ t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern
+ french.cfg
+ ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions
+ *****
+```
+
+### Fonts
+
+- List of fonts https://tug.org/FontCatalogue/allfonts.html
+- Comprehensive LaTeX Symbol List
+ http://mirrors.ctan.org/info/symbols/comprehensive/symbols-a4.pdf
diff --git a/content/documenter/latex/_index.fr.md b/content/documenter/latex/_index.fr.md
new file mode 100644
index 0000000..0d403f3
--- /dev/null
+++ b/content/documenter/latex/_index.fr.md
@@ -0,0 +1,157 @@
+---
+title: LaTeX
+resources:
+ - name: vim_latex
+ src: vim_latex.png
+ title: "Vim latex editor"
+ - name: simple_example
+ src: 01-simple_example.png
+ title: "simple example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: section_example
+ src: 02-section_example.png
+ title: "section example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: textsize_example
+ src: 03-textsize_example.png
+ title: "textsize example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+ - name: debug_example
+ src: 04-debug_example.png
+ title: "debug example"
+ params:
+ credits: "auto-generated with `just doc-generate-tex-sample` command"
+---
+
+{{< hint type=note title=Intro >}} **LaTeX** est un langage de programmation de
+mise en page utilisé pour créer des documents scientifiques et académiques avec
+précision. Sa syntaxe basée sur des commandes rappelle l'approche de
+l'automatisation de l'infrastructure informatique (**IAC**) utilisée par les
+**DevOps**. Comme l'IAC permet de décrire et de gérer l'infrastructure de
+manière reproductible via du code, LaTeX offre un contrôle similaire sur la
+présentation des documents, permettant une gestion cohérente et efficace des
+éléments complexes tels que les équations mathématiques et les références
+bibliographiques.
+
+{{< /hint >}}
+
+## Pourquoi LaTeX ?
+
+En tant que **DevOps** on aime bien maitriser la génération de code, la
+génération de déploiement, la génération de documents. C'est pour cette raison
+que **[LaTeX](https://www.latex-project.org/)** peu être un bon outil en
+remplacement de Office ou LibreOffice.
+
+Sans éditeur particulier, le code d'un documents LaTeX est beaucoup plus facile
+à lire qu'un document Office/LibreOffice qui sont enregistrés au format
+**[Office Open XML](https://fr.wikipedia.org/wiki/Office_Open_XML)** LaTeX est
+principalement
+
+Personnellement, bien que l'on puisse rédiger des documents LaTeX avec un
+éditeur comme [TeXstudio](https://www.texstudio.org/), il est également possible
+d'utiliser des éditeurs plus simples tels que Nano ou Vim. Pour ma part,
+j'utilise [mon propre IDE**](https://github.com/badele/vide), basé sur Vim, qui
+permet non seulement d'éditer, de reformater, linter et de visualiser des
+documents LaTeX, mais également, grâce à Nix, de télécharger des packages LaTeX.
+
+{{< img name="vim_latex" size=origin lazy=false >}}
+
+## Les bases
+
+### Le préambule
+
+Le préambule permet de configurer la forme de son document ainsi d'indiquer les
+packages supplémentaires à télécharger ainsi que de leur configuration.
+
+le préambule s'insère entre le début du document et la commande
+`\begin{document}`, il permet de définir les configurations globales du
+document, tel que la classe du document, les packages à utiliser et les
+métadonnées.
+
+Voici un exemple simple
+
+{{< include file="content/documenter/latex/01-simple_example.tex"
+language="latex">}}
+
+{{< img name="simple_example" size=origin lazy=false >}}
+
+### Les sections
+
+Les sections et sous-sections en LaTeX servent à organiser un document en
+parties et sous-parties, similaire à la structuration par titres sous Office. En
+outre, il est possible de générer une table des matières à l'aide de la commande
+`\tableofcontents`. De plus, il est possible d'inclure des sections non
+numérotées dans la table des matières en ajoutant un astérisque en suffixe
+(`section*{Titre}`).
+
+{{< include file="content/documenter/latex/02-section_example.tex"
+language="latex">}}
+
+{{< img name="section_example" size=origin lazy=false >}}
+
+### Style de textes
+
+Voici un éventail des styles de texte.
+
+{{< include file="content/documenter/latex/03-textsize_example.tex"
+language="latex">}}
+
+{{< img name="textsize_example" size=origin lazy=false >}}
+
+## Quelques astuces
+
+### Debug
+
+#### Dans le Préambule
+
+##### draf, showframe
+
+LaTeX est un outil qui vise à produire un formatage optimal pour les documents,
+mais lorsqu'il rencontre des règles qu'il ne peut pas appliquer, il génère des
+avertissements ou des erreurs. Cependant, ces messages d'erreur peuvent parfois
+être difficiles à comprendre. Pour résoudre ces problèmes, il est possible
+d'activer un mode de débogage qui fournit des informations supplémentaires pour
+comprendre et corriger les erreurs.
+
+En ajoutant les options `draft` et `showframe` à la commande `\documentclass`,
+vous pouvez afficher les bordures des boîtes ainsi que mettre en noir les
+parties posant problème.
+
+{{< include file="content/documenter/latex/04-debug_example.tex"
+language="latex">}}
+
+{{< img name="debug_example" size=origin lazy=false >}}
+
+##### listfiles
+
+Pour lister les packages installés, il sufft d'ajouter la commande `\listfiles`
+dans le préambule, lors de la prochaine compilation via `pdflatex` vous aurez en
+sortie de commande la liste des fichiers.
+
+```text
+ *File List*
+ article.cls 2023/05/17 v1.4n Standard LaTeX document class
+ size12.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
+ french.sty 2019/09/06 The e-french package /V6,11/
+ msg.sty 2019/01/01 chargement de l'extension de localisation (V0.51).
+latexsym.sty 1998/08/17 v2.2e Standard LaTeX package (lasy symbols)
+fenglish.sty 2004/06/23 english interface for the french(le/pro) package
+ lipsum.sty 2021-09-20 v2.7 150 paragraphs of Lorem Ipsum dummy text
+l3keys2e.sty 2024-02-18 LaTeX2e option processing using LaTeX3 keys
+ expl3.sty 2024-02-20 L3 programming layer (loader)
+l3backend-pdftex.def 2024-02-20 L3 backend support: PDF output (pdfTeX)
+ lipsum.ltd
+ t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern
+ french.cfg
+ ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions
+ ***********
+```
+
+### Divers
+
+- Liste des fontes https://tug.org/FontCatalogue/allfonts.html
+- Comprehensive LaTeX Symbol List
+ http://mirrors.ctan.org/info/symbols/comprehensive/symbols-a4.pdf
diff --git a/content/documenter/latex/vim_latex.png b/content/documenter/latex/vim_latex.png
new file mode 100644
index 0000000..f6fac7b
Binary files /dev/null and b/content/documenter/latex/vim_latex.png differ
diff --git a/content/mentions_legales.md b/content/mentions_legales.md
new file mode 100644
index 0000000..785b062
--- /dev/null
+++ b/content/mentions_legales.md
@@ -0,0 +1,42 @@
+---
+title: Mentions légales
+---
+
+## Contact
+
+**Bruno Adelé:**
+
+- email: `brunoadele@gmail.com`
+- mastodon: `@jesuislibre@mamot.fr`
+- bluesky: `@jesuislibre.bsky.social`
+- X: `@jesuislibre`
+- github: `https://github.com/badele`
+- linkedin: `https://www.linkedin.com/in/brunoadele`
+
+## Politique de confidentialité
+
+Collecte de données et d'informations générales
+
+Les pages de ce site sont hébergé par la société [yulpa](https://yulpa.io/) Le
+site Internet devops.jesuislibre.org a travers les services de **yulpa**
+collecte une série de données et d'informations générales lorsqu'une personne
+concernée ou un système automatisé visualise une page du site Internet. Ces
+données et informations générales sont stockées dans les fichiers journaux du
+serveur. Les collectes peuvent être :
+
+- Les types et versions de navigateurs utilisés
+- Le système d'exploitation utilisé
+- Le site Web à partir duquel la personne vient
+- La date et l'heure d'accès au site Internet
+- L'adresse IP
+- Toute autre donnée et information similaire qui pourrait être utilisée en cas
+ d'attaques sur nos systèmes informatiques
+
+Lors de l'utilisation de ces données et informations générales, nous ne tirons
+aucune conclusion sur la personne concernée. Ces informations sont plutôt
+nécessaires pour fournir correctement le contenu de notre site Internet.
+
+## Cookie & Tracking
+
+Ce site n'utilise aucun cookies ni outil de suivi afin de cibler les
+internautes.
diff --git a/content/onboarding/nix-direnv-just/_index.en.md b/content/onboarding/nix-direnv-just/_index.en.md
new file mode 100644
index 0000000..6511eca
--- /dev/null
+++ b/content/onboarding/nix-direnv-just/_index.en.md
@@ -0,0 +1,275 @@
+---
+title: Nix, Direnv, Just, the trio that makes life easier
+tags:
+ - OnboardingReady
+resources:
+ - name: demo-onboarding
+ src: demo-onboarding.gif
+ title: "JSL Devops onboarding demo"
+ params:
+ credits: "Onboarding for the devops.jesuislibre.org project"
+---
+
+{{< hint type="note" title="Introduction" >}}
+
+Nothing is more frustrating when working on a project than having to:
+
+- Search for the necessary tools to work on this project (compilation,
+ development, etc.).
+- Manage the versions of installed packages based on their installation date.
+- Manage the distributions on which these packages are installed (used package
+ manager).
+
+{{< /hint >}}
+
+During the development phase of a project, maintaining a consistent development
+environment that evolves over time is quite challenging, due in part to the
+following:
+
+- Some packages are not available on all distributions of Windows, MacOS, Linux
+ (Ubuntu, Archlinux, Fedora, Suse, etc.).
+- Package versions may become unavailable due to distribution changes.
+
+Some modern programming languages have recognized this challenge and have
+dependency management systems with locking features to ensure the
+reproducibility of development environments, including:
+
+- Go
+- Python
+- Ruby
+- Rust
+- etc ...
+
+These systems allow for maintaining the same dependencies throughout the
+project's lifecycle, but this only applies to the libraries used and not to all
+third-party tools.
+
+That's why I use the trio:
+
+- **Nix:** Enables obtaining a reproducible system.
+- **Direnv:** Allows executing a command upon entering a directory.
+- **Just:** Provides a command runner and help display.
+
+## Example of use
+
+Here is an example of use for the documentation project of
+[JSL Devops](https://devops.jesuislibre.org)
+
+At first, you will notice that the `just` and `hugo` tools are not available in
+the user's distribution. However, without intervention on his part, you will
+find that they become available thanks to `Nix` and the `flake.nix` file.
+
+{{< img name="demo-onboarding" size=origin lazy=false >}}
+
+## Installation
+
+### Direnv
+
+Install the direnv package
+
+```shell
+# install direnv
+curl -sfL https://direnv.net/install.sh | bash
+```
+
+Configure the shell to take `direnv` into account during a new shell.
+
+{{< tabs "shell-config" >}}
+
+{{< tab "Bash" >}}
+
+Add the following line to the end of the `~/.bashrc` file:
+
+```shell
+eval "$(direnv hook bash)"
+```
+
+Add the following line to the end of the `~/.zshrc` file:
+
+{{< /tab >}}
+
+{{< tab "ZSH" >}}
+
+```shell
+eval "$(direnv hook zsh)"
+```
+
+{{< /tab >}}
+
+{{< tab "FISH" >}}
+
+Add the following line to the end of the `~/.config/fish/config.fish` file:
+
+```shell
+direnv hook fish | source
+```
+
+Fish supports 3 modes which you can set with environment variable global
+`direnv_fish_mode`:
+
+```text
+set -g direnv_fish_mode eval_on_arrow # Trigger direnv at the prompt, and on each directory change with arrow (default)
+set -g direnv_fish_mode eval_after_arrow # Trigger direnv at prompt, and only after arrow changes directory before executing command
+set -g direnv_fish_mode disable_arrow # Trigger direnv at prompt only, this is similar functionality to the original behavior
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+### Nix
+
+{{< tabs "os-installation" >}}
+
+{{< tab "Linux" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install) --daemon
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< tab "Windows" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install) --daemon
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< tab "MacOS" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install)
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+{{< hint type=note title="To note" >}}
+
+Once **nix** and **direnv** are installed, when you first access the directory
+of a project, you will have to authorize the automatic execution of **direnv**
+with the following command: `direnv allow`
+
+{{< /hint >}}
+
+{{< hint type=tip title=Tips >}}
+
+You can also launch onboarding with the following command `nix develop`
+
+{{< /hint >}}
+
+### just
+
+The `just` tool will be installed automatically with `nix` and `flake`, see the
+next section.
+
+## Configuration of the onboarding project
+
+To activate the onboarding of the project, simply copy the 3 files below in the
+root directory of your project.
+
+```text
+projet
+├─ .envrc
+├─ flake.nix
+└─ justfile
+```
+
+Configuring the **.envrc** file
+
+```shell
+use flake
+```
+
+Configuring the **flake.nix** file
+
+```nix
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ };
+ outputs = { nixpkgs, flake-utils, ... }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in
+ {
+ devShells.default = with pkgs;
+ mkShell {
+ name = "Default developpement shell";
+ packages = [
+ cocogitto
+ nixpkgs-fmt
+ nodePackages.markdownlint-cli
+ pre-commit
+
+ deno
+ gum
+ just
+ ];
+ shellHook = ''
+ export PROJ="devops.jesuislibre.org"
+
+ echo ""
+ echo "⭐ Welcome to the $PROJ project ⭐"
+ echo ""
+ '';
+ };
+ });
+}
+```
+
+Configuring the **justfile** file
+
+```text
+#!/usr/bin/env just -f
+
+# This help
+# Help it showed if just is called without arguments
+@help:
+ just -lu | column -s '#' -t | sed 's/[ \t]*$//'
+
+###############################################################################
+# pre-commit
+###############################################################################
+
+# Setup pre-commit
+precommit-install:
+ #!/usr/bin/env bash
+ test ! -f .git/hooks/pre-commit && pre-commit install || true
+
+# Update pre-commit
+@precommit-update:
+ pre-commit autoupdate
+
+# precommit check
+@precommit-check:
+ pre-commit run --all-files
+
+###############################################################################
+# Tools
+###############################################################################
+
+# Update documentation
+@doc-update FAKEFILENAME:
+ ./updatedoc.ts
+
+# Lint the project
+@lint:
+ pre-commit run --all-files
+
+# Repl the project
+@repl:
+ nix repl --extra-experimental-features repl-flake .#
+
+# Show installed packages
+@packages:
+ echo $PATH | tr ":" "\n" | grep -E "/nix/store" | sed -e "s/\/nix\/store\/[a-z0-9]\+\-//g" | sed -e "s/\/.*//g"
+```
diff --git a/content/onboarding/nix-direnv-just/_index.fr.md b/content/onboarding/nix-direnv-just/_index.fr.md
new file mode 100644
index 0000000..c5a5f13
--- /dev/null
+++ b/content/onboarding/nix-direnv-just/_index.fr.md
@@ -0,0 +1,280 @@
+---
+title: Nix, Direnv, Just, le trio qui simplifie la vie
+date: 2024-04-14
+resources:
+ - name: demo-onboarding
+ src: demo-onboarding.gif
+ title: "JSL Devops onboarding demo"
+ params:
+ credits: "Onboarding pour le projet devops.jesuislibre.org"
+---
+
+{{< hint type="note" title="Introduction" >}}
+
+Rien n'est plus frustrant lorsqu'on travaille sur un projet que de devoir :
+
+- Chercher les outils nécessaires pour travailler sur ce projet (compilation,
+ développement, etc.).
+- Gérer les versions des paquets installés en fonction de leur date
+ d'installation.
+- Gérer les distributions sur lesquelles ces paquets sont installés
+ (gestionnaire de paquets utilisé).
+
+{{< /hint >}}
+
+Pendant la phase de développement d'un projet, maintenir un environnement de
+développement cohérent qui évolue au fil du temps est assez difficile, en raison
+notamment des éléments suivants :
+
+- Certains paquets ne sont pas disponibles sur toutes les distributions Windows,
+ MacOS, Linux (Ubuntu, Archlinux, Fedora, Suse, etc.).
+- Des versions de paquets peuvent devenir indisponibles suite à l'évolution
+ d'une distribution.
+
+Certains langages de programmation modernes l'ont bien compris, ils disposent de
+systèmes de gestion de dépendances dotés de fonctionnalités de verrouillage pour
+assurer la reproductibilité des environnements de développement, notamment :
+
+- Go
+- Python
+- Ruby
+- Rust
+- etc ...
+
+Ces systèmes permettent de maintenir les mêmes dépendances tout au long de la
+durée de vie du projet, mais cela ne s'applique qu'aux bibliothèques utilisées
+et non à tous les outils tiers.
+
+C'est pour cette raison que j'utilise le trio :
+
+- **Nix:** Permet d'obtenir un système reproductible.
+- **Direnv:** Permet d'exécuter une commande lors de l'entrée dans un
+ répertoire.
+- **Just:** Fournit un gestionnaire de commandes ainsi que l'affichage de
+ l'aide.
+
+## Exemple d'utilisation
+
+Voici un exemple d'utilisation pour le projet de documentation de
+[JSL Devops](https://devops.jesuislibre.org)
+
+Dans un premier temps, vous remarquerez que les outils `just` et `hugo` ne sont
+pas disponibles dans la distribution de l'utilisateur. Cependant, sans
+intervention de sa part, vous constaterez qu'ils deviennent disponibles grâce à
+`Nix` et au fichier `flake.nix`.
+
+{{< img name="demo-onboarding" size=origin lazy=false >}}
+
+## Installation
+
+### Direnv
+
+Installer le paquet direnv
+
+```shell
+# install direnv
+curl -sfL https://direnv.net/install.sh | bash
+```
+
+Configurer le shell pour la prise en compte de `direnv` lors d'un nouveau shell.
+
+{{< tabs "shell-config" >}}
+
+{{< tab "Bash" >}}
+
+Ajouter la ligne suivante à la fin du fichier `~/.bashrc` :
+
+```shell
+eval "$(direnv hook bash)"
+```
+
+Ajouter la ligne suivante à la fin du fichier `~/.zshrc` :
+
+{{< /tab >}}
+
+{{< tab "ZSH" >}}
+
+```shell
+eval "$(direnv hook zsh)"
+```
+
+{{< /tab >}}
+
+{{< tab "FISH" >}}
+
+Ajouter la ligne suivante à la fin du fichier `~/.config/fish/config.fish` :
+
+```shell
+direnv hook fish | source
+```
+
+Fish supporte 3 modes que vous pouvez définir avec la variable d'environnement
+globale `direnv_fish_mode` :
+
+```text
+set -g direnv_fish_mode eval_on_arrow # Déclenche direnv à l'invite, et à chaque changement de répertoire par flèche (par défaut)
+set -g direnv_fish_mode eval_after_arrow # Déclenche direnv à l'invite, et seulement après les changements de répertoire par flèche avant d'exécuter la commande
+set -g direnv_fish_mode disable_arrow # Déclenche direnv à l'invite uniquement, il s'agit d'une fonctionnalité similaire au comportement original
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+### Nix
+
+{{< tabs "os-installation" >}}
+
+{{< tab "Linux" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install) --daemon
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< tab "Windows" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install) --daemon
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< tab "MacOS" >}}
+
+```shell
+sh <(curl -L https://nixos.org/nix/install)
+grep 'experimental-features' /etc/nix/nix.conf || (echo 'experimental-features = nix-command flakes' | sudo tee -a /etc/nix/nix.conf)
+```
+
+{{< /tab >}}
+
+{{< /tabs >}}
+
+{{< hint type=note title="A noter" >}}
+
+Une fois **nix** et **direnv** installés, lors de votre premier accès au
+répertoire d'un projet, vous devrez autoriser l'exécution automatique de
+**direnv** avec la commande suivante : `direnv allow`
+
+{{< /hint >}}
+
+{{< hint type=tip title=Conseil >}}
+
+Vous pouvez égallement lancer le onboarding avec la commande suivante
+`nix develop`
+
+{{< /hint >}}
+
+### just
+
+L'outil `just` sera installé automatiquement avec `nix` et `flake`, voir la
+section suivante.
+
+## Configuration du Onboarding projet
+
+Pour activer l'onboarding du projet, il suffit de copier les 3 fichiers
+ci-dessous dans le repertoire racine de votre projet.
+
+```text
+projet
+├─ .envrc
+├─ flake.nix
+└─ justfile
+```
+
+Configuration du fichier **.envrc**
+
+```shell
+use flake
+```
+
+Configuration du fichier **flake.nix**
+
+```nix
+{
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
+ };
+ outputs = { nixpkgs, flake-utils, ... }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in
+ {
+ devShells.default = with pkgs;
+ mkShell {
+ name = "Default developpement shell";
+ packages = [
+ cocogitto
+ nixpkgs-fmt
+ nodePackages.markdownlint-cli
+ pre-commit
+
+ deno
+ gum
+ just
+ ];
+ shellHook = ''
+ export PROJ="devops.jesuislibre.org"
+
+ echo ""
+ echo "⭐ Welcome to the $PROJ project ⭐"
+ echo ""
+ '';
+ };
+ });
+}
+```
+
+Configuration du fichier **justfile**
+
+```text
+#!/usr/bin/env just -f
+
+# This help
+# Help it showed if just is called without arguments
+@help:
+ just -lu | column -s '#' -t | sed 's/[ \t]*$//'
+
+###############################################################################
+# pre-commit
+###############################################################################
+
+# Setup pre-commit
+precommit-install:
+ #!/usr/bin/env bash
+ test ! -f .git/hooks/pre-commit && pre-commit install || true
+
+# Update pre-commit
+@precommit-update:
+ pre-commit autoupdate
+
+# precommit check
+@precommit-check:
+ pre-commit run --all-files
+
+###############################################################################
+# Tools
+###############################################################################
+
+# Update documentation
+@doc-update FAKEFILENAME:
+ ./updatedoc.ts
+
+# Lint the project
+@lint:
+ pre-commit run --all-files
+
+# Repl the project
+@repl:
+ nix repl --extra-experimental-features repl-flake .#
+
+# Show installed packages
+@packages:
+ echo $PATH | tr ":" "\n" | grep -E "/nix/store" | sed -e "s/\/nix\/store\/[a-z0-9]\+\-//g" | sed -e "s/\/.*//g"
+```
diff --git a/content/onboarding/nix-direnv-just/demo-onboarding.gif b/content/onboarding/nix-direnv-just/demo-onboarding.gif
new file mode 100644
index 0000000..252c0e4
Binary files /dev/null and b/content/onboarding/nix-direnv-just/demo-onboarding.gif differ
diff --git a/content/onboarding/nix-direnv-just/demo-onboarding.tape b/content/onboarding/nix-direnv-just/demo-onboarding.tape
new file mode 100644
index 0000000..6962d54
--- /dev/null
+++ b/content/onboarding/nix-direnv-just/demo-onboarding.tape
@@ -0,0 +1,43 @@
+# Output format
+Output demo-onboarding.gif
+
+Require nix
+
+Set Shell "bash"
+Set FontSize 18
+Set Width 800
+Set Height 680
+
+###############################################################################
+# No Nix onboaring Environment
+###############################################################################
+
+Type "# No nix onboarding environement available" Sleep 500ms Enter Enter Sleep 1s
+
+Type "cd /tmp" Sleep 500ms Enter
+
+Type "just" Sleep 500ms Enter Sleep 2s
+
+Type "hugo" Sleep 500ms Enter Sleep 3s
+
+Type "clear" Sleep 500ms Enter
+Type "# Now we will use the nix onboarding environement" Sleep 500ms Enter Enter Sleep 2s
+
+###############################################################################
+# Nix onboarding Environment
+###############################################################################
+
+
+Type "cd ~/ghq/github.com/badele/devops.jesuislibre.org" Sleep 500ms Enter
+
+# Emulate direnv
+Hide
+Type "nix develop" Sleep 500ms Enter Sleep 4s
+Show
+
+Type "just" Sleep 500ms Enter Sleep 2s
+
+Type "hugo version" Sleep 500ms Enter Sleep 2s
+
+Sleep 5s
+
diff --git a/flake.nix b/flake.nix
index a80629e..e683d08 100644
--- a/flake.nix
+++ b/flake.nix
@@ -22,6 +22,18 @@
gum
hugo
just
+
+ # Latex
+ (texlive.combine {
+ inherit (texlive)
+ scheme-medium msg tabularray ninecolors lipsum;
+ })
+ pplatex
+ texlab
+ zathura
+
+ # Convert PDF to PNG
+ ghostscript
];
shellHook = ''
export PROJ="devops.jesuislibre.org"
diff --git a/hugo.yaml b/hugo.yaml
index bf991e0..b54a65e 100644
--- a/hugo.yaml
+++ b/hugo.yaml
@@ -27,7 +27,7 @@ languages:
pygmentsUseClasses: true
pygmentsCodeFences: true
disablePathToLower: true
-enableGitInfo: false
+enableGitInfo: true
# Required if you want to render robots.txt template
enableRobotsTXT: true
@@ -53,7 +53,7 @@ params:
# (Optional, default static/brand.svg) Set the path to a logo for the Geekdoc
# relative to your 'static/' folder.
- # geekdocLogo: logo.png
+ geekdocLogo: logo.png
# (Optional, default false) Render menu from data file in 'data/menu/main.yaml'.
# See also https://geekdocs.de/usage/menus/#bundle-menu.
@@ -90,11 +90,11 @@ params:
# (Optional, default none) Add a link to your Legal Notice page to the site footer.
# It can be either a remote url or a local file path relative to your content directory.
- geekdocLegalNotice: none
+ geekdocLegalNotice: mentions_legales/#contact
# (Optional, default none) Add a link to your Privacy Policy page to the site footer.
# It can be either a remote url or a local file path relative to your content directory.
- geekdocPrivacyPolicy: none
+ geekdocPrivacyPolicy: mentions_legales/#politique-de-confidentialit%c3%a9
# (Optional, default true) Add an anchor link to headlines.
geekdocAnchor: true
diff --git a/justfile b/justfile
index ccad585..dda4a8f 100644
--- a/justfile
+++ b/justfile
@@ -37,13 +37,40 @@ hugo-download-theme:
@hugo-init: hugo-download-theme
hugo new site . > /dev/null
+# Hugo serve the locally content
@hugo-serve:
- hugo serve --debug --cleanDestinationDir -D
+ GIT_COMMIT_SHA=`git rev-parse --verify HEAD` GIT_COMMIT_SHA_SHORT=`git rev-parse --short HEAD` hugo serve --debug --cleanDestinationDir -D
+
+# Hugo build the content
+hugo-build:
+ GIT_COMMIT_SHA=`git rev-parse --verify HEAD` GIT_COMMIT_SHA_SHORT=`git rev-parse --short HEAD` hugo --cleanDestinationDir
+
+# Hugo test publish the content
+hugo-publishtest: hugo-build
+ rsync -avrn --delete public/ w4a153382@ssh.web4all.fr:/datas/vol3/w4a153382/var/www/devops.jesuislibre.org/htdocs/
+
+# Hugo publish the content
+hugo-publish: hugo-build
+ rsync -avr --delete public/ w4a153382@ssh.web4all.fr:/datas/vol3/w4a153382/var/www/devops.jesuislibre.org/htdocs/
###############################################################################
# Tools
###############################################################################
+# Generate documentation samples
+doc-generate-tex-sample:
+ #!/usr/bin/env bash
+ find . -type f -name '*.tex' | while read file; do
+ # get file informations
+ filename=$(basename -- "$file")
+ filename="${filename%.*}"
+ dirname=$(dirname -- "$file")
+ # generate pdf
+ pdflatex --output-dir "$dirname" "$file"
+ # convert pdf to png
+ convert -background white -alpha remove -alpha off -density 150 "$dirname/$filename.pdf" "$dirname/$filename.png"
+ done
+
# Update documentation
@doc-update FAKEFILENAME:
./updatedoc.ts
diff --git a/layouts/partials/site-footer.html b/layouts/partials/site-footer.html
new file mode 100644
index 0000000..31ae8e1
--- /dev/null
+++ b/layouts/partials/site-footer.html
@@ -0,0 +1,45 @@
+
diff --git a/layouts/partials/site-header.html b/layouts/partials/site-header.html
new file mode 100644
index 0000000..fad190c
--- /dev/null
+++ b/layouts/partials/site-header.html
@@ -0,0 +1,77 @@
+
diff --git a/static/custom.css b/static/custom.css
new file mode 100644
index 0000000..ce43ce9
--- /dev/null
+++ b/static/custom.css
@@ -0,0 +1,5 @@
+.gdoc-brand__img {
+ margin-right: 1rem;
+ width: unset;
+ height: unset;
+}
diff --git a/static/logo.png b/static/logo.png
new file mode 100644
index 0000000..81154b8
Binary files /dev/null and b/static/logo.png differ