I discovered Archivebox and decided to install it on my server using containers.
+
I just had to make a couple of adjustements, because all the content on the instance is publically available. I do not want that, I want to restrict access with user accounts.
+
To do so, start by finding out the container name, and open a shell:
on archlinux, to see when you installed arch on your computer, run this command
+
sed -n "/ installed $1/{s/].*/]/p;q}" /var/log/pacman.log
+
+
it will display the date and the time when you ran pacstrap on the live cd to install your system.
+
on my laptop, i get [2018-10-21 21:05], which is when i switched from fedora back to arch because my school required fedora.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/atom.xml b/atom.xml
new file mode 100644
index 0000000..47e1ff2
--- /dev/null
+++ b/atom.xml
@@ -0,0 +1,1349 @@
+
+
+ deadbaed
+ broke my bed now it's dead
+
+
+ Zola
+ 2024-03-02T00:00:00+00:00
+ https://blog.x4m3.rocks/atom.xml
+
+ First setup of Archivebox
+ 2024-03-02T00:00:00+00:00
+ 2024-03-02T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/archivebox-setup/
+
+ <p>I discovered <a href="https://archivebox.io">Archivebox</a> and decided to install it on my server using containers.</p>
+<p>I just had to make a couple of adjustements, because all the content on the instance is publically available. I do not want that, I want to restrict access with user accounts.</p>
+<p>To do so, start by finding out the container name, and open a shell:</p>
+<pre data-lang="shell" style="background-color:#fcf0ca;color:#282828aa;" class="language-shell "><code class="language-shell" data-lang="shell"><span>docker exec --user=archivebox -it container-name-goes-here bash
+</span></code></pre>
+<p>Go into the directory where Archivebox data is stored, and you will be able to run command to manage the instance.</p>
+<h2 id="hide-everything-from-the-public">Hide everything from the public</h2>
+<pre data-lang="shell" style="background-color:#fcf0ca;color:#282828aa;" class="language-shell "><code class="language-shell" data-lang="shell"><span>archivebox config --set SAVE_ARCHIVE_DOT_ORG=False
+</span><span>archivebox config --set PUBLIC_INDEX=False
+</span><span>archivebox config --set PUBLIC_SNAPSHOTS=False
+</span><span>archivebox config --set PUBLIC_ADD_VIEW=False
+</span></code></pre>
+<h2 id="create-first-user-account">Create first user account</h2>
+<p>Now that you cut outside world access to your instance, create an admin user to access and add new content:</p>
+<pre data-lang="shell" style="background-color:#fcf0ca;color:#282828aa;" class="language-shell "><code class="language-shell" data-lang="shell"><span>archivebox manage createsuperuser
+</span></code></pre>
+<p>Once finished, exit the shell and restart Archivebox.</p>
+
+
+
+
+ Setup a private Docker registry
+ 2023-07-15T00:00:00+00:00
+ 2023-07-15T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/docker-private-registry/
+
+ <p>My internal infrastructure is complete. I can now work on my projects, but at some point they need to go out to the world!</p>
+<p>The platform for most of my projects is the web, and the best tool I found so far to deploy them is Docker.</p>
+<p>I want to keep the code on the private infrastructure, but I also want to be in control of where the docker images will be stored.</p>
+<p>The perfect solution is a private Docker registry! But it will not be on the internal infrastructure, it will be publicly available on a regular server.</p>
+<p>That way, projects can be deployed in their final form whenever and wherever, while the source remaining private.</p>
+<h1 id="get-started-locally">Get started locally</h1>
+<p>To start, I will launch a test registry on my machine to make sure everything works.</p>
+<p>I will use these docker images:</p>
+<ul>
+<li><a href="https://hub.docker.com/_/registry">registry</a>: The official registry made by Docker themselves</li>
+<li><a href="https://joxit.dev/docker-registry-ui">docker-registry-ui</a>: A nice webui to view and manage images on the registry</li>
+</ul>
+<p>Here's the docker-compose file I used to get started:</p>
+<pre data-lang="yaml" style="background-color:#fcf0ca;color:#282828aa;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="font-weight:bold;color:#407959;">services</span><span>:
+</span><span>
+</span><span> </span><span style="font-weight:bold;color:#407959;">registry-server</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">image</span><span>: </span><span style="color:#79740e;">registry:2.8.2
+</span><span> </span><span style="font-weight:bold;color:#407959;">ports</span><span>:
+</span><span> - </span><span style="color:#79740e;">5000:5000
+</span><span> </span><span style="font-weight:bold;color:#407959;">volumes</span><span>:
+</span><span> - </span><span style="color:#79740e;">./registry-data:/var/lib/registry
+</span><span> - </span><span style="color:#79740e;">./passwords:/auth/htpasswd
+</span><span> </span><span style="font-weight:bold;color:#407959;">environment</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH</span><span>: </span><span style="color:#79740e;">'htpasswd'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH_HTPASSWD_REALM</span><span>: </span><span style="color:#79740e;">'Registry Realm'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH_HTPASSWD_PATH</span><span>: </span><span style="color:#79740e;">'/auth/htpasswd'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Origin</span><span>: </span><span style="color:#79740e;">'[http://registry.example.com]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods</span><span>: </span><span style="color:#79740e;">'[HEAD,GET,OPTIONS,DELETE]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Credentials</span><span>: </span><span style="color:#79740e;">'[true]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers</span><span>: </span><span style="color:#79740e;">'[Authorization,Accept,Cache-Control]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers</span><span>: </span><span style="color:#79740e;">'[Docker-Content-Digest]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_STORAGE_DELETE_ENABLED</span><span>: </span><span style="color:#79740e;">'true'
+</span><span> </span><span style="font-weight:bold;color:#407959;">container_name</span><span>: </span><span style="color:#79740e;">registry-server
+</span><span>
+</span><span> </span><span style="font-weight:bold;color:#407959;">registry-ui</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">image</span><span>: </span><span style="color:#79740e;">joxit/docker-registry-ui:2.5.0
+</span><span> </span><span style="font-weight:bold;color:#407959;">ports</span><span>:
+</span><span> - </span><span style="color:#79740e;">8001:80
+</span><span> </span><span style="font-weight:bold;color:#407959;">environment</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">SINGLE_REGISTRY</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_TITLE</span><span>: </span><span style="color:#79740e;">Docker Registry UI
+</span><span> </span><span style="font-weight:bold;color:#407959;">DELETE_IMAGES</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">SHOW_CONTENT_DIGEST</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">NGINX_PROXY_PASS_URL</span><span>: </span><span style="color:#79740e;">http://registry-server:5000
+</span><span> </span><span style="font-weight:bold;color:#407959;">SHOW_CATALOG_NB_TAGS</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_MIN_BRANCHES</span><span>: </span><span style="color:#8f3f71;">1
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_MAX_BRANCHES</span><span>: </span><span style="color:#8f3f71;">1
+</span><span> </span><span style="font-weight:bold;color:#407959;">TAGLIST_PAGE_SIZE</span><span>: </span><span style="color:#8f3f71;">100
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_SECURED</span><span>: </span><span style="color:#8f3f71;">false
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_ELEMENTS_LIMIT</span><span>: </span><span style="color:#8f3f71;">1000
+</span><span> </span><span style="font-weight:bold;color:#407959;">container_name</span><span>: </span><span style="color:#79740e;">registry-ui
+</span></code></pre>
+<p>But don't start the services right away.</p>
+<h1 id="authentication">Authentication</h1>
+<p>I don't want the registry being open to everyone though, let's add some authentication.</p>
+<p>To keep things simple, I will use HTTP basic auth. If you want, there's a possibility to have a more <a href="https://docs.docker.com/registry/spec/auth/">complex setup</a>.</p>
+<p>Here's a quick script to get passwords in a format that Docker will accept:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="font-style:italic;color:#928374;">#!/bin/sh
+</span><span style="font-style:italic;color:#928374;">#
+</span><span style="font-style:italic;color:#928374;"># new-password.sh
+</span><span>
+</span><span style="color:#9d0006;">if </span><span style="color:#b57614;">[ </span><span style="color:#282828;">-z </span><span style="color:#79740e;">"$</span><span style="color:#282828;">1</span><span style="color:#79740e;">" </span><span style="color:#b57614;">]
+</span><span style="color:#9d0006;">then
+</span><span style="color:#b57614;">echo </span><span style="color:#79740e;">"usage: $</span><span style="color:#282828;">0</span><span style="color:#79740e;"> username"
+</span><span style="color:#b57614;">exit</span><span style="color:#282828;"> 1
+</span><span style="color:#9d0006;">fi
+</span><span>
+</span><span style="color:#b57614;">echo </span><span style="color:#79740e;">"creating password for user \"$</span><span style="color:#282828;">1</span><span style="color:#79740e;">\""
+</span><span style="color:#282828;">htpasswd -nB $1
+</span></code></pre>
+<p>How to use it:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">$ ./new-password.sh phil
+</span><span style="color:#282828;">creating password for user </span><span style="color:#79740e;">"phil"
+</span><span style="color:#282828;">New password: phil
+</span><span style="color:#282828;">Re-type new password: phil
+</span><span style="color:#282828;">phil:$2y$05$asxsqfmEQJpg8zuKGyieMOmTirok.Gd/noliF.y48DJXe.97ufGHG
+</span></code></pre>
+<p>Copy the last line in the <code>passwords</code> file (see the <code>docker-compose</code> file).</p>
+<p>Repeat the process for every user you want to give authentication to your registry.</p>
+<p>Keep in mind I only cover <strong>AUTHENTICATION</strong> (who can access the registry), and not <strong>AUTHORIZATION</strong> (who can do what on the registry). With this setup, if you have access to the registry, you can do anything on it.</p>
+<h1 id="use-the-registry">Use the registry</h1>
+<p>Start the services with</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">docker compose up
+</span></code></pre>
+<p>Now, you can access the webui by going to</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>http://localhost:8001
+</span></code></pre>
+<p>in a web browser and sign-in with your credentials. You should see an empty list. Let's add some images!</p>
+<h2 id="naming-images">Naming images</h2>
+<p>Pick an image you want on the registry.</p>
+<p>If it's an existing image:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">docker tag name-of-existing-image localhost:5000/existing-image-name
+</span></code></pre>
+<p>If you build the image directly:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">docker build -t localhost:5000/new-image-name
+</span></code></pre>
+<p>The name of the image must have the domain of the registry, in our case it's <code>localhost:5000</code>.</p>
+<h2 id="login-to-registry">Login to registry</h2>
+<p>To sign in to the registry, use</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">docker login localhost:5000
+</span></code></pre>
+<p>and enter your credentials.</p>
+<h2 id="push-pull">Push / Pull</h2>
+<p>Simply run the usual docker command to push or pull images. Docker will know which registry to use based of the image's name.</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">docker push localhost:5000/new-image-name
+</span><span style="color:#282828;">docker pull localhost:5000/existing-image-name
+</span></code></pre>
+<p>That's pretty much it!</p>
+<h1 id="deploy-to-production">Deploy to production</h1>
+<p>I use <a href="https://caprover.com">Caprover</a> to deploy my docker images easily, it comes with a reverse proxy and automatic TLS certificates with Let's encrypt.</p>
+<p>Here's the one-click-app config I created for the registry:</p>
+<pre data-lang="yaml" style="background-color:#fcf0ca;color:#282828aa;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="font-weight:bold;color:#407959;">captainVersion</span><span>: </span><span style="color:#8f3f71;">4
+</span><span>
+</span><span style="font-weight:bold;color:#407959;">services</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">$$cap_appname-registry</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">image</span><span>: </span><span style="color:#79740e;">registry:$$cap_registry_version
+</span><span> </span><span style="font-weight:bold;color:#407959;">volumes</span><span>:
+</span><span> - </span><span style="color:#79740e;">$$cap_appname-data:/var/lib/registry
+</span><span> - </span><span style="color:#79740e;">$$cap_appname-auth:/auth/
+</span><span> </span><span style="font-weight:bold;color:#407959;">environment</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH</span><span>: </span><span style="color:#79740e;">'htpasswd'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH_HTPASSWD_REALM</span><span>: </span><span style="color:#79740e;">'Registry Realm'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_AUTH_HTPASSWD_PATH</span><span>: </span><span style="color:#79740e;">'/auth/htpasswd'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Origin</span><span>: </span><span style="color:#79740e;">'[https://$$cap_appname-registry.$$cap_root_domain, https://$$cap_appname-ui.$$cap_root_domain]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods</span><span>: </span><span style="color:#79740e;">'[HEAD,GET,OPTIONS,DELETE]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Credentials</span><span>: </span><span style="color:#79740e;">'[true]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers</span><span>: </span><span style="color:#79740e;">'[Authorization,Accept,Cache-Control]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers</span><span>: </span><span style="color:#79740e;">'[Docker-Content-Digest]'
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_STORAGE_DELETE_ENABLED</span><span>: </span><span style="color:#79740e;">'true'
+</span><span> </span><span style="font-weight:bold;color:#407959;">caproverExtra</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">containerHttpPort</span><span>: </span><span style="color:#79740e;">'5000'
+</span><span>
+</span><span> </span><span style="font-weight:bold;color:#407959;">$$cap_appname-ui</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">image</span><span>: </span><span style="color:#79740e;">joxit/docker-registry-ui:$$cap_ui_version
+</span><span> </span><span style="font-weight:bold;color:#407959;">environment</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">SINGLE_REGISTRY</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_TITLE</span><span>: </span><span style="color:#79740e;">Docker Registry UI
+</span><span> </span><span style="font-weight:bold;color:#407959;">DELETE_IMAGES</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">SHOW_CONTENT_DIGEST</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">NGINX_PROXY_PASS_URL</span><span>: </span><span style="color:#79740e;">http://srv-captain--$$cap_appname-registry:5000
+</span><span> </span><span style="font-weight:bold;color:#407959;">SHOW_CATALOG_NB_TAGS</span><span>: </span><span style="color:#8f3f71;">true
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_MIN_BRANCHES</span><span>: </span><span style="color:#8f3f71;">1
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_MAX_BRANCHES</span><span>: </span><span style="color:#8f3f71;">1
+</span><span> </span><span style="font-weight:bold;color:#407959;">TAGLIST_PAGE_SIZE</span><span>: </span><span style="color:#8f3f71;">100
+</span><span> </span><span style="font-weight:bold;color:#407959;">REGISTRY_SECURED</span><span>: </span><span style="color:#8f3f71;">false
+</span><span> </span><span style="font-weight:bold;color:#407959;">CATALOG_ELEMENTS_LIMIT</span><span>: </span><span style="color:#8f3f71;">1000
+</span><span>
+</span><span style="font-weight:bold;color:#407959;">caproverOneClickApp</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">variables</span><span>:
+</span><span> - </span><span style="font-weight:bold;color:#407959;">id</span><span>: </span><span style="color:#79740e;">'$$cap_registry_version'
+</span><span> </span><span style="font-weight:bold;color:#407959;">label</span><span>: </span><span style="color:#79740e;">Registry Version
+</span><span> </span><span style="font-weight:bold;color:#407959;">defaultValue</span><span>: </span><span style="color:#79740e;">'2.8.2'
+</span><span> </span><span style="font-weight:bold;color:#407959;">description</span><span>: </span><span style="color:#79740e;">Check out the Docker page for the valid tags https://hub.docker.com/_/registry/tags
+</span><span> </span><span style="font-weight:bold;color:#407959;">validRegex</span><span>: </span><span style="color:#79740e;">"/.{1,}/"
+</span><span> - </span><span style="font-weight:bold;color:#407959;">id</span><span>: </span><span style="color:#79740e;">'$$cap_ui_version'
+</span><span> </span><span style="font-weight:bold;color:#407959;">label</span><span>: </span><span style="color:#79740e;">UI Version
+</span><span> </span><span style="font-weight:bold;color:#407959;">defaultValue</span><span>: </span><span style="color:#79740e;">'2.5.0'
+</span><span> </span><span style="font-weight:bold;color:#407959;">description</span><span>: </span><span style="color:#79740e;">Check out the Docker page for the valid tags https://hub.docker.com/r/joxit/docker-registry-ui/tags
+</span><span> </span><span style="font-weight:bold;color:#407959;">validRegex</span><span>: </span><span style="color:#79740e;">"/.{1,}/"
+</span><span> </span><span style="font-weight:bold;color:#407959;">instructions</span><span>:
+</span><span> </span><span style="font-weight:bold;color:#407959;">start</span><span>: </span><span style="color:#9d0006;">|-
+</span><span style="color:#79740e;"> A private docker registry, with a webui to see images
+</span><span> </span><span style="font-weight:bold;color:#407959;">end</span><span>: </span><span style="color:#9d0006;">|-
+</span><span style="color:#79740e;"> The registry has been deployed! Look in the "auth" volume to update credentials
+</span><span> </span><span style="font-weight:bold;color:#407959;">displayName</span><span>: </span><span style="color:#79740e;">docker-registry-with-ui
+</span><span> </span><span style="font-weight:bold;color:#407959;">isOfficial</span><span>: </span><span style="color:#8f3f71;">false
+</span><span> </span><span style="font-weight:bold;color:#407959;">description</span><span>: </span><span style="color:#79740e;">A private docker registry, with a webui to see images
+</span><span> </span><span style="font-weight:bold;color:#407959;">documentation</span><span>: </span><span style="color:#79740e;">https://docs.docker.com/registry/
+</span></code></pre>
+
+
+
+
+ Setup a service on our internal infrastructure on Alpine Linux
+ 2023-07-02T00:00:00+00:00
+ 2023-07-02T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/service-internal-infra-alpine/
+
+ <p>Now we have a basic internal infrastructure with:</p>
+<ul>
+<li>Everything hidden and encrypted through the network (WireGuard)</li>
+<li>Pretty internal domain names instead of raw ip addresses (CoreDNS)</li>
+<li>A basic http server just in case (Caddy)</li>
+<li>Our own TLS certificates that are easy to get (Step CA)</li>
+</ul>
+<p>But everything is on the same machine. While it could be okay, I will host the services I want on other machines.</p>
+<p>I will run them on the same Proxmox cluster, but the possibilities are endless (as long you can get WireGuard running).</p>
+<h1 id="get-started">Get started</h1>
+<p>Install Alpine. Setup ssh and repositories.</p>
+<h1 id="wireguard">WireGuard</h1>
+<p>We will set up WireGuard, but not a server, a regular peer that will connect to the WireGuard server.</p>
+<p>Create a new peer on the WireGuard server, and get the config file ready.</p>
+<h2 id="install">Install</h2>
+<p>Install WireGuard:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add wireguard-tools
+</span></code></pre>
+<p>To load the WireGuard module on startup, edit</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/modules
+</span></code></pre>
+<p>and simply add</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>wireguard
+</span></code></pre>
+<p>and reboot.</p>
+<h2 id="configure">Configure</h2>
+<p>Put the WireGuard config to</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/wireguard/wg0.conf
+</span></code></pre>
+<h2 id="start">Start</h2>
+<p>Copy the <code>init.d</code> script for WireGuard like we did for the original server.</p>
+<p>And ask it to start on boot.</p>
+<p>Reboot and make sure everything works, you should see WireGuard logs when the machine is starting.</p>
+<p>And the DNS should be working! Try to ping an internal DNS name.</p>
+<p>Sometimes the DNS will go back to the system's default (probably your DHCP server's), so force the DNS as seen in the post about CoreDNS.</p>
+<h1 id="dns-entry">DNS entry</h1>
+<p>In the main server, edit CoreDNS to add a new DNS entry for the newly added peer.</p>
+<p>Save and restart CoreDNS.</p>
+<h1 id="motd">MOTD</h1>
+<p>Add the dynamic MOTD if you feel like it. I did.</p>
+<h1 id="reverse-proxy">Reverse proxy</h1>
+<p>Before installing and starting services, let's add a reverse proxy for security + some sweet TLS certs.</p>
+<p>I'll be using caddy. You will need to enable the <code>community</code> repo first.</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add caddy
+</span></code></pre>
+<p>Let's get a hello world:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">/etc/caddy/Caddyfile
+</span></code></pre>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span># global
+</span><span>{
+</span><span> # step-ca ACME server
+</span><span> acme_ca https://10.131.111.1:444/acme/acme/directory
+</span><span>}
+</span><span>
+</span><span>docker.philt3r docker.philt3r:80 {
+</span><span> respond "Hello, world!"
+</span><span>}
+</span></code></pre>
+<p>I start the service on ports <code>80</code> and <code>443</code> to get the initial TLS certificate, I will remove access on port <code>80</code> afterward.</p>
+<p>Don't start caddy yet.</p>
+<h1 id="tls-certificates">TLS certificates</h1>
+<p>On our new server, we need to trust the root ca. Download the root ca, and ask the system to trust it:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add ca-certificates ca-certificates-bundle
+</span><span style="color:#282828;">wget --no-check-certificate https://10.131.111.1:444/roots.pem -O /usr/local/share/ca-certificates/philt3r.crt
+</span><span style="color:#282828;">update-ca-certificates
+</span></code></pre>
+<p>Now we can start caddy and enable it on boot:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">rc-service caddy start
+</span><span style="color:#282828;">rc-update add caddy
+</span></code></pre>
+<p>You should get a Hello World on port 443. If you do, you can disable access from port <code>80</code> in the Caddyfile and restart caddy.</p>
+<h1 id="install-the-service">Install the service</h1>
+<p>Now we can install the service we want to host, start it, and configure caddy to be a reverse proxy for it.</p>
+<p>Repeat the process for the other services you want to host.</p>
+<p>Protip: serve the services on <code>127.0.0.1</code> and use caddy to restrict access only from the WireGuard peers (since there is the DNS restriction).</p>
+<p>Sample <code>Caddyfile</code>:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span># global
+</span><span>{
+</span><span> # step-ca ACME server
+</span><span> acme_ca https://10.131.111.1:444/acme/acme/directory
+</span><span>}
+</span><span>
+</span><span>docker.philt3r {
+</span><span> reverse_proxy 127.0.0.1:3000
+</span><span>}
+</span></code></pre>
+<h1 id="docker">Docker</h1>
+<p>Since I'll be using Docker to host most services, I'll install it:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add docker docker-compose
+</span><span style="color:#282828;">rc-update add docker
+</span><span style="color:#282828;">rc-service docker start
+</span></code></pre>
+<p>Then spin up your docker containers and route them with caddy.</p>
+
+
+
+
+ Dynamic MOTD on Alpine Linux
+ 2023-06-30T00:00:00+00:00
+ 2023-06-30T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/dynamic-motd-alpine/
+
+ <p>When we sign in to our server, the message of the day (MOTD) is pretty lame. Let's get something better!</p>
+<p>This is the default MOTD of alpine:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>Welcome to Alpine!
+</span><span>
+</span><span>The Alpine Wiki contains a large amount of how-to guides and general
+</span><span>information about administrating Alpine systems.
+</span><span>See <http://wiki.alpinelinux.org>.
+</span><span>
+</span><span>You can setup the system with the command: setup-alpine
+</span><span>
+</span><span>You may change this message by editing /etc/motd.
+</span></code></pre>
+<p>And here's my new MOTD. I even show the WireGuard ip address:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>
+</span><span>
+</span><span> Name: intra.philt3r
+</span><span> Kernel: 6.1.35-0-lts
+</span><span> Distro: Alpine Linux v3.18
+</span><span> Version 3.18.2
+</span><span>
+</span><span> Uptime: 0 days, 0 hours, 22 minutes
+</span><span> CPU Load: 0.00, 0.00, 0.00
+</span><span>
+</span><span> Memory: 468M
+</span><span> Free Memory: 217M
+</span><span>
+</span><span> Disk: 6.6G
+</span><span> Free Disk: 6.6G
+</span><span>
+</span><span> eth0 Address: 192.168.1.71
+</span><span> wg0 Address: 10.131.111.1
+</span><span>
+</span><span>
+</span></code></pre>
+<p>Start and enable cron at startup (it should be installed by default):</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">rc-service crond start
+</span><span style="color:#282828;">rc-update add crond
+</span></code></pre>
+<p>Let's run a script every 15 minutes to update the <code>/etc/motd</code> file:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/periodic/15min/motd
+</span></code></pre>
+<p>Here's the content of my MOTD:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="font-style:italic;color:#928374;">#!/bin/sh
+</span><span style="font-style:italic;color:#928374;">#. /etc/os-release
+</span><span style="color:#282828;">PRETTY_NAME</span><span style="color:#b23c15;">=</span><span style="color:#282828;">`awk -F</span><span style="color:#b23c15;">= </span><span style="color:#79740e;">'$1=="PRETTY_NAME" { print $2 ;}'</span><span style="color:#282828;"> /etc/os-release </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tr -d </span><span style="color:#79740e;">'"'</span><span style="color:#282828;">`
+</span><span style="color:#282828;">VERSION_ID</span><span style="color:#b23c15;">=</span><span style="color:#282828;">`awk -F</span><span style="color:#b23c15;">= </span><span style="color:#79740e;">'$1=="VERSION_ID" { print $2 ;}'</span><span style="color:#282828;"> /etc/os-release`
+</span><span style="color:#282828;">UPTIME_DAYS</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">$(</span><span style="color:#282828;">expr `cat /proc/uptime </span><span style="color:#b23c15;">| </span><span style="color:#282828;">cut -d </span><span style="color:#79740e;">'.'</span><span style="color:#282828;"> -f1` % 31556926 / 86400</span><span style="color:#79740e;">)
+</span><span style="color:#282828;">UPTIME_HOURS</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">$(</span><span style="color:#282828;">expr `cat /proc/uptime </span><span style="color:#b23c15;">| </span><span style="color:#282828;">cut -d </span><span style="color:#79740e;">'.'</span><span style="color:#282828;"> -f1` % 31556926 % 86400 / 3600</span><span style="color:#79740e;">)
+</span><span style="color:#282828;">UPTIME_MINUTES</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">$(</span><span style="color:#282828;">expr `cat /proc/uptime </span><span style="color:#b23c15;">| </span><span style="color:#282828;">cut -d </span><span style="color:#79740e;">'.'</span><span style="color:#282828;"> -f1` % 31556926 % 86400 % 3600 / 60</span><span style="color:#79740e;">)
+</span><span style="color:#282828;">cat </span><span style="color:#b23c15;">></span><span style="color:#282828;"> /etc/motd </span><span style="color:#b23c15;"><< </span><span style="color:#9d0006;">EOF
+</span><span style="color:#282828;">
+</span><span style="color:#282828;">
+</span><span style="color:#282828;"> Name: `hostname`
+</span><span style="color:#282828;"> Kernel: `uname -r`
+</span><span style="color:#282828;"> Distro: $PRETTY_NAME
+</span><span style="color:#282828;"> Version $VERSION_ID
+</span><span style="color:#282828;">
+</span><span style="color:#282828;"> Uptime: $UPTIME_DAYS days, $UPTIME_HOURS hours, $UPTIME_MINUTES minutes
+</span><span style="color:#282828;"> CPU Load: `cat /proc/loadavg </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk </span><span style="color:#79740e;">'{print $1 ", " $2 ", " $3}'</span><span style="color:#282828;">`
+</span><span style="color:#282828;">
+</span><span style="color:#282828;"> Memory: `free -m </span><span style="color:#b23c15;">| </span><span style="color:#282828;">head -n 2 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tail -n 1 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk {</span><span style="color:#79740e;">'print $2'</span><span style="color:#282828;">}`M
+</span><span style="color:#282828;"> Free Memory: `free -m </span><span style="color:#b23c15;">| </span><span style="color:#282828;">head -n 2 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tail -n 1 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk {</span><span style="color:#79740e;">'print $4'</span><span style="color:#282828;">}`M
+</span><span style="color:#282828;">
+</span><span style="color:#282828;"> Disk: `df -h / </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk </span><span style="color:#79740e;">'{ a = $2 } END { print a }'</span><span style="color:#282828;">`
+</span><span style="color:#282828;"> Free Disk: `df -h / </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk </span><span style="color:#79740e;">'{ a = $2 } END { print a }'</span><span style="color:#282828;">`
+</span><span style="color:#282828;">
+</span><span style="color:#282828;"> eth0 Address: `ifconfig eth0 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">grep </span><span style="color:#79740e;">"inet addr" </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk -F: </span><span style="color:#79740e;">'{print $2}' </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk </span><span style="color:#79740e;">'{print $1}'</span><span style="color:#282828;">`
+</span><span style="color:#282828;"> wg0 Address: `ifconfig wg0 </span><span style="color:#b23c15;">| </span><span style="color:#282828;">grep </span><span style="color:#79740e;">"inet addr" </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk -F: </span><span style="color:#79740e;">'{print $2}' </span><span style="color:#b23c15;">| </span><span style="color:#282828;">awk </span><span style="color:#79740e;">'{print $1}'</span><span style="color:#282828;">`
+</span><span style="color:#282828;">
+</span><span style="color:#282828;">
+</span><span style="color:#9d0006;">EOF
+</span></code></pre>
+<p>Make the script executable, and check if it's good:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">chmod a+x /etc/periodic/15min/motd
+</span><span style="color:#282828;">run-parts --test /etc/periodic/15min
+</span></code></pre>
+<p>If you're lazy and don't want to wait 15 minutes, run the script directly:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">/etc/periodic/15min/motd
+</span></code></pre>
+<p>Log out and log back in, you should see the new MOTD!</p>
+<h1 id="resources">Resources</h1>
+<p><a href="https://kingtam.win/archives/apline-custom.html">https://kingtam.win/archives/apline-custom.html</a></p>
+<p>I just copy/pasted and changed the MOTD.</p>
+
+
+
+
+ Setup Caddy with a CA and ACME server on Alpine Linux
+ 2023-06-28T00:00:00+00:00
+ 2023-06-28T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/caddy-ca-acme-alpine/
+
+ <p>Now that we have a WireGuard VPN with an awesome internal DNS server, let's get a web server with HTTPS!</p>
+<h1 id="caddy">Caddy</h1>
+<h2 id="install">Install</h2>
+<p>You will need to enable the <code>community</code> repo first.</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas apk add caddy
+</span></code></pre>
+<h2 id="configuration">Configuration</h2>
+<p>Create a folder to serve stuff from, I placed it in</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/srv/www
+</span></code></pre>
+<p>Create the config in</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">/etc/caddy/Caddyfile
+</span></code></pre>
+<p>Here's the config, it's very simple to get started:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>intra.philt3r:80
+</span><span>root * /srv/www
+</span><span>file_server browse
+</span></code></pre>
+<p>This config will only launch an HTTP server, the HTTPS will come later.</p>
+<p>It should work only from the WireGuard peers, since they can resolve the DNS name <code>intra.philt3r</code>.</p>
+<p>If there is no <code>index.html</code> in the folder, it will serve static files directly.</p>
+<h2 id="script-to-launch">Script to launch</h2>
+<p>Caddy already has a service!</p>
+<ul>
+<li>Start: <code>rc-service caddy start</code></li>
+<li>Stop: <code>rc-service caddy stop</code></li>
+<li>Reload configuration without downtime: <code>rc-service caddy reload</code></li>
+</ul>
+<h1 id="generate-keys-and-certificates">Generate keys and certificates</h1>
+<p>We will generate the Root CA, the Intermediate CA.</p>
+<p>Generate these with <code>openssl</code> installed on a computer, preferabbly offline.</p>
+<p>Make sure the keys are stored in a safe place, I will store mine inside of a KeePassXC keystore.</p>
+<h2 id="openssl-configuration">OpenSSL Configuration</h2>
+<p>inside a folder, create a file</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>config.conf
+</span></code></pre>
+<p>In <code>[CA_root]</code>, make sure to put your folder <code>dir</code></p>
+<pre data-lang="ini" style="background-color:#fcf0ca;color:#282828aa;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="font-style:italic;color:#928374;"># OpenSSL root CA configuration file.
+</span><span>
+</span><span style="color:#9d0006;">[ ca ]
+</span><span style="font-style:italic;color:#928374;"># `man ca`
+</span><span style="color:#282828;">default_ca </span><span style="color:#b23c15;">=</span><span> CA_root
+</span><span>
+</span><span style="color:#9d0006;">[ CA_root ]
+</span><span style="font-style:italic;color:#928374;"># Directory and file locations.
+</span><span style="color:#282828;">dir </span><span style="color:#b23c15;">= /</span><span>home</span><span style="color:#b23c15;">/</span><span>phil</span><span style="color:#b23c15;">/</span><span>ca
+</span><span style="color:#282828;">certs </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>certs
+</span><span style="color:#282828;">crl_dir </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>crl
+</span><span style="color:#282828;">new_certs_dir </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>newcerts
+</span><span style="color:#282828;">database </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>index</span><span style="color:#b23c15;">.</span><span>txt
+</span><span style="color:#282828;">serial </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>serial
+</span><span style="color:#b57614;">RANDFILE </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>private</span><span style="color:#b23c15;">/.</span><span>rand
+</span><span>
+</span><span style="font-style:italic;color:#928374;"># The root key and root certificate.
+</span><span style="font-style:italic;color:#928374;"># Match names with Smallstep naming convention
+</span><span style="color:#282828;">private_key </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>root_ca_key
+</span><span style="color:#282828;">certificate </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>root_ca</span><span style="color:#b23c15;">.</span><span>crt
+</span><span>
+</span><span style="font-style:italic;color:#928374;"># For certificate revocation lists.
+</span><span style="color:#282828;">crlnumber </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>crlnumber
+</span><span style="color:#282828;">crl </span><span style="color:#b23c15;">= </span><span style="color:#9d0006;">$dir</span><span style="color:#b23c15;">/</span><span>crl</span><span style="color:#b23c15;">/</span><span>ca</span><span style="color:#b23c15;">.</span><span>crl</span><span style="color:#b23c15;">.</span><span>pem
+</span><span style="color:#282828;">crl_extensions </span><span style="color:#b23c15;">=</span><span> crl_ext
+</span><span style="color:#282828;">default_crl_days </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">30
+</span><span>
+</span><span style="font-style:italic;color:#928374;"># SHA-1 is deprecated, so use SHA-2 instead.
+</span><span style="color:#282828;">default_md </span><span style="color:#b23c15;">=</span><span> sha256
+</span><span>
+</span><span style="color:#282828;">name_opt </span><span style="color:#b23c15;">=</span><span> ca_default
+</span><span style="color:#282828;">cert_opt </span><span style="color:#b23c15;">=</span><span> ca_default
+</span><span style="color:#282828;">default_days </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">25202
+</span><span style="color:#282828;">preserve </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">no
+</span><span style="color:#282828;">policy </span><span style="color:#b23c15;">=</span><span> policy_strict
+</span><span>
+</span><span style="color:#9d0006;">[ policy_strict ]
+</span><span style="font-style:italic;color:#928374;"># The root CA should only sign intermediate certificates that match.
+</span><span style="font-style:italic;color:#928374;"># See the POLICY FORMAT section of `man ca`.
+</span><span style="color:#282828;">countryName </span><span style="color:#b23c15;">=</span><span> match
+</span><span style="color:#282828;">stateOrProvinceName </span><span style="color:#b23c15;">=</span><span> supplied
+</span><span style="color:#282828;">localityName </span><span style="color:#b23c15;">=</span><span> supplied
+</span><span style="color:#282828;">organizationName </span><span style="color:#b23c15;">=</span><span> match
+</span><span style="color:#282828;">commonName </span><span style="color:#b23c15;">=</span><span> supplied
+</span><span>
+</span><span style="color:#9d0006;">[ req ]
+</span><span style="font-style:italic;color:#928374;"># Options for the `req` tool (`man req`).
+</span><span style="color:#282828;">default_bits </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">4096
+</span><span style="color:#282828;">distinguished_name </span><span style="color:#b23c15;">=</span><span> req_distinguished_name
+</span><span style="color:#282828;">string_mask </span><span style="color:#b23c15;">=</span><span> utf8only
+</span><span>
+</span><span style="font-style:italic;color:#928374;"># SHA-1 is deprecated, so use SHA-2 instead.
+</span><span style="color:#282828;">default_md </span><span style="color:#b23c15;">=</span><span> sha256
+</span><span>
+</span><span style="font-style:italic;color:#928374;"># Extension to add when the -x509 option is used.
+</span><span style="color:#282828;">x509_extensions </span><span style="color:#b23c15;">=</span><span> v3_ca
+</span><span>
+</span><span style="color:#9d0006;">[ req_distinguished_name ]
+</span><span style="font-style:italic;color:#928374;"># See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
+</span><span style="color:#282828;">countryName </span><span style="color:#b23c15;">=</span><span> Country (</span><span style="color:#8f3f71;">2</span><span> letter code)
+</span><span style="color:#282828;">stateOrProvinceName </span><span style="color:#b23c15;">=</span><span> State or Region
+</span><span style="color:#282828;">localityName </span><span style="color:#b23c15;">=</span><span> City
+</span><span style="color:#282828;">commonName </span><span style="color:#b23c15;">=</span><span> Common Name
+</span><span style="color:#8f3f71;">0</span><span style="color:#b23c15;">.</span><span>organizationName </span><span style="color:#b23c15;">=</span><span> Organization Name
+</span><span>
+</span><span style="color:#9d0006;">[ v3_ca ]
+</span><span style="font-style:italic;color:#928374;"># Extensions for a typical CA (`man x509v3_config`).
+</span><span style="color:#282828;">subjectKeyIdentifier </span><span style="color:#b23c15;">=</span><span> hash
+</span><span style="color:#282828;">authorityKeyIdentifier </span><span style="color:#b23c15;">=</span><span> keyid</span><span style="color:#b23c15;">:</span><span>always</span><span style="color:#b23c15;">,</span><span>issuer
+</span><span style="color:#282828;">basicConstraints </span><span style="color:#b23c15;">=</span><span> critical</span><span style="color:#b23c15;">, </span><span style="color:#b57614;">CA</span><span style="color:#b23c15;">:</span><span style="color:#8f3f71;">true
+</span><span style="color:#282828;">keyUsage </span><span style="color:#b23c15;">=</span><span> critical</span><span style="color:#b23c15;">,</span><span> digitalSignature</span><span style="color:#b23c15;">,</span><span> cRLSign</span><span style="color:#b23c15;">,</span><span> keyCertSign
+</span><span>
+</span><span style="color:#9d0006;">[ v3_intermediate_ca ]
+</span><span style="font-style:italic;color:#928374;"># Extensions for a typical intermediate CA (`man x509v3_config`).
+</span><span style="color:#282828;">subjectKeyIdentifier </span><span style="color:#b23c15;">=</span><span> hash
+</span><span style="color:#282828;">authorityKeyIdentifier </span><span style="color:#b23c15;">=</span><span> keyid</span><span style="color:#b23c15;">:</span><span>always</span><span style="color:#b23c15;">,</span><span>issuer
+</span><span style="color:#282828;">basicConstraints </span><span style="color:#b23c15;">=</span><span> critical</span><span style="color:#b23c15;">, </span><span style="color:#b57614;">CA</span><span style="color:#b23c15;">:</span><span style="color:#8f3f71;">true</span><span style="color:#b23c15;">,</span><span> pathlen</span><span style="color:#b23c15;">:</span><span style="color:#8f3f71;">0
+</span><span style="color:#282828;">keyUsage </span><span style="color:#b23c15;">=</span><span> critical</span><span style="color:#b23c15;">,</span><span> digitalSignature</span><span style="color:#b23c15;">,</span><span> cRLSign</span><span style="color:#b23c15;">,</span><span> keyCertSign
+</span><span>
+</span></code></pre>
+<p>After, run</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">mkdir newcerts
+</span><span style="color:#282828;">touch index.txt
+</span><span style="color:#b57614;">echo</span><span style="color:#282828;"> 1420 </span><span style="color:#b23c15;">></span><span style="color:#282828;"> serial
+</span></code></pre>
+<p>We are now ready to generate keys and certificates.</p>
+<h2 id="root-key-and-certificate">Root key and certificate</h2>
+<p>Generate key:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">openssl genrsa -aes256 -out root_ca_key 4096
+</span></code></pre>
+<p>It will ask for a passphrase, I generated mine with my KeePassXC.</p>
+<p>Generate root certificate:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">openssl req -config config.conf -key root_ca_key -days 3650 -new -x509 -sha256 -extensions v3_ca -out root_ca.crt
+</span></code></pre>
+<p>My root CA will last for 3650 days (10 years).</p>
+<p>Here's the info I provided:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>Country (2 letter code) []:FR
+</span><span>State or Region []:Bretagne
+</span><span>City []:Rennes
+</span><span>Common Name []:philt3r CA
+</span><span>Organization Name []:philt3r
+</span></code></pre>
+<p>I saved the <code>root_ca_key</code> and <code>root_ca.crt</code> inside my KeePassXC.</p>
+<h2 id="intermediate-key-and-certificate">Intermediate key and certificate</h2>
+<p>Generate key:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">openssl genrsa -aes256 -out intermediate_ca_key 4096
+</span></code></pre>
+<p>It will ask for a passphrase, I generated mine with my KeePassXC.</p>
+<p>Generate certificate request:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">openssl req -config config.conf -new -sha256 -key intermediate_ca_key -out intermediate_ca.csr.pem
+</span></code></pre>
+<p>Here's the info I provided:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>Country (2 letter code) []:FR
+</span><span>State or Region []:Bretagne
+</span><span>City []:Rennes
+</span><span>Common Name []:philt3r Intermediate CA
+</span><span>Organization Name []:philt3r
+</span></code></pre>
+<p>Sign certificate request with Root key:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">openssl ca -config config.conf -keyfile root_ca_key -cert root_ca.crt -extensions v3_intermediate_ca -days 1825 -notext -md sha256 -in intermediate_ca.csr.pem -out intermediate_ca.crt
+</span></code></pre>
+<p>My Intermediate certificate will last for 1825 days (5 years).</p>
+<p>Save these files, I saved them in my KeePassXC:</p>
+<ul>
+<li><code>intermediate_ca_key</code></li>
+<li><code>intermediate_ca.csr.pem</code></li>
+<li><code>intermediate_ca.crt</code></li>
+</ul>
+<p>Once everything is saved and backed up, delete everything from your computer securely.</p>
+<h1 id="ca-and-acme-server">CA and ACME server</h1>
+<p>I discovered <a href="https://smallstep.com/">Smallstep</a>, which allows to become your own ACME server.</p>
+<h2 id="install-1">Install</h2>
+<p>They provide packages for Alpine!</p>
+<p>Install the packages with</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add step-cli step-certificates
+</span></code></pre>
+<h2 id="configuration-1">Configuration</h2>
+<p>Start by creating the folder where <code>step</code> will save all the configs:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">mkdir /etc/step-ca -p
+</span></code></pre>
+<p>Let's configure <code>step-ca</code>!</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">STEPPATH</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">/etc/step-ca </span><span style="color:#282828;">step ca init --name</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">"philt3r"</span><span style="color:#282828;"> --acme --address</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">"10.131.111.1:444"</span><span style="color:#282828;"> --provisioner</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">"philt3r"</span><span style="color:#282828;"> --deployment-type standalone
+</span></code></pre>
+<p>I ask it to run on the address <code>10.131.111.1</code> (the WireGuard ip) and on the port <code>444</code>. The port <code>443</code> will be used for a https server, so I picked 443 + 1.</p>
+<p>Since I want an ACME server, I asked to get one.</p>
+<p>Step will ask what IP address the clients will use to reach your ca, reply with <code>10.131.111.1</code>, because only WireGuard peers and the server should be allowed.</p>
+<p>This will prompt a password, put one.</p>
+<p>Step will generate a root and intermediate key, as well as an intermediate certificate. We don't want that, since we already generated our own.</p>
+<p>Copy these files in <code>/etc/step-ca/certs</code>:</p>
+<ul>
+<li><code>root_ca.crt</code></li>
+<li><code>intermediate_ca.crt</code></li>
+</ul>
+<p>Copy <code>intermediate_ca_key</code> in <code>/etc/step-ca/secrets</code> folder. I use the key directly, but in a safe environment use a Yubikey, but I don't have one.</p>
+<h2 id="start-the-ca-acme-server">Start the CA/ACME server</h2>
+<p>Run</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">step-ca /etc/step-ca/config/ca.json
+</span></code></pre>
+<p>to start the server. It will ask your password to decrypt the <code>intermediate_ca_key</code>. Provide the password.</p>
+<p>The server should start, stop it.</p>
+<p>We will now create a file containing the password of the <code>intermediate_ca_key</code>, since we want to have the ACME server starting when Alpine will boot.</p>
+<p>Why put the password inside a file? Well, simply because we can't type the password at boot. Again, in an ideal environment, use a Yubikey.</p>
+<p>Create a file at</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/step-ca/password.txt
+</span></code></pre>
+<p>and place the password inside that file.</p>
+<p><code>step</code> should run as the user <code>step-ca</code>, so update the permissions on the config folder:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">chown step-ca:step-ca -Rv /etc/step-ca/
+</span></code></pre>
+<p>To verify that everything worked, run:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">step-ca /etc/step-ca/config/ca.json --password-file</span><span style="color:#b23c15;">=</span><span style="color:#282828;">/etc/step-ca/password.txt
+</span></code></pre>
+<p>Stop the server again.</p>
+<h2 id="script-to-launch-1">Script to launch</h2>
+<p>Step already has a service!</p>
+<ul>
+<li>Start: <code>rc-service step-ca start</code></li>
+<li>Stop: <code>rc-service step-ca stop</code></li>
+</ul>
+<h1 id="use-acme-with-caddy">Use ACME with Caddy</h1>
+<p>Now let's tell Caddy to get TLS certificates with our ACME server.</p>
+<p>Edit the <code>/etc/caddy/Caddyfile</code>:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span># global
+</span><span>{
+</span><span> # step-ca ACME server
+</span><span> acme_ca https://10.131.111.1:444/acme/acme/directory
+</span><span>}
+</span><span>
+</span><span>intra.philt3r intra.philt3r:80 {
+</span><span> root * /srv/www
+</span><span> file_server browse
+</span><span>}
+</span></code></pre>
+<p>Make sure <code>step-ca</code> is started, and restart Caddy to make sure everything is good:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">rc-service caddy restart
+</span></code></pre>
+<p>Now we need to tell our system to trust the certificates.</p>
+<p>Download the file containing the certificates. It is available at this URL:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>https://10.131.111.1:444/roots.pem
+</span></code></pre>
+<p>On every device you want to trust your certificates, you will need to download the file on the device, then you will need to tell your operating system to trust it.</p>
+<ul>
+<li>OSX: <a href="https://tosbourn.com/getting-os-x-to-trust-self-signed-ssl-certificates/">Trust the certificate</a></li>
+<li>iOS: Download the certificate from the device and <a href="https://support.apple.com/en-us/HT204477">trust it</a></li>
+<li>Firefox: Install the certificate on your system and <a href="https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox">tell firefox to trust it</a></li>
+<li>Linux distros: <a href="https://ubuntu.com/server/docs/security-trust-store">Ubuntu</a>, <a href="https://docs.fedoraproject.org/en-US/quick-docs/using-shared-system-certificates">Fedora</a></li>
+</ul>
+<h1 id="start-on-boot">Start on boot</h1>
+<p>Start <code>caddy</code> and <code>step-ca</code> on startup with:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">rc-update add step-ca
+</span><span style="color:#282828;">rc-update add caddy
+</span></code></pre>
+<p>Reboot to make sure everything works.</p>
+<h1 id="resources">Resources</h1>
+<ul>
+<li><a href="https://wiki.alpinelinux.org/wiki/Repositories">https://wiki.alpinelinux.org/wiki/Repositories</a></li>
+<li>Awesome guide that helped me a lot: <a href="https://www.apalrd.net/posts/2023/network_acme/">https://www.apalrd.net/posts/2023/network_acme/</a></li>
+</ul>
+
+
+
+
+ Setup CoreDNS on Alpine Linux
+ 2023-06-25T00:00:00+00:00
+ 2023-06-25T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/coredns-alpine/
+
+ <p>Now that we have a WireGuard VPN, let's add a DNS server, to type letters instead of numbers!</p>
+<h1 id="install-coredns">Install CoreDNS</h1>
+<p>You will need to enable the <code>community</code> repo first.</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas apk add coredns
+</span></code></pre>
+<h1 id="configuration">Configuration</h1>
+<p>Create the config in</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">/etc/coredns/Corefile
+</span></code></pre>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span># snippets
+</span><span>(common) {
+</span><span> cache 60
+</span><span> acl {
+</span><span> allow net 127.0.0.1 10.131.110.0/24 10.131.111.0/24
+</span><span> block
+</span><span> }
+</span><span>}
+</span><span>
+</span><span># intranet
+</span><span>philt3r {
+</span><span> import common
+</span><span> log . {combined} {
+</span><span> class denial error success
+</span><span> }
+</span><span>
+</span><span> hosts {
+</span><span> 10.131.111.1 intra.philt3r
+</span><span> falltrough
+</span><span> }
+</span><span>}
+</span><span>
+</span><span># extranet
+</span><span>. {
+</span><span> import common
+</span><span>
+</span><span> # Free DNS
+</span><span> forward . 212.27.40.240 212.27.40.241
+</span><span>}
+</span></code></pre>
+<p>My DNS service of choice comes from <a href="https://free.fr">free.fr</a>. Feel free to put your own favorite DNS service!</p>
+<h1 id="script-to-launch-on-server-startup">Script to launch on server startup</h1>
+<p>CoreDNS already has a service!</p>
+<ul>
+<li>Add at startup: <code>rc-update add coredns</code></li>
+<li>Remove from startup: <code>rc-update del coredns</code></li>
+<li>Show services at startup: <code>rc-status</code></li>
+</ul>
+<p>The logs of CoreDNS should be available at</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/var/log/coredns/coredns.log
+</span></code></pre>
+<h1 id="use-coredns-on-the-system">Use CoreDNS on the system</h1>
+<p>Now that we have our DNS server, let's use it on our server!</p>
+<p>If you use DHCP to get the ip address of your server, the DNS will always be used from the DHCP.</p>
+<p>We want to use our own DHCP server.</p>
+<p>Create the file (and the folder associated with it)</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/udhcpc/udhcpc.conf
+</span></code></pre>
+<p>and put</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>RESOLV_CONF="NO"
+</span></code></pre>
+<p>Then, edit the</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/resolv.conf
+</span></code></pre>
+<p>and put</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>nameserver 127.0.0.1
+</span></code></pre>
+<p>Restart the server.</p>
+
+
+
+
+ Setup WireGuard server on Alpine Linux
+ 2023-06-24T00:00:00+00:00
+ 2023-06-24T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/wireguard-alpine/
+
+ <p>Let's do this baremetal, no Docker!</p>
+<p>I will do this inside a <a href="https://www.proxmox.com/en/">Proxmox</a> virtual machine.</p>
+<h1 id="get-started">Get started</h1>
+<p>Start by installing <a href="https://www.alpinelinux.org/">Alpine Linux</a>: Run the installer, next, next, next, and boot the os once it's done.</p>
+<h1 id="setup-ssh">Setup ssh</h1>
+<p>Copy ssh key (run this on your local machine):</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">ssh-copy-id -i ~/.ssh/id_rsa.pub user@ip
+</span></code></pre>
+<p>Login via ssh, and install your favorite editor:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas apk add vim
+</span></code></pre>
+<p>Edit ssh config to force ssh key use:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas vim /etc/ssh/sshd_config
+</span></code></pre>
+<p>Find and update these statements:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>PermitRootLogin no
+</span><span>PubkeyAuthentication yes
+</span></code></pre>
+<p>Restart ssh service, logout, and log back in</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas rc-service sshd restart
+</span></code></pre>
+<h1 id="setup-alpine-package-manager">Setup alpine package manager</h1>
+<p>I use <code>mirrors.ircam.fr</code> as my mirror</p>
+<p>Open </p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">/etc/apk/repositories
+</span></code></pre>
+<p>add the community repo, and run updates:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas apk -U upgrade
+</span></code></pre>
+<h1 id="wireguard-basics">WireGuard basics</h1>
+<p>Install WireGuard:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas apk add wireguard-tools
+</span></code></pre>
+<h2 id="kernel-module">Kernel module</h2>
+<p>Load the module</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas modprobe wireguard
+</span></code></pre>
+<p>To launch the module on startup, edit</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/modules
+</span></code></pre>
+<p>and simply add</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>wireguard
+</span></code></pre>
+<p>at the bottom, and save the file.</p>
+<h2 id="ip-forwarding">IP forwarding</h2>
+<p>Edit</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/sysctl.conf
+</span></code></pre>
+<p>and add</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">net.ipv4.ip_forward = 1
+</span></code></pre>
+<p>at the bottom of the file, and save</p>
+<p>Launch sysctl on startup with</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas rc-update add sysctl
+</span></code></pre>
+<p>and reboot.</p>
+<h1 id="ip-addresses">IP Addresses</h1>
+<p>Pick a range if ip addresses to use: <a href="https://datatracker.ietf.org/doc/html/rfc1918">RFC 1918</a></p>
+<p>I'll pick <code>10.131.111.x</code> for the WireGuard peers.</p>
+<p>Calculate your CIDR: <a href="https://www.ipaddressguide.com/cidr">https://www.ipaddressguide.com/cidr</a></p>
+<p>Here's my network layout:</p>
+<ul>
+<li>CIDR: <code>10.131.110.0/23</code></li>
+<li>Start: <code>10.131.110.0</code></li>
+<li>End: <code>10.131.111.255</code></li>
+</ul>
+<p>Network services:</p>
+<ul>
+<li>Start: <code>10.131.110.0/24</code></li>
+<li>End: <code>10.131.110.255/24</code></li>
+</ul>
+<p>WireGuard:</p>
+<ul>
+<li>Start: <code>10.131.111.0/24</code></li>
+<li>End: <code>10.131.111.255/24</code></li>
+</ul>
+<h1 id="generate-keys-for-wireguard">Generate keys for WireGuard</h1>
+<p>Do everything as root (doas is the equivalent of sudo):</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">doas su
+</span></code></pre>
+<p>Move to the wireguard configuration, I'll store everything there for easy access:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#b57614;">cd</span><span style="color:#282828;"> /etc/wireguard/
+</span></code></pre>
+<p>Generate the private and public key, store them in files (we'll use them later):</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg genkey </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tee philt3r-privatekey </span><span style="color:#b23c15;">| </span><span style="color:#282828;">wg pubkey </span><span style="color:#b23c15;">></span><span style="color:#282828;"> philt3r-publickey
+</span></code></pre>
+<h1 id="configure-server-interface">Configure server interface</h1>
+<p>All the server configuration will happen in</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/wireguard/wg0.conf
+</span></code></pre>
+<p>Protip for vim users: To add content of a file in current buffer directly: <a href="https://stackoverflow.com/a/19087947/4809297">StackOverflow answer</a></p>
+<pre data-lang="ini" style="background-color:#fcf0ca;color:#282828aa;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#9d0006;">[Interface]
+</span><span style="font-style:italic;color:#928374;"># Name = wg0
+</span><span style="color:#282828;">Address </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.111.1/24
+</span><span style="color:#282828;">ListenPort </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">51820
+</span><span style="color:#282828;">PrivateKey </span><span style="color:#b23c15;">= <</span><span>server</span><span style="color:#b23c15;">-</span><span>private</span><span style="color:#b23c15;">-</span><span>key</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">PostUp </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span>t nat </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">A POSTROUTING </span><span style="color:#b23c15;">-</span><span>s </span><span style="color:#282828;">10.131.111.0/24 </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">MASQUERADE</span><span>;
+</span><span style="color:#282828;">PostUp </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span>t nat </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">A POSTROUTING </span><span style="color:#b23c15;">-</span><span>s </span><span style="color:#282828;">10.131.110.0/24 </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">MASQUERADE</span><span>;
+</span><span style="color:#282828;">PostUp </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">A INPUT </span><span style="color:#b23c15;">-</span><span>p udp </span><span style="color:#b23c15;">-</span><span>m udp </span><span style="color:#b23c15;">--</span><span>dport </span><span style="color:#8f3f71;">51820 </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span><span style="color:#282828;">PostUp </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">A FORWARD </span><span style="color:#b23c15;">-</span><span>i </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span><span style="color:#282828;">PostUp </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">A FORWARD </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span><span style="color:#282828;">PostDown </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span>t nat </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">D POSTROUTING </span><span style="color:#b23c15;">-</span><span>s </span><span style="color:#282828;">10.131.111.0/24 </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">MASQUERADE</span><span>;
+</span><span style="color:#282828;">PostDown </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span>t nat </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">D POSTROUTING </span><span style="color:#b23c15;">-</span><span>s </span><span style="color:#282828;">10.131.110.0/24 </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">MASQUERADE</span><span>;
+</span><span style="color:#282828;">PostDown </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">D INPUT </span><span style="color:#b23c15;">-</span><span>p udp </span><span style="color:#b23c15;">-</span><span>m udp </span><span style="color:#b23c15;">--</span><span>dport </span><span style="color:#8f3f71;">51820 </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span><span style="color:#282828;">PostDown </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">D FORWARD </span><span style="color:#b23c15;">-</span><span>i </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span><span style="color:#282828;">PostDown </span><span style="color:#b23c15;">=</span><span> iptables </span><span style="color:#b23c15;">-</span><span style="color:#b57614;">D FORWARD </span><span style="color:#b23c15;">-</span><span>o </span><span style="color:#9d0006;">%i </span><span style="color:#b23c15;">-</span><span>j </span><span style="color:#b57614;">ACCEPT</span><span>;
+</span></code></pre>
+<p>Once it's good, make sure only root can read and write to the files:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">chmod 600 /etc/wireguard/</span><span style="color:#b23c15;">*
+</span></code></pre>
+<h1 id="add-new-peer">Add new peer</h1>
+<p>You will need to repeat this for each new peer</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#b57614;">cd</span><span style="color:#282828;"> /etc/wireguard/
+</span></code></pre>
+<h2 id="generate-keys">Generate keys</h2>
+<p>Starting now, <code>name</code> is a placeholder for the name of the peer.</p>
+<p>I typically use the format <strong>name-of-person</strong> followed by <strong>device-name</strong>. For example, the peer for my phone will be <strong>phil-iphone</strong>.</p>
+<p>Create folder to store keys for the peer:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">mkdir -p peers/name
+</span></code></pre>
+<p>Generate preshared key (not required):</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg genpsk </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tee peers/name/preshared.psk
+</span></code></pre>
+<p>Generate private and public keys for the peer:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg genkey </span><span style="color:#b23c15;">| </span><span style="color:#282828;">tee peers/name/private.key </span><span style="color:#b23c15;">| </span><span style="color:#282828;">wg pubkey </span><span style="color:#b23c15;">></span><span style="color:#282828;"> peers/name/public.key
+</span></code></pre>
+<h2 id="update-server-configuration">Update server configuration</h2>
+<p>Edit your <code>wg0.conf</code>, add at the bottom:</p>
+<pre data-lang="ini" style="background-color:#fcf0ca;color:#282828aa;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#9d0006;">[Peer]
+</span><span style="font-style:italic;color:#928374;"># Name = name
+</span><span style="color:#282828;">PublicKey </span><span style="color:#b23c15;">= <</span><span>peers</span><span style="color:#b23c15;">/</span><span>name</span><span style="color:#b23c15;">/</span><span>public</span><span style="color:#b23c15;">.</span><span>key</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">PresharedKey </span><span style="color:#b23c15;">= <</span><span>peers</span><span style="color:#b23c15;">/</span><span>name</span><span style="color:#b23c15;">/</span><span>preshared</span><span style="color:#b23c15;">.</span><span>psk</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">AllowedIPs </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.111.2/32
+</span><span style="color:#282828;">AllowedIPs </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.110.0/24
+</span><span style="color:#282828;">AllowedIPs </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.111.0/24
+</span></code></pre>
+<h2 id="peer-configuration">Peer configuration</h2>
+<p>Now let's create the configuration to give to the peer:</p>
+<p>Create the file</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>peers/name/philt3r-name.wg.conf
+</span></code></pre>
+<p>And put the following</p>
+<pre data-lang="ini" style="background-color:#fcf0ca;color:#282828aa;" class="language-ini "><code class="language-ini" data-lang="ini"><span style="color:#9d0006;">[Interface]
+</span><span style="color:#282828;">PrivateKey </span><span style="color:#b23c15;">= <</span><span>peers</span><span style="color:#b23c15;">/</span><span>name</span><span style="color:#b23c15;">/</span><span>private</span><span style="color:#b23c15;">.</span><span>key</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">Address </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.111.2/24
+</span><span style="font-style:italic;color:#928374;">#DNS = 10.131.111.1
+</span><span>
+</span><span style="color:#9d0006;">[Peer]
+</span><span style="color:#282828;">PublicKey </span><span style="color:#b23c15;">= <</span><span>server</span><span style="color:#b23c15;">-</span><span>public</span><span style="color:#b23c15;">-</span><span>key</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">PresharedKey </span><span style="color:#b23c15;">= <</span><span>peers</span><span style="color:#b23c15;">/</span><span>name</span><span style="color:#b23c15;">/</span><span>preshared</span><span style="color:#b23c15;">.</span><span>psk</span><span style="color:#b23c15;">>
+</span><span style="color:#282828;">Endpoint </span><span style="color:#b23c15;">= <</span><span>server</span><span style="color:#b23c15;">-</span><span>ip</span><span style="color:#b23c15;">>:</span><span style="color:#8f3f71;">51820
+</span><span style="color:#282828;">AllowedIPs </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.110.0/24
+</span><span style="color:#282828;">AllowedIPS </span><span style="color:#b23c15;">= </span><span style="color:#282828;">10.131.111.0/24
+</span><span style="color:#282828;">PersistentKeepalive </span><span style="color:#b23c15;">= </span><span style="color:#8f3f71;">25
+</span></code></pre>
+<p>DNS info is not used yet, it's normal, I will enable it once my DNS server will be created (not in this blog post though).</p>
+<h2 id="distribute-config">Distribute config</h2>
+<p>Either give the configuration file we just created, or you can have multiple choices.</p>
+<h3 id="qr-code">QR Code</h3>
+<p>Start by installing</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">apk add libqrencode-tools
+</span></code></pre>
+<p>And run </p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">qrencode -t ansiutf8 </span><span style="color:#b23c15;"><</span><span style="color:#282828;"> peers/name/philt3r-name.wg.conf
+</span></code></pre>
+<h3 id="base64">Base64</h3>
+<p>Note: I'm using <code>base64</code> on Alpine, which comes from BusyBox, the CLI may be different depending on the operating system you're using.</p>
+<p>Encode the configuration file to a base64 string:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">cat philt3r-name.wg.conf </span><span style="color:#b23c15;">| </span><span style="color:#282828;">base64 -w 0
+</span></code></pre>
+<p>And on the other device, decode the string and save to a file:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">base64 -d </span><span style="color:#b23c15;">></span><span style="color:#282828;"> philt3r-name.wg.conf
+</span></code></pre>
+<p>Put the base64 encoded string, and send a EOF (usually <code>ctrl + d</code>).</p>
+<h2 id="restart-wireguard">Restart WireGuard</h2>
+<p>If you already have WireGuard running, simply run</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>rc-service wg restart
+</span></code></pre>
+<p>to restart the server with your new peer.</p>
+<h1 id="start-wireguard-manually">Start WireGuard manually</h1>
+<p>Make sure to open the port on your router in <strong>UDP</strong> mode! I spent a lot of time debugging to realize that my port was in TCP, double check!</p>
+<p>Make sure to be root before, don't use <code>doas</code> or <code>sudo</code>!</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg-quick up wg0
+</span></code></pre>
+<p>On the peer, start the tunnel.</p>
+<p>On the server, run</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg
+</span></code></pre>
+<p>to check the status of WireGuard. You should see the peer and some stats it is connected.</p>
+<p>If you do not see info about the peer even if it is not connected, that means you did something wrong in the configuration!</p>
+<p>From your peer, you should be able to ping the WireGuard internal IP:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>10.131.111.1
+</span></code></pre>
+<ul>
+<li>iOS: <a href="https://apps.apple.com/fr/app/ping-network-utility/id576773404">Ping</a></li>
+<li>OSX / Linux: <code>ping</code></li>
+</ul>
+<p>If you can ping the ip, you're good!</p>
+<p>You may not be able to go on the internet, or even make DNS requests, it's normal.</p>
+<p>We are just testing if the tunnel works. You can stop the tunnel.</p>
+<h1 id="stop-wireguard-manually">Stop WireGuard manually</h1>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">wg-quick down wg0
+</span></code></pre>
+<h1 id="script-to-launch-on-server-startup">Script to launch on server startup</h1>
+<p>To start WireGuard on startup, we will write an OpenRC script. It will be located in</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>/etc/init.d/wg
+</span></code></pre>
+<p>Put the following:</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="font-style:italic;color:#928374;">#!/sbin/openrc-run
+</span><span style="font-style:italic;color:#928374;">#
+</span><span>
+</span><span style="color:#282828;">description</span><span style="color:#b23c15;">=</span><span style="color:#79740e;">"WireGuard"
+</span><span>
+</span><span style="color:#407959;">depend</span><span>() {
+</span><span> </span><span style="color:#282828;">need localmount net sysctl
+</span><span> </span><span style="color:#282828;">after bootmisc
+</span><span>}
+</span><span>
+</span><span style="color:#407959;">start</span><span>() {
+</span><span> </span><span style="color:#282828;">ebegin </span><span style="color:#79740e;">"Starting WireGuard"
+</span><span> </span><span style="color:#282828;">wg-quick up wg0
+</span><span> </span><span style="color:#282828;">eend $?
+</span><span>}
+</span><span>
+</span><span style="color:#407959;">stop</span><span>() {
+</span><span> </span><span style="color:#282828;">ebegin </span><span style="color:#79740e;">"Stopping WireGuard"
+</span><span> </span><span style="color:#282828;">wg-quick down wg0
+</span><span> </span><span style="color:#282828;">eend $?
+</span><span>}
+</span><span>
+</span><span style="color:#407959;">status</span><span>() {
+</span><span> </span><span style="color:#282828;">wg show wg0
+</span><span>}
+</span></code></pre>
+<p>Give it executable access</p>
+<pre data-lang="sh" style="background-color:#fcf0ca;color:#282828aa;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#282828;">chmod +x /etc/init.d/wg
+</span></code></pre>
+<h2 id="manual">Manual</h2>
+<ul>
+<li>Start: <code>rc-service wg start</code></li>
+<li>Stop: <code>rc-service wg stop</code></li>
+<li>Restart: <code>rc-service wg restart</code></li>
+<li>Status: <code>rc-service wg status</code></li>
+</ul>
+<h2 id="startup">Startup</h2>
+<ul>
+<li>Add at startup: <code>rc-update add wg</code></li>
+<li>Remove from startup: <code>rc-update del wg</code></li>
+<li>Show services at startup: <code>rc-status</code></li>
+</ul>
+<p>Reboot and make sure everything works, you should see WireGuard logs when your server is starting.</p>
+<h1 id="resources">Resources</h1>
+<p>These resources helped me when setting up my WireGuard server. Thanks!</p>
+<ul>
+<li><a href="https://github.com/pirate/wireguard-docs">https://github.com/pirate/wireguard-docs</a></li>
+<li><a href="https://blog.ruanbekker.com/blog/2020/01/11/setup-a-wireguard-vpn-server-on-linux/">https://blog.ruanbekker.com/blog/2020/01/11/setup-a-wireguard-vpn-server-on-linux/</a></li>
+<li><a href="https://try.popho.be/wg.html">https://try.popho.be/wg.html</a></li>
+</ul>
+
+
+
+
+ how to use the docker of the epitech moulinette
+ 2020-01-19T00:00:00+00:00
+ 2020-01-19T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/docker-epitech-moulinette/
+
+ <p>this guide will show you how to install docker, download the epitech moulinette container and learn how to use it for your projects.</p>
+<h2 id="install">install</h2>
+<p>ubuntu:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sudo apt install docker.io
+</span></code></pre>
+<p>arch:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sudo pacman -S docker
+</span></code></pre>
+<h2 id="setup-docker-before-first-use">setup docker before first use</h2>
+<p>to use docker without root privileges run</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sudo usermod -aG docker $USER
+</span></code></pre>
+<p>and <strong>REBOOT</strong> your computer afterwards for changes to take effect.</p>
+<p>to start docker on every boot</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sudo systemctl enable docker
+</span></code></pre>
+<h2 id="get-the-epitech-container">get the epitech container</h2>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>docker pull epitechcontent/epitest-docker
+</span></code></pre>
+<p>will download the epitech moulinette environement. make sure to have fast internet, because the container is about 5 gigabytes.</p>
+<h2 id="start-the-container-and-get-a-shell">start the container and get a shell</h2>
+<p>go into the directory you want to get a shell in the epitech container.</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>docker run -it --rm -v $(pwd):/home/project -w /home/project epitechcontent/epitest-docker /bin/bash
+</span></code></pre>
+<p>will get you a bash prompt: you are now in the container. run the commands you want, and exit the shell when you are done.</p>
+<p>if you are using docker on windows (inside powershell), run</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>docker run -it --rm -v ${pwd}:/home/project -w /home/project epitechcontent/epitest-docker /bin/bash
+</span></code></pre>
+
+
+
+
+ archlinux how old is your installation
+ 2019-04-18T00:00:00+00:00
+ 2019-04-18T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/
+
+ <p>on archlinux, to see when you installed arch on your computer, run this command</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sed -n "/ installed $1/{s/].*/]/p;q}" /var/log/pacman.log
+</span></code></pre>
+<p>it will display the date and the time when you ran <code>pacstrap</code> on the live cd to install your system.</p>
+<p>on my laptop, i get <strong>[2018-10-21 21:05]</strong>, which is when i switched from fedora back to arch because my school required fedora.</p>
+
+
+
+
+ openbsd first setup after install
+ 2019-03-01T00:00:00+00:00
+ 2019-03-01T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/openbsd-setup/
+
+ <p>just installed openbsd on my chromebook, seems to be working fine!</p>
+<p>since it's my first time using openbsd, here are some stuff that i will start to do on my machines after installing openbsd:</p>
+<h2 id="enable-doas">enable <code>doas</code></h2>
+<p><code>doas</code> is kinda the equivalent of <code>sudo</code>. to enable it, run <code>cp /etc/examples/doas.conf /etc</code> to copy the doas config file.</p>
+<h2 id="disable-root-account">disable root account</h2>
+<p>now that <code>doas</code> is ready, we dont need to root account anymore. to disable it, run <code>usermod -p'*' root</code> to set the root password to <code>*</code>. this will prevent root from log on directly to the machine (with <code>su</code> as an example), but with <code>doas</code> we can run <code>doas sh</code> to get a shell.</p>
+<h2 id="install-missing-firmware-for-your-hardware">install missing firmware for your hardware</h2>
+<p>maybe your wifi card isn't working? or maybe you can't display any graphical interface? maybe that's because you don't have the firmware for it: here's how to install it:</p>
+<p>run <code>doas fw_update -i</code> to see the missing firmwares.</p>
+<p>so grab a flash drive, format it in <em>fat</em> filesystem format, go to <a href="http://firmware.openbsd.org/firmware/">firmware.openbsd.org</a>, download the missing firmwares, along with the <strong>SHA256.sig</strong> and <strong>index.txt</strong> files, and put them on the usb key.</p>
+<p>mount the flash drive on openbsd, and run <code>doas fw_update -p *path of flash drive*</code> to install the firmwares from the flash drive.</p>
+<p>your missing firmware should not be anymore.</p>
+
+
+
+
+ how to put a custom boot logo on a thinkpad
+ 2019-02-24T00:00:00+00:00
+ 2019-02-24T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/thinkpad-custom-boot-logo/
+
+ <h2 id="disclaimer">disclaimer</h2>
+<p>i need to warn you that you are on your own. even though it works fine, i'm not responsible of what you do.</p>
+<h2 id="introduction">introduction</h2>
+<p>you have a thinkpad. it's beautiful, it's fast, it's perfect, it doesn't run windows; there's just one thing that could be perfect: the boot logo.</p>
+<p>by default on new models, your boot logo look like this:</p>
+<p><img src="https://blog.x4m3.rocks/thinkpad-custom-boot-logo/default-logo.jpg" alt="" /></p>
+<p>to get a custom boot logo, you need:</p>
+<ul>
+<li>an internet connection</li>
+<li>a compatible model</li>
+<li>a usb flash drive</li>
+<li>a gif image (you can also use a <em>bmp</em> or a <em>jpg</em> image, but i've found that with <em>gif</em> images it works better)</li>
+</ul>
+<h2 id="get-the-bios-update">get the BIOS update</h2>
+<p>to install your custom boot logo, you need to flash a BIOS update.</p>
+<p>to download the BIOS update, go on <a href="https://pcsupport.lenovo.com/us/en">lenovo's support website</a>, choose <strong>drivers and updates</strong> and find your model.</p>
+<p>next, go in the section <strong>BIOS/UEFI</strong> and download the <strong>BIOS Update (Bootable CD)</strong>. it will download a <em>iso</em> image.</p>
+<p>if you can't find the update image, that means that you're out of luck, and you can't get a custom boot logo. sorry.</p>
+<h2 id="convert-the-iso-image">convert the iso image</h2>
+<p>now that you have the iso image, you need to convert it to a <em>img</em> file. to do so, run the following command in a terminal:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>geteltorito -o bios-image.img bios-image-downloaded.iso
+</span></code></pre>
+<p>if you don't have <strong>geteltorito</strong>, look online to install it.</p>
+<h2 id="flash-the-image-on-your-usb-drive">flash the image on your usb drive</h2>
+<p>now it's time to flash the image on your usb drive. get the name of your flash drive using <code>lsblk</code>, plug your usb drive, and run <code>lsblk</code> again to see your drive.</p>
+<p>go into the folder where the <em>img</em> file is located, and run in a terminal:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>sudo dd if=bios-image.img of=/dev/sdX bs=1M status=progress oflag=sync
+</span></code></pre>
+<p>where <strong>X</strong> is your drive letter that you know thanks to <code>lsblk</code>.</p>
+<h2 id="get-the-gif-file-to-use">get the <em>gif</em> file to use</h2>
+<p>if you want, i already have this selection of images ready to be used, or you can make your own!</p>
+<div>
+
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/puffy.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/puffy.00aa29dd6b99e171.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/thinkpad1.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/thinkpad1.147b5c16ea6432da.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/tux-verry-small.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/tux-verry-small.9bd45f15396c7ffa.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/archlinux.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/archlinux.456d8134dea984ad.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/epitech.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/epitech.2fb0f9976e9b5a67.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/pornhub.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/pornhub.66a33fa0ddb7d786.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/apple-rainbow.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/apple-rainbow.dae843aec90e4fd2.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/vim.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/vim.aed1174ef81696b6.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/thinkpad2.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/thinkpad2.d689f4141765e8ee.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/nsa.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/nsa.881fde7a73711187.jpg" />
+ </a>
+ <a href="https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/darth-vader.gif" target="_blank">
+ <img src="https://blog.x4m3.rocks/processed_images/darth-vader.8707e38ea58ce5b9.jpg" />
+ </a>
+</div>
+<p>you can see the requirements, go in your usb drive, open the <strong>readme.txt</strong> in the <em>flash</em> folder.</p>
+<p>put the <em>gif</em> image in the <em>flash</em> folder, and name it <strong>LOGO1.JPG</strong>. copy that image, and name that one <strong>LOGO2.JPG</strong>.</p>
+<p>check the <strong>readme.txt</strong> file to see the filenames, they might differ on different models.</p>
+<h2 id="flash-the-bios-update">flash the BIOS update</h2>
+<p>reboot your computer, and boot on the usb flash drive. if you don't know how, the internet should help you with that.</p>
+<p>now that the flash utility has booted, choose the second option, and follow the instructions.</p>
+<p>the computer will reboot, flash the update, and when it will reboot, you should get your custom boot logo!</p>
+<p><img src="https://blog.x4m3.rocks/thinkpad-custom-boot-logo/custom-logo.jpg" alt="" /></p>
+<p>if you want to go back to the default logo, simply reflash the bios update, when when asked if you want to use your custom logo, say no, and the default logo will be put back.</p>
+
+
+
+
+ my contributions to the linux kernel
+ 2018-04-10T00:00:00+00:00
+ 2018-04-10T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/linux-kernel-contributions/
+
+ <p>you read it right! i am a contributor to the linux kernel!</p>
+<p>... but you are going to be dissapointed: my contributions are not going to change the world, just comments, alignments and documentation and stuff...</p>
+<p>i submited something like 10 patches (as of april 10, 2018) and 3 patches have been accepted and are now into the kernel!</p>
+<p>if you wanna check them out, you can read them on <a href="https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=Philippe+Loctaux">kernel.org</a>.</p>
+<p>yes, i am aware that Linus has a copy of the repo on github, but when <a href="https://github.com/torvalds/linux/commits?author=x4m3">i try to see my commits on github</a>, i can't get them because there is too many commits and github can't get me the list.</p>
+<p>so, here are my kernel contributions, listed by date:</p>
+<ul>
+<li><a href="https://github.com/torvalds/linux/commit/81c18a9e378c87ed6559a4b0a0c2831c88947373">feb 23, 2016</a></li>
+<li><a href="https://github.com/torvalds/linux/commit/ce6550818280c1e7caae727d2b9504140b6370f0">mar 7, 2016</a></li>
+<li><a href="https://github.com/torvalds/linux/commit/9d4c0c9f6a747a9bdec03057be4193994839ec87">dec 28, 2017</a></li>
+</ul>
+
+
+
+
+ restart chrome with a url
+ 2018-04-09T00:00:00+00:00
+ 2018-04-09T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/restart-chrome-url/
+
+ <p>did you know that you can restart chrome/chromium with a simple url?</p>
+<p>here is it: <a href="about://restart">about://restart</a> !</p>
+<p>but this trick does not work with the <code><a></code> html tag, which seems logical, copy the link and paste it in a new tab to get it to work</p>
+<p>it'd be annoying as fuck if you could click on links that restart your browser, imagine if an extension could replace every clickable link with this one! 😊</p>
+<p>i think its usage is for chrome developers, the end user doesn't really care to type a url to restart their browser, they click on the <code>x</code> and they reopen it (duh).</p>
+
+
+
+
+ error on zsh when using vim and autocomplete
+ 2018-03-13T00:00:00+00:00
+ 2018-03-13T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/zsh-vim-autocomplete-error/
+
+ <p>do you use <strong>zsh</strong> and <strong>ohmyzsh</strong> ?</p>
+<p>do you run into an issue when you are about to edit a file with vim, and you use the <strong>Tab</strong> key to autocomplete the filename, but instead you get something like this:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>$ vim ~/filena<TAB>
+</span><span>_arguments:448: _vim_files: function definition file not found
+</span></code></pre>
+<p>annoying af, right ?</p>
+<h2 id="how-to-fix-it">how to fix it</h2>
+<p>here's how to fix it: delete the zcompdump directory off your personal directory, and reload your zsh config file (or close and open a new shell).</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>rm -rf ~/.zcompdump*; source ~/.zshrc;
+</span></code></pre>
+<p>it took me at least 15 mins to find that .... hopefully i save some time for you .</p>
+<h3 id="sources">sources</h3>
+<p><a href="https://unix.stackexchange.com/questions/280622/zsh-fails-at-path-completition-when-command-is-vim#280626">stackoverflow</a> and <a href="https://github.com/robbyrussell/oh-my-zsh/issues/518">github</a></p>
+
+
+
+
+ how to link your vimrc file on windows
+ 2018-02-17T00:00:00+00:00
+ 2018-02-17T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/
+
+ <p>i code on my linux machine, and i use vim as my text editor.<br />
+i've been using vim for almost 4 years, and i started to make my config file.<br />
+i store it with git, along all my config files for my linux setup (aka my dot files).</p>
+<p>here's the thing, i also use windows to code, and i also use vim.<br />
+i also want to use the same config that i store in git.</p>
+<p>to do so i need to do a symbolink link to my vimrc file. i dunno how to do that on windows.</p>
+<p>here's how to do it:</p>
+<h2 id="cmd">cmd</h2>
+<p>if you use the old school, black boxed <strong>cmd.exe</strong>, you need to run these commands:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>cd c:\users\_username_
+</span><span>mklink .vimrc _path-to-vimrc_
+</span></code></pre>
+<p>and you should be good to go.<br />
+just make sure it has been linked correctly with <code>vim ~/.vimrc</code></p>
+<h2 id="powershell">powershell</h2>
+<p>if you use the new, blue boxed <strong>powershell.exe</strong>, it's a bit different:<br />
+you can make it with powershell's language (or whatever they call the stuff they're using), but some require admin privileges, some require custom functions or something like that...</p>
+<p>or you can keep it simple and use the <strong>cmd</strong> command to use <strong>cmd.exe</strong> to run the <strong>mklink</strong> program to make the symlink:</p>
+<pre data-lang="powershell" style="background-color:#fcf0ca;color:#282828aa;" class="language-powershell "><code class="language-powershell" data-lang="powershell"><span>cd c:\users\_username_
+</span><span>cmd </span><span style="color:#b23c15;">/</span><span>c mklink .vimrc _path</span><span style="color:#b23c15;">-</span><span>to</span><span style="color:#b23c15;">-</span><span>vimrc_
+</span></code></pre>
+<h2 id="sources">sources</h2>
+<p>i found <a href="http://saadware.com/windows-vimrc-link/">this blog post</a> to find out how to do symlinks on cmd,<br />
+and i used <a href="https://en.wikipedia.org/wiki/NTFS_symbolic_link#Tools">this wikipedia article</a> and <a href="https://stackoverflow.com/a/5549583">this stackoverflow thread</a> to learn how to do it on powershell.</p>
+
+
+
+
+ dd status
+ 2016-07-14T00:00:00+00:00
+ 2016-07-14T00:00:00+00:00
+
+ Unknown
+
+
+ https://blog.x4m3.rocks/dd-status/
+
+ <p>Here's a cool tip if you use dd to copy disk images to a disk, or if you want to clone drives.</p>
+<p>As we all know (or should know), dd is a powerful tool; but it can be dangerous if not manipulated correctly.</p>
+<p>By default, dd doesn't give any information on what is it doing; which can be very boring, because you don't know when you'll be able to test that new Linux distro you just discovered!</p>
+<p>Well, good news! You can get some status from dd! This tip works on Linux and OS X.</p>
+<h2 id="linux">Linux</h2>
+<p>When you enter your <code>dd</code> command, add this little snippet at the end:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>status=progress
+</span></code></pre>
+<p>When dd will be busy doing its thing, you should get some info about its progress.</p>
+<h2 id="os-x">OS X</h2>
+<p>Run your dd command normally without <code>status=progress</code>, after that open a new terminal and enter this command:</p>
+<pre style="background-color:#fcf0ca;color:#282828aa;"><code><span>while pgrep ^dd; do sudo pkill -INFO dd; sleep 30; done;
+</span></code></pre>
+<p>And come back into the dd command. When the dd task will be done, the second command we ran will exit as well and you can close that other terminal safely.</p>
+<p><code>30</code> is the number of seconds that will update the counter every X seconds.</p>
+
+
+
+
diff --git a/browserconfig.xml b/browserconfig.xml
new file mode 100644
index 0000000..b3930d0
--- /dev/null
+++ b/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #da532c
+
+
+
diff --git a/caddy-ca-acme-alpine/index.html b/caddy-ca-acme-alpine/index.html
new file mode 100644
index 0000000..e3d4fa9
--- /dev/null
+++ b/caddy-ca-acme-alpine/index.html
@@ -0,0 +1,354 @@
+
+
+
+
+
+
+
+ Setup Caddy with a CA and ACME server on Alpine Linux · deadbaed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
I ask it to run on the address 10.131.111.1 (the WireGuard ip) and on the port 444. The port 443 will be used for a https server, so I picked 443 + 1.
+
Since I want an ACME server, I asked to get one.
+
Step will ask what IP address the clients will use to reach your ca, reply with 10.131.111.1, because only WireGuard peers and the server should be allowed.
+
This will prompt a password, put one.
+
Step will generate a root and intermediate key, as well as an intermediate certificate. We don't want that, since we already generated our own.
+
Copy these files in /etc/step-ca/certs:
+
+
root_ca.crt
+
intermediate_ca.crt
+
+
Copy intermediate_ca_key in /etc/step-ca/secrets folder. I use the key directly, but in a safe environment use a Yubikey, but I don't have one.
+
Start the CA/ACME server
+
Run
+
step-ca /etc/step-ca/config/ca.json
+
+
to start the server. It will ask your password to decrypt the intermediate_ca_key. Provide the password.
+
The server should start, stop it.
+
We will now create a file containing the password of the intermediate_ca_key, since we want to have the ACME server starting when Alpine will boot.
+
Why put the password inside a file? Well, simply because we can't type the password at boot. Again, in an ideal environment, use a Yubikey.
+
Create a file at
+
/etc/step-ca/password.txt
+
+
and place the password inside that file.
+
step should run as the user step-ca, so update the permissions on the config folder:
Make sure step-ca is started, and restart Caddy to make sure everything is good:
+
rc-service caddy restart
+
+
Now we need to tell our system to trust the certificates.
+
Download the file containing the certificates. It is available at this URL:
+
https://10.131.111.1:444/roots.pem
+
+
On every device you want to trust your certificates, you will need to download the file on the device, then you will need to tell your operating system to trust it.
Here's a cool tip if you use dd to copy disk images to a disk, or if you want to clone drives.
+
As we all know (or should know), dd is a powerful tool; but it can be dangerous if not manipulated correctly.
+
By default, dd doesn't give any information on what is it doing; which can be very boring, because you don't know when you'll be able to test that new Linux distro you just discovered!
+
Well, good news! You can get some status from dd! This tip works on Linux and OS X.
+
Linux
+
When you enter your dd command, add this little snippet at the end:
+
status=progress
+
+
When dd will be busy doing its thing, you should get some info about its progress.
+
OS X
+
Run your dd command normally without status=progress, after that open a new terminal and enter this command:
+
while pgrep ^dd; do sudo pkill -INFO dd; sleep 30; done;
+
+
And come back into the dd command. When the dd task will be done, the second command we ran will exit as well and you can close that other terminal safely.
+
30 is the number of seconds that will update the counter every X seconds.
My internal infrastructure is complete. I can now work on my projects, but at some point they need to go out to the world!
+
The platform for most of my projects is the web, and the best tool I found so far to deploy them is Docker.
+
I want to keep the code on the private infrastructure, but I also want to be in control of where the docker images will be stored.
+
The perfect solution is a private Docker registry! But it will not be on the internal infrastructure, it will be publicly available on a regular server.
+
That way, projects can be deployed in their final form whenever and wherever, while the source remaining private.
+
Get started locally
+
To start, I will launch a test registry on my machine to make sure everything works.
+
I will use these docker images:
+
+
registry: The official registry made by Docker themselves
+
docker-registry-ui: A nice webui to view and manage images on the registry
+
+
Here's the docker-compose file I used to get started:
$ ./new-password.sh phil
+creating password for user "phil"
+New password: phil
+Re-type new password: phil
+phil:$2y$05$asxsqfmEQJpg8zuKGyieMOmTirok.Gd/noliF.y48DJXe.97ufGHG
+
+
Copy the last line in the passwords file (see the docker-compose file).
+
Repeat the process for every user you want to give authentication to your registry.
+
Keep in mind I only cover AUTHENTICATION (who can access the registry), and not AUTHORIZATION (who can do what on the registry). With this setup, if you have access to the registry, you can do anything on it.
+
Use the registry
+
Start the services with
+
docker compose up
+
+
Now, you can access the webui by going to
+
http://localhost:8001
+
+
in a web browser and sign-in with your credentials. You should see an empty list. Let's add some images!
+
Naming images
+
Pick an image you want on the registry.
+
If it's an existing image:
+
docker tag name-of-existing-image localhost:5000/existing-image-name
+
+
If you build the image directly:
+
docker build -t localhost:5000/new-image-name
+
+
The name of the image must have the domain of the registry, in our case it's localhost:5000.
+
Login to registry
+
To sign in to the registry, use
+
docker login localhost:5000
+
+
and enter your credentials.
+
Push / Pull
+
Simply run the usual docker command to push or pull images. Docker will know which registry to use based of the image's name.
When we sign in to our server, the message of the day (MOTD) is pretty lame. Let's get something better!
+
This is the default MOTD of alpine:
+
Welcome to Alpine!
+
+The Alpine Wiki contains a large amount of how-to guides and general
+information about administrating Alpine systems.
+See <http://wiki.alpinelinux.org>.
+
+You can setup the system with the command: setup-alpine
+
+You may change this message by editing /etc/motd.
+
+
And here's my new MOTD. I even show the WireGuard ip address:
i code on my linux machine, and i use vim as my text editor.
+i've been using vim for almost 4 years, and i started to make my config file.
+i store it with git, along all my config files for my linux setup (aka my dot files).
+
here's the thing, i also use windows to code, and i also use vim.
+i also want to use the same config that i store in git.
+
to do so i need to do a symbolink link to my vimrc file. i dunno how to do that on windows.
+
here's how to do it:
+
cmd
+
if you use the old school, black boxed cmd.exe, you need to run these commands:
+
cd c:\users\_username_
+mklink .vimrc _path-to-vimrc_
+
+
and you should be good to go.
+just make sure it has been linked correctly with vim ~/.vimrc
+
powershell
+
if you use the new, blue boxed powershell.exe, it's a bit different:
+you can make it with powershell's language (or whatever they call the stuff they're using), but some require admin privileges, some require custom functions or something like that...
+
or you can keep it simple and use the cmd command to use cmd.exe to run the mklink program to make the symlink:
+
cd c:\users\_username_
+cmd /c mklink .vimrc _path-to-vimrc_
+
you read it right! i am a contributor to the linux kernel!
+
... but you are going to be dissapointed: my contributions are not going to change the world, just comments, alignments and documentation and stuff...
+
i submited something like 10 patches (as of april 10, 2018) and 3 patches have been accepted and are now into the kernel!
+
if you wanna check them out, you can read them on kernel.org.
+
yes, i am aware that Linus has a copy of the repo on github, but when i try to see my commits on github, i can't get them because there is too many commits and github can't get me the list.
+
so, here are my kernel contributions, listed by date:
just installed openbsd on my chromebook, seems to be working fine!
+
since it's my first time using openbsd, here are some stuff that i will start to do on my machines after installing openbsd:
+
enable doas
+
doas is kinda the equivalent of sudo. to enable it, run cp /etc/examples/doas.conf /etc to copy the doas config file.
+
disable root account
+
now that doas is ready, we dont need to root account anymore. to disable it, run usermod -p'*' root to set the root password to *. this will prevent root from log on directly to the machine (with su as an example), but with doas we can run doas sh to get a shell.
+
install missing firmware for your hardware
+
maybe your wifi card isn't working? or maybe you can't display any graphical interface? maybe that's because you don't have the firmware for it: here's how to install it:
+
run doas fw_update -i to see the missing firmwares.
+
so grab a flash drive, format it in fat filesystem format, go to firmware.openbsd.org, download the missing firmwares, along with the SHA256.sig and index.txt files, and put them on the usb key.
+
mount the flash drive on openbsd, and run doas fw_update -p *path of flash drive* to install the firmwares from the flash drive.
+
your missing firmware should not be anymore.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/processed_images/apple-rainbow.dae843aec90e4fd2.jpg b/processed_images/apple-rainbow.dae843aec90e4fd2.jpg
new file mode 100644
index 0000000..c9e4908
Binary files /dev/null and b/processed_images/apple-rainbow.dae843aec90e4fd2.jpg differ
diff --git a/processed_images/archlinux.456d8134dea984ad.jpg b/processed_images/archlinux.456d8134dea984ad.jpg
new file mode 100644
index 0000000..6d79adb
Binary files /dev/null and b/processed_images/archlinux.456d8134dea984ad.jpg differ
diff --git a/processed_images/darth-vader.8707e38ea58ce5b9.jpg b/processed_images/darth-vader.8707e38ea58ce5b9.jpg
new file mode 100644
index 0000000..657c426
Binary files /dev/null and b/processed_images/darth-vader.8707e38ea58ce5b9.jpg differ
diff --git a/processed_images/epitech.2fb0f9976e9b5a67.jpg b/processed_images/epitech.2fb0f9976e9b5a67.jpg
new file mode 100644
index 0000000..f7b2778
Binary files /dev/null and b/processed_images/epitech.2fb0f9976e9b5a67.jpg differ
diff --git a/processed_images/nsa.881fde7a73711187.jpg b/processed_images/nsa.881fde7a73711187.jpg
new file mode 100644
index 0000000..1fbdb27
Binary files /dev/null and b/processed_images/nsa.881fde7a73711187.jpg differ
diff --git a/processed_images/pornhub.66a33fa0ddb7d786.jpg b/processed_images/pornhub.66a33fa0ddb7d786.jpg
new file mode 100644
index 0000000..6e2db0f
Binary files /dev/null and b/processed_images/pornhub.66a33fa0ddb7d786.jpg differ
diff --git a/processed_images/puffy.00aa29dd6b99e171.jpg b/processed_images/puffy.00aa29dd6b99e171.jpg
new file mode 100644
index 0000000..de28406
Binary files /dev/null and b/processed_images/puffy.00aa29dd6b99e171.jpg differ
diff --git a/processed_images/thinkpad1.147b5c16ea6432da.jpg b/processed_images/thinkpad1.147b5c16ea6432da.jpg
new file mode 100644
index 0000000..67fd57d
Binary files /dev/null and b/processed_images/thinkpad1.147b5c16ea6432da.jpg differ
diff --git a/processed_images/thinkpad2.d689f4141765e8ee.jpg b/processed_images/thinkpad2.d689f4141765e8ee.jpg
new file mode 100644
index 0000000..ee62f27
Binary files /dev/null and b/processed_images/thinkpad2.d689f4141765e8ee.jpg differ
diff --git a/processed_images/tux-verry-small.9bd45f15396c7ffa.jpg b/processed_images/tux-verry-small.9bd45f15396c7ffa.jpg
new file mode 100644
index 0000000..2feb560
Binary files /dev/null and b/processed_images/tux-verry-small.9bd45f15396c7ffa.jpg differ
diff --git a/processed_images/vim.aed1174ef81696b6.jpg b/processed_images/vim.aed1174ef81696b6.jpg
new file mode 100644
index 0000000..7e452ca
Binary files /dev/null and b/processed_images/vim.aed1174ef81696b6.jpg differ
diff --git a/restart-chrome-url/index.html b/restart-chrome-url/index.html
new file mode 100644
index 0000000..995ba1f
--- /dev/null
+++ b/restart-chrome-url/index.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+ restart chrome with a url · deadbaed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
but this trick does not work with the <a> html tag, which seems logical, copy the link and paste it in a new tab to get it to work
+
it'd be annoying as fuck if you could click on links that restart your browser, imagine if an extension could replace every clickable link with this one! 😊
+
i think its usage is for chrome developers, the end user doesn't really care to type a url to restart their browser, they click on the x and they reopen it (duh).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..41dfab8
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Disallow:
+Allow: /
+Sitemap: https://blog.x4m3.rocks/sitemap.xml
diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg
new file mode 100644
index 0000000..6e9904a
--- /dev/null
+++ b/safari-pinned-tab.svg
@@ -0,0 +1,35 @@
+
+
+
diff --git a/search.js b/search.js
new file mode 100644
index 0000000..553b1de
--- /dev/null
+++ b/search.js
@@ -0,0 +1,199 @@
+function debounce(func, wait) {
+ var timeout;
+
+ return function () {
+ var context = this;
+ var args = arguments;
+ clearTimeout(timeout);
+
+ timeout = setTimeout(function () {
+ timeout = null;
+ func.apply(context, args);
+ }, wait);
+ };
+}
+
+// Taken from mdbook
+// The strategy is as follows:
+// First, assign a value to each word in the document:
+// Words that correspond to search terms (stemmer aware): 40
+// Normal words: 2
+// First word in a sentence: 8
+// Then use a sliding window with a constant number of words and count the
+// sum of the values of the words within the window. Then use the window that got the
+// maximum sum. If there are multiple maximas, then get the last one.
+// Enclose the terms in .
+function makeTeaser(body, terms) {
+ var TERM_WEIGHT = 40;
+ var NORMAL_WORD_WEIGHT = 2;
+ var FIRST_WORD_WEIGHT = 8;
+ var TEASER_MAX_WORDS = 30;
+
+ var stemmedTerms = terms.map(function (w) {
+ return elasticlunr.stemmer(w.toLowerCase());
+ });
+ var termFound = false;
+ var index = 0;
+ var weighted = []; // contains elements of ["word", weight, index_in_document]
+
+ // split in sentences, then words
+ var sentences = body.toLowerCase().split(". ");
+
+ for (var i in sentences) {
+ var words = sentences[i].split(" ");
+ var value = FIRST_WORD_WEIGHT;
+
+ for (var j in words) {
+ var word = words[j];
+
+ if (word.length > 0) {
+ for (var k in stemmedTerms) {
+ if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
+ value = TERM_WEIGHT;
+ termFound = true;
+ }
+ }
+ weighted.push([word, value, index]);
+ value = NORMAL_WORD_WEIGHT;
+ }
+
+ index += word.length;
+ index += 1; // ' ' or '.' if last word in sentence
+ }
+
+ index += 1; // because we split at a two-char boundary '. '
+ }
+
+ if (weighted.length === 0) {
+ return body;
+ }
+
+ var windowWeights = [];
+ var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
+ // We add a window with all the weights first
+ var curSum = 0;
+ for (var i = 0; i < windowSize; i++) {
+ curSum += weighted[i][1];
+ }
+ windowWeights.push(curSum);
+
+ for (var i = 0; i < weighted.length - windowSize; i++) {
+ curSum -= weighted[i][1];
+ curSum += weighted[i + windowSize][1];
+ windowWeights.push(curSum);
+ }
+
+ // If we didn't find the term, just pick the first window
+ var maxSumIndex = 0;
+ if (termFound) {
+ var maxFound = 0;
+ // backwards
+ for (var i = windowWeights.length - 1; i >= 0; i--) {
+ if (windowWeights[i] > maxFound) {
+ maxFound = windowWeights[i];
+ maxSumIndex = i;
+ }
+ }
+ }
+
+ var teaser = [];
+ var startIndex = weighted[maxSumIndex][2];
+ for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
+ var word = weighted[i];
+ if (startIndex < word[2]) {
+ // missing text from index to start of `word`
+ teaser.push(body.substring(startIndex, word[2]));
+ startIndex = word[2];
+ }
+
+ // add around search terms
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("");
+ }
+ startIndex = word[2] + word[0].length;
+ teaser.push(body.substring(word[2], startIndex));
+
+ if (word[1] === TERM_WEIGHT) {
+ teaser.push("");
+ }
+ }
+ teaser.push("…");
+ return teaser.join("");
+}
+
+function formatSearchResultItem(item, terms) {
+ return '
';
+}
+
+function initSearch() {
+ var $searchInput = document.getElementById("search");
+ var $searchResults = document.querySelector(".search-results");
+ var $searchResultsItems = document.querySelector(".search-results__items");
+ var MAX_ITEMS = 10;
+
+ var options = {
+ bool: "AND",
+ fields: {
+ title: {boost: 2},
+ body: {boost: 1},
+ }
+ };
+ var currentTerm = "";
+ var index;
+
+ var initIndex = async function () {
+ if (index === undefined) {
+ index = fetch("/search_index.en.json")
+ .then(
+ async function(response) {
+ return await elasticlunr.Index.load(await response.json());
+ }
+ );
+ }
+ let res = await index;
+ return res;
+ }
+
+ $searchInput.addEventListener("keyup", debounce(async function() {
+ var term = $searchInput.value.trim();
+ if (term === currentTerm) {
+ return;
+ }
+ $searchResults.style.display = term === "" ? "none" : "block";
+ $searchResultsItems.innerHTML = "";
+ currentTerm = term;
+ if (term === "") {
+ return;
+ }
+
+ var results = (await initIndex()).search(term, options);
+ if (results.length === 0) {
+ $searchResults.style.display = "none";
+ return;
+ }
+
+ for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) {
+ var item = document.createElement("li");
+ item.innerHTML = formatSearchResultItem(results[i], term.split(" "));
+ $searchResultsItems.appendChild(item);
+ }
+ }, 150));
+
+ window.addEventListener('click', function(e) {
+ if ($searchResults.style.display == "block" && !$searchResults.contains(e.target)) {
+ $searchResults.style.display = "none";
+ }
+ });
+}
+
+
+if (document.readyState === "complete" ||
+ (document.readyState !== "loading" && !document.documentElement.doScroll)
+) {
+ initSearch();
+} else {
+ document.addEventListener("DOMContentLoaded", initSearch);
+}
diff --git a/search_index.en.json b/search_index.en.json
new file mode 100644
index 0000000..d75a3ed
--- /dev/null
+++ b/search_index.en.json
@@ -0,0 +1 @@
+{"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"1":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":3.1622776601683795},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4,"/":{"docs":{},"df":0,"{":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"*":{"docs":{},"df":0,"/":{"docs":{},"df":0,"]":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"q":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"0":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951}},"df":3,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":2}}}},"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":2}}}},"1":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":4,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"5":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2,":":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2},"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"=":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"2":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":3.0}},"df":2,"'":{"docs":{},"df":0,"}":{"docs":{},"df":0,"`":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}},".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951}},"df":1},"7":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":2}}},"1":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1},"1":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"7":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},":":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"8":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}},"0":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951}},"df":2},"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}}},"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"4":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2,"'":{"docs":{},"df":0,"}":{"docs":{},"df":0,"`":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}},"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}}},"4":{"docs":{},"df":0,"3":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2},"4":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}},"5":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}},"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}}},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}},"0":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":2,"0":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":1,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}}},"a":{"docs":{},"df":0,"+":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":4}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951}},"df":2}}}}},"l":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1},"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}}}},"d":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1,"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.1622776601683795},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.4641016151377544}},"df":8,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":5,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"f":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}}}}},"g":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0}},"df":3,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":1}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":5}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":4},"p":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":3.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.4142135623730951}},"df":1}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":3},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,",":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.4142135623730951}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":4}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"y":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"k":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":3.0}},"df":1}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":7}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"4":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":1}}},"h":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":2}}}},"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.8284271247461903}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}},"x":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.4142135623730951}},"df":2}}}}}},"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"1":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\\":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":5.5677643628300215},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.8284271247461903}},"df":2,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},":":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}}}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.605551275463989},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.3166247903554}},"df":2},"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":4}}},"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.23606797749979}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1},"e":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"d":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":4},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":4.58257569495584},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.6457513110645907}},"df":3,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":6}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}},"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":8}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.7320508075688772}},"df":2,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"x":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":4}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":2.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":9,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.0}},"df":4}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.7320508075688772}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":3.605551275463989}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":9},"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1,"u":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":6,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.23606797749979}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}}}},"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":2}}},"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.6457513110645907}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":2}},"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":2}},"d":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":3.4641016151377544},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"c":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772}},"df":4,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.23606797749979}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2}}}},"f":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1},"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.4142135623730951}},"df":4}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":3}}},"k":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":3}}}}},"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":4},"o":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.1622776601683795}},"df":4},"c":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":3.872983346207417},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":5.291502622129181},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":8}},"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3},"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772}},"df":5,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.0}},"df":3,"r":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":2}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":6,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":7}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":5,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0}},"df":3}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":2.23606797749979}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.6457513110645907}},"df":1}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":5}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":4}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0}},"df":1,"1":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.4641016151377544},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.7320508075688772}},"df":10,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":5},"e":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.449489742783178}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":6}}},"x":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.3166247903554}},"df":2}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2},"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":2}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":4}}}},"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}}}}}},"w":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.4641016151377544},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":3}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"i":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0}},"df":1},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":3}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}}},"o":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":9,"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":3},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":3}}}},"h":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1,",":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,",":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":1}},"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":4,"'":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":8}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0}},"df":2,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":1}}}}}},"t":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,":":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"/":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"_":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2}},"m":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2},"v":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":4.69041575982343},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.605551275463989}},"df":3,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}},"f":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":2.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":10},"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":4}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178}},"df":1}}}}}}}}}}}}}},"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":3,":":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2},"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.1622776601683795}},"df":1}}}}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772}},"df":1,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":7,"d":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}},"j":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.1622776601683795}},"df":1,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"p":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979}},"df":1}}}}}}},"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.605551275463989},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":4,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":4}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":4}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"z":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":6},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"q":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.7320508075688772}},"df":2},"u":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1,"x":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":8}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951}},"df":3,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}},"g":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1},"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.1622776601683795}},"df":1,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":2.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":9}},"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}},"i":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}},"r":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.7320508075688772}},"df":1}}},"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0}},"df":1}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.0}},"df":1}}},"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"l":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0}},"df":1}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.7320508075688772}},"df":1}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":2.0}},"df":2,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.6457513110645907}},"df":7,".":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":1}}}}}}}},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":1}},"b":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":8}},"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"v":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2}}}}},"w":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":11,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"x":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":10}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":3,"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"y":{"docs":{},"df":0,"z":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":4,"c":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":3},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":6,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.23606797749979}},"df":1}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903}},"df":1}}}},"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"x":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":7,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":3,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,":":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":4.0}},"df":3,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":2}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"2":{"docs":{},"df":0,"y":{"docs":{},"df":0,"$":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{},"df":0,"s":{"docs":{},"df":0,"q":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"g":{"docs":{},"df":0,"8":{"docs":{},"df":0,"z":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,".":{"docs":{},"df":0,"y":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"d":{"docs":{},"df":0,"j":{"docs":{},"df":0,"x":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":3}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3}},"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":2}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":4}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":1}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":1}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":3},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"`":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":3.3166247903554}},"df":1}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":2}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":2},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":2,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":2}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":6}},"w":{"docs":{},"df":0,"d":{"docs":{},"df":0,")":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"}":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"q":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":2}}}}},"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":2,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.1622776601683795}},"df":5},"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":4},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}}}},"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":6.082762530298219}},"df":1},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":3.1622776601683795}},"df":1}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}},"q":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979}},"df":1,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1},"s":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":2.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.6457513110645907}},"df":6}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":2,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"f":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1,"c":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":3}}}},"m":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.4641016151377544},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":5,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}}}},"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":13}},"v":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":2,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":6}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2}}},"d":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1},"e":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":9,"m":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":2},"n":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":4.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.6457513110645907},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.3166247903554}},"df":7,"'":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.3166247903554},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.0}},"df":6}}}},"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":2.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":10}}}},"h":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979}},"df":1,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":4}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":4,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":4,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":5},"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.4142135623730951}},"df":3}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.6457513110645907}},"df":2,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":3}}}}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.605551275463989},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.3166247903554},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.872983346207417}},"df":9,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.8284271247461903}},"df":5}}}},"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"u":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":3,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}}}}}}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":4.358898943540674},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":2,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"=":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":2},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":5}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":4}}}},"u":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":2.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.0}},"df":6}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":6,"'":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":2,"a":{"docs":{},"df":0,"b":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2},"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0}},"df":1}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4}},"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":4},"k":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":5}},"p":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":2.0}},"df":3},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1},"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":5}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":3.4641016151377544}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":1}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":4},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.23606797749979}},"df":1}},"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.8284271247461903}},"df":1,".":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}},":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"$":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"_":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772}},"df":4,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":3.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":8}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"=":{"docs":{},"df":0,"$":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.7320508075688772}},"df":2}},"s":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.8284271247461903},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":3.3166247903554},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.23606797749979},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":3.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.7320508075688772}},"df":12,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":2}},"b":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":2.449489742783178}},"df":2},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":6,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}}}}}}},"@":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951}},"df":1,"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"8":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}},"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.4142135623730951}},"df":2,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"=":{"docs":{},"df":0,"`":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"m":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":2.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.7320508075688772}},"df":3,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":2.23606797749979}},"df":1,"_":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.7320508075688772}},"df":1}}}},"p":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":3}}},"w":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.449489742783178},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.7320508075688772}},"df":10}},"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951}},"df":2,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":2.0}},"df":1}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/dd-status/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":4.242640687119285}},"df":1,"0":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":2.449489742783178}},"df":2,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":2.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":3.7416573867739413},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":4.69041575982343}},"df":5}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":3}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/dd-status/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":8},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.7320508075688772}},"df":4}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.7320508075688772},"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":4,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"3":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"y":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.4142135623730951}},"df":3}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.4142135623730951}},"df":1}}}}}}},"z":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.7320508075688772}},"df":1,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}},"title":{"root":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":5}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":2}}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"x":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":6}}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.x4m3.rocks/archivebox-setup/":{"tf":1.0},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/coredns-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/docker-private-registry/":{"tf":1.0},"https://blog.x4m3.rocks/openbsd-setup/":{"tf":1.0},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"tf":1.0},"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":7}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://blog.x4m3.rocks/dd-status/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.x4m3.rocks/restart-chrome-url/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"tf":1.0},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.x4m3.rocks/wireguard-alpine/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"tf":1.0}},"df":1}}}}}},"documentStore":{"save":true,"docs":{"https://blog.x4m3.rocks/":{"body":"","id":"https://blog.x4m3.rocks/","title":""},"https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/":{"body":"","id":"https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/","title":""},"https://blog.x4m3.rocks/archivebox-setup/":{"body":"I discovered Archivebox and decided to install it on my server using containers.\nI just had to make a couple of adjustements, because all the content on the instance is publically available. I do not want that, I want to restrict access with user accounts.\nTo do so, start by finding out the container name, and open a shell:\ndocker exec --user=archivebox -it container-name-goes-here bash\n\nGo into the directory where Archivebox data is stored, and you will be able to run command to manage the instance.\nHide everything from the public\narchivebox config --set SAVE_ARCHIVE_DOT_ORG=False\narchivebox config --set PUBLIC_INDEX=False\narchivebox config --set PUBLIC_SNAPSHOTS=False\narchivebox config --set PUBLIC_ADD_VIEW=False\n\nCreate first user account\nNow that you cut outside world access to your instance, create an admin user to access and add new content:\narchivebox manage createsuperuser\n\nOnce finished, exit the shell and restart Archivebox.\n","id":"https://blog.x4m3.rocks/archivebox-setup/","title":"First setup of Archivebox"},"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"body":"on archlinux, to see when you installed arch on your computer, run this command\nsed -n \"/ installed $1/{s/].*/]/p;q}\" /var/log/pacman.log\n\nit will display the date and the time when you ran pacstrap on the live cd to install your system.\non my laptop, i get [2018-10-21 21:05], which is when i switched from fedora back to arch because my school required fedora.\n","id":"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/","title":"archlinux how old is your installation"},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"body":"Now that we have a WireGuard VPN with an awesome internal DNS server, let's get a web server with HTTPS!\nCaddy\nInstall\nYou will need to enable the community repo first.\ndoas apk add caddy\n\nConfiguration\nCreate a folder to serve stuff from, I placed it in\n/srv/www\n\nCreate the config in\n/etc/caddy/Caddyfile\n\nHere's the config, it's very simple to get started:\nintra.philt3r:80\nroot * /srv/www\nfile_server browse\n\nThis config will only launch an HTTP server, the HTTPS will come later.\nIt should work only from the WireGuard peers, since they can resolve the DNS name intra.philt3r.\nIf there is no index.html in the folder, it will serve static files directly.\nScript to launch\nCaddy already has a service!\n\nStart: rc-service caddy start\nStop: rc-service caddy stop\nReload configuration without downtime: rc-service caddy reload\n\nGenerate keys and certificates\nWe will generate the Root CA, the Intermediate CA.\nGenerate these with openssl installed on a computer, preferabbly offline.\nMake sure the keys are stored in a safe place, I will store mine inside of a KeePassXC keystore.\nOpenSSL Configuration\ninside a folder, create a file\nconfig.conf\n\nIn [CA_root], make sure to put your folder dir\n# OpenSSL root CA configuration file.\n\n[ ca ]\n# `man ca`\ndefault_ca = CA_root\n\n[ CA_root ]\n# Directory and file locations.\ndir = /home/phil/ca\ncerts = $dir/certs\ncrl_dir = $dir/crl\nnew_certs_dir = $dir/newcerts\ndatabase = $dir/index.txt\nserial = $dir/serial\nRANDFILE = $dir/private/.rand\n\n# The root key and root certificate.\n# Match names with Smallstep naming convention\nprivate_key = $dir/root_ca_key\ncertificate = $dir/root_ca.crt\n\n# For certificate revocation lists.\ncrlnumber = $dir/crlnumber\ncrl = $dir/crl/ca.crl.pem\ncrl_extensions = crl_ext\ndefault_crl_days = 30\n\n# SHA-1 is deprecated, so use SHA-2 instead.\ndefault_md = sha256\n\nname_opt = ca_default\ncert_opt = ca_default\ndefault_days = 25202\npreserve = no\npolicy = policy_strict\n\n[ policy_strict ]\n# The root CA should only sign intermediate certificates that match.\n# See the POLICY FORMAT section of `man ca`.\ncountryName = match\nstateOrProvinceName \t= supplied\nlocalityName\t \t= supplied\norganizationName = match\ncommonName = supplied\n\n[ req ]\n# Options for the `req` tool (`man req`).\ndefault_bits = 4096\ndistinguished_name = req_distinguished_name\nstring_mask = utf8only\n\n# SHA-1 is deprecated, so use SHA-2 instead.\ndefault_md = sha256\n\n# Extension to add when the -x509 option is used.\nx509_extensions = v3_ca\n\n[ req_distinguished_name ]\n# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.\ncountryName = Country (2 letter code)\nstateOrProvinceName = State or Region\nlocalityName = City\ncommonName = Common Name\n0.organizationName = Organization Name\n\n[ v3_ca ]\n# Extensions for a typical CA (`man x509v3_config`).\nsubjectKeyIdentifier = hash\nauthorityKeyIdentifier = keyid:always,issuer\nbasicConstraints = critical, CA:true\nkeyUsage = critical, digitalSignature, cRLSign, keyCertSign\n\n[ v3_intermediate_ca ]\n# Extensions for a typical intermediate CA (`man x509v3_config`).\nsubjectKeyIdentifier = hash\nauthorityKeyIdentifier = keyid:always,issuer\nbasicConstraints = critical, CA:true, pathlen:0\nkeyUsage = critical, digitalSignature, cRLSign, keyCertSign\n\n\nAfter, run\nmkdir newcerts\ntouch index.txt\necho 1420 > serial\n\nWe are now ready to generate keys and certificates.\nRoot key and certificate\nGenerate key:\nopenssl genrsa -aes256 -out root_ca_key 4096\n\nIt will ask for a passphrase, I generated mine with my KeePassXC.\nGenerate root certificate:\nopenssl req -config config.conf -key root_ca_key -days 3650 -new -x509 -sha256 -extensions v3_ca -out root_ca.crt\n\nMy root CA will last for 3650 days (10 years).\nHere's the info I provided:\nCountry (2 letter code) []:FR\nState or Region []:Bretagne\nCity []:Rennes\nCommon Name []:philt3r CA\nOrganization Name []:philt3r\n\nI saved the root_ca_key and root_ca.crt inside my KeePassXC.\nIntermediate key and certificate\nGenerate key:\nopenssl genrsa -aes256 -out intermediate_ca_key 4096\n\nIt will ask for a passphrase, I generated mine with my KeePassXC.\nGenerate certificate request:\nopenssl req -config config.conf -new -sha256 -key intermediate_ca_key -out intermediate_ca.csr.pem\n\nHere's the info I provided:\nCountry (2 letter code) []:FR\nState or Region []:Bretagne\nCity []:Rennes\nCommon Name []:philt3r Intermediate CA \nOrganization Name []:philt3r\n\nSign certificate request with Root key:\nopenssl ca -config config.conf -keyfile root_ca_key -cert root_ca.crt -extensions v3_intermediate_ca -days 1825 -notext -md sha256 -in intermediate_ca.csr.pem -out intermediate_ca.crt\n\nMy Intermediate certificate will last for 1825 days (5 years).\nSave these files, I saved them in my KeePassXC:\n\nintermediate_ca_key\nintermediate_ca.csr.pem\nintermediate_ca.crt\n\nOnce everything is saved and backed up, delete everything from your computer securely.\nCA and ACME server\nI discovered Smallstep, which allows to become your own ACME server.\nInstall\nThey provide packages for Alpine!\nInstall the packages with\napk add step-cli step-certificates\n\nConfiguration\nStart by creating the folder where step will save all the configs:\nmkdir /etc/step-ca -p\n\nLet's configure step-ca!\nSTEPPATH=/etc/step-ca step ca init --name=\"philt3r\" --acme --address=\"10.131.111.1:444\" --provisioner=\"philt3r\" --deployment-type standalone\n\nI ask it to run on the address 10.131.111.1 (the WireGuard ip) and on the port 444. The port 443 will be used for a https server, so I picked 443 + 1.\nSince I want an ACME server, I asked to get one.\nStep will ask what IP address the clients will use to reach your ca, reply with 10.131.111.1, because only WireGuard peers and the server should be allowed.\nThis will prompt a password, put one.\nStep will generate a root and intermediate key, as well as an intermediate certificate. We don't want that, since we already generated our own.\nCopy these files in /etc/step-ca/certs:\n\nroot_ca.crt\nintermediate_ca.crt\n\nCopy intermediate_ca_key in /etc/step-ca/secrets folder. I use the key directly, but in a safe environment use a Yubikey, but I don't have one.\nStart the CA/ACME server\nRun\nstep-ca /etc/step-ca/config/ca.json\n\nto start the server. It will ask your password to decrypt the intermediate_ca_key. Provide the password.\nThe server should start, stop it.\nWe will now create a file containing the password of the intermediate_ca_key, since we want to have the ACME server starting when Alpine will boot.\nWhy put the password inside a file? Well, simply because we can't type the password at boot. Again, in an ideal environment, use a Yubikey.\nCreate a file at\n/etc/step-ca/password.txt\n\nand place the password inside that file.\nstep should run as the user step-ca, so update the permissions on the config folder:\nchown step-ca:step-ca -Rv /etc/step-ca/\n\nTo verify that everything worked, run:\nstep-ca /etc/step-ca/config/ca.json --password-file=/etc/step-ca/password.txt\n\nStop the server again.\nScript to launch\nStep already has a service!\n\nStart: rc-service step-ca start\nStop: rc-service step-ca stop\n\nUse ACME with Caddy\nNow let's tell Caddy to get TLS certificates with our ACME server.\nEdit the /etc/caddy/Caddyfile:\n# global\n{\n # step-ca ACME server\n acme_ca https://10.131.111.1:444/acme/acme/directory\n}\n\nintra.philt3r intra.philt3r:80 {\n root * /srv/www\n file_server browse\n}\n\nMake sure step-ca is started, and restart Caddy to make sure everything is good:\nrc-service caddy restart\n\nNow we need to tell our system to trust the certificates.\nDownload the file containing the certificates. It is available at this URL:\nhttps://10.131.111.1:444/roots.pem\n\nOn every device you want to trust your certificates, you will need to download the file on the device, then you will need to tell your operating system to trust it.\n\nOSX: Trust the certificate\niOS: Download the certificate from the device and trust it\nFirefox: Install the certificate on your system and tell firefox to trust it\nLinux distros: Ubuntu, Fedora\n\nStart on boot\nStart caddy and step-ca on startup with:\nrc-update add step-ca\nrc-update add caddy\n\nReboot to make sure everything works.\nResources\n\nhttps://wiki.alpinelinux.org/wiki/Repositories\nAwesome guide that helped me a lot: https://www.apalrd.net/posts/2023/network_acme/\n\n","id":"https://blog.x4m3.rocks/caddy-ca-acme-alpine/","title":"Setup Caddy with a CA and ACME server on Alpine Linux"},"https://blog.x4m3.rocks/coredns-alpine/":{"body":"Now that we have a WireGuard VPN, let's add a DNS server, to type letters instead of numbers!\nInstall CoreDNS\nYou will need to enable the community repo first.\ndoas apk add coredns\n\nConfiguration\nCreate the config in\n/etc/coredns/Corefile\n\n# snippets\n(common) {\n cache 60\n acl {\n allow net 127.0.0.1 10.131.110.0/24 10.131.111.0/24\n block\n }\n}\n\n# intranet\nphilt3r {\n import common\n log . {combined} {\n class denial error success\n }\n\n hosts {\n 10.131.111.1 intra.philt3r\n falltrough\n }\n}\n\n# extranet\n. {\n import common\n\n # Free DNS\n forward . 212.27.40.240 212.27.40.241\n}\n\nMy DNS service of choice comes from free.fr. Feel free to put your own favorite DNS service!\nScript to launch on server startup\nCoreDNS already has a service!\n\nAdd at startup: rc-update add coredns\nRemove from startup: rc-update del coredns\nShow services at startup: rc-status\n\nThe logs of CoreDNS should be available at\n/var/log/coredns/coredns.log\n\nUse CoreDNS on the system\nNow that we have our DNS server, let's use it on our server!\nIf you use DHCP to get the ip address of your server, the DNS will always be used from the DHCP.\nWe want to use our own DHCP server.\nCreate the file (and the folder associated with it)\n/etc/udhcpc/udhcpc.conf\n\nand put\nRESOLV_CONF=\"NO\"\n\nThen, edit the\n/etc/resolv.conf\n\nand put\nnameserver 127.0.0.1\n\nRestart the server.\n","id":"https://blog.x4m3.rocks/coredns-alpine/","title":"Setup CoreDNS on Alpine Linux"},"https://blog.x4m3.rocks/dd-status/":{"body":"Here's a cool tip if you use dd to copy disk images to a disk, or if you want to clone drives.\nAs we all know (or should know), dd is a powerful tool; but it can be dangerous if not manipulated correctly.\nBy default, dd doesn't give any information on what is it doing; which can be very boring, because you don't know when you'll be able to test that new Linux distro you just discovered!\nWell, good news! You can get some status from dd! This tip works on Linux and OS X.\nLinux\nWhen you enter your dd command, add this little snippet at the end:\nstatus=progress\n\nWhen dd will be busy doing its thing, you should get some info about its progress.\nOS X\nRun your dd command normally without status=progress, after that open a new terminal and enter this command:\nwhile pgrep ^dd; do sudo pkill -INFO dd; sleep 30; done;\n\nAnd come back into the dd command. When the dd task will be done, the second command we ran will exit as well and you can close that other terminal safely.\n30 is the number of seconds that will update the counter every X seconds.\n","id":"https://blog.x4m3.rocks/dd-status/","title":"dd status"},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"body":"this guide will show you how to install docker, download the epitech moulinette container and learn how to use it for your projects.\ninstall\nubuntu:\nsudo apt install docker.io\n\narch:\nsudo pacman -S docker\n\nsetup docker before first use\nto use docker without root privileges run\nsudo usermod -aG docker $USER\n\nand REBOOT your computer afterwards for changes to take effect.\nto start docker on every boot\nsudo systemctl enable docker\n\nget the epitech container\ndocker pull epitechcontent/epitest-docker\n\nwill download the epitech moulinette environement. make sure to have fast internet, because the container is about 5 gigabytes.\nstart the container and get a shell\ngo into the directory you want to get a shell in the epitech container.\ndocker run -it --rm -v $(pwd):/home/project -w /home/project epitechcontent/epitest-docker /bin/bash\n\nwill get you a bash prompt: you are now in the container. run the commands you want, and exit the shell when you are done.\nif you are using docker on windows (inside powershell), run\ndocker run -it --rm -v ${pwd}:/home/project -w /home/project epitechcontent/epitest-docker /bin/bash\n\n","id":"https://blog.x4m3.rocks/docker-epitech-moulinette/","title":"how to use the docker of the epitech moulinette"},"https://blog.x4m3.rocks/docker-private-registry/":{"body":"My internal infrastructure is complete. I can now work on my projects, but at some point they need to go out to the world!\nThe platform for most of my projects is the web, and the best tool I found so far to deploy them is Docker.\nI want to keep the code on the private infrastructure, but I also want to be in control of where the docker images will be stored.\nThe perfect solution is a private Docker registry! But it will not be on the internal infrastructure, it will be publicly available on a regular server.\nThat way, projects can be deployed in their final form whenever and wherever, while the source remaining private.\nGet started locally\nTo start, I will launch a test registry on my machine to make sure everything works.\nI will use these docker images:\n\nregistry: The official registry made by Docker themselves\ndocker-registry-ui: A nice webui to view and manage images on the registry\n\nHere's the docker-compose file I used to get started:\nservices:\n\n registry-server:\n image: registry:2.8.2\n ports:\n - 5000:5000\n volumes:\n - ./registry-data:/var/lib/registry\n - ./passwords:/auth/htpasswd\n environment:\n REGISTRY_AUTH: 'htpasswd'\n REGISTRY_AUTH_HTPASSWD_REALM: 'Registry Realm'\n REGISTRY_AUTH_HTPASSWD_PATH: '/auth/htpasswd'\n REGISTRY_HTTP_HEADERS_Access-Control-Origin: '[http://registry.example.com]'\n REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'\n REGISTRY_HTTP_HEADERS_Access-Control-Credentials: '[true]'\n REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'\n REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'\n REGISTRY_STORAGE_DELETE_ENABLED: 'true'\n container_name: registry-server\n\n registry-ui:\n image: joxit/docker-registry-ui:2.5.0\n ports:\n - 8001:80\n environment:\n SINGLE_REGISTRY: true\n REGISTRY_TITLE: Docker Registry UI\n DELETE_IMAGES: true\n SHOW_CONTENT_DIGEST: true\n NGINX_PROXY_PASS_URL: http://registry-server:5000\n SHOW_CATALOG_NB_TAGS: true\n CATALOG_MIN_BRANCHES: 1\n CATALOG_MAX_BRANCHES: 1\n TAGLIST_PAGE_SIZE: 100\n REGISTRY_SECURED: false\n CATALOG_ELEMENTS_LIMIT: 1000\n container_name: registry-ui\n\nBut don't start the services right away.\nAuthentication\nI don't want the registry being open to everyone though, let's add some authentication.\nTo keep things simple, I will use HTTP basic auth. If you want, there's a possibility to have a more complex setup.\nHere's a quick script to get passwords in a format that Docker will accept:\n#!/bin/sh\n#\n# new-password.sh\n\nif [ -z \"$1\" ]\nthen\necho \"usage: $0 username\"\nexit 1\nfi\n\necho \"creating password for user \\\"$1\\\"\"\nhtpasswd -nB $1\n\nHow to use it:\n$ ./new-password.sh phil\ncreating password for user \"phil\"\nNew password: phil\nRe-type new password: phil\nphil:$2y$05$asxsqfmEQJpg8zuKGyieMOmTirok.Gd/noliF.y48DJXe.97ufGHG\n\nCopy the last line in the passwords file (see the docker-compose file).\nRepeat the process for every user you want to give authentication to your registry.\nKeep in mind I only cover AUTHENTICATION (who can access the registry), and not AUTHORIZATION (who can do what on the registry). With this setup, if you have access to the registry, you can do anything on it.\nUse the registry\nStart the services with\ndocker compose up\n\nNow, you can access the webui by going to\nhttp://localhost:8001\n\nin a web browser and sign-in with your credentials. You should see an empty list. Let's add some images!\nNaming images\nPick an image you want on the registry.\nIf it's an existing image:\ndocker tag name-of-existing-image localhost:5000/existing-image-name\n\nIf you build the image directly:\ndocker build -t localhost:5000/new-image-name\n\nThe name of the image must have the domain of the registry, in our case it's localhost:5000.\nLogin to registry\nTo sign in to the registry, use\ndocker login localhost:5000\n\nand enter your credentials.\nPush / Pull\nSimply run the usual docker command to push or pull images. Docker will know which registry to use based of the image's name.\ndocker push localhost:5000/new-image-name\ndocker pull localhost:5000/existing-image-name\n\nThat's pretty much it!\nDeploy to production\nI use Caprover to deploy my docker images easily, it comes with a reverse proxy and automatic TLS certificates with Let's encrypt.\nHere's the one-click-app config I created for the registry:\ncaptainVersion: 4\n\nservices:\n $$cap_appname-registry:\n image: registry:$$cap_registry_version\n volumes:\n - $$cap_appname-data:/var/lib/registry\n - $$cap_appname-auth:/auth/\n environment:\n REGISTRY_AUTH: 'htpasswd'\n REGISTRY_AUTH_HTPASSWD_REALM: 'Registry Realm'\n REGISTRY_AUTH_HTPASSWD_PATH: '/auth/htpasswd'\n REGISTRY_HTTP_HEADERS_Access-Control-Origin: '[https://$$cap_appname-registry.$$cap_root_domain, https://$$cap_appname-ui.$$cap_root_domain]'\n REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods: '[HEAD,GET,OPTIONS,DELETE]'\n REGISTRY_HTTP_HEADERS_Access-Control-Credentials: '[true]'\n REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers: '[Authorization,Accept,Cache-Control]'\n REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers: '[Docker-Content-Digest]'\n REGISTRY_STORAGE_DELETE_ENABLED: 'true'\n caproverExtra:\n containerHttpPort: '5000'\n\n $$cap_appname-ui:\n image: joxit/docker-registry-ui:$$cap_ui_version\n environment:\n SINGLE_REGISTRY: true\n REGISTRY_TITLE: Docker Registry UI\n DELETE_IMAGES: true\n SHOW_CONTENT_DIGEST: true\n NGINX_PROXY_PASS_URL: http://srv-captain--$$cap_appname-registry:5000\n SHOW_CATALOG_NB_TAGS: true\n CATALOG_MIN_BRANCHES: 1\n CATALOG_MAX_BRANCHES: 1\n TAGLIST_PAGE_SIZE: 100\n REGISTRY_SECURED: false\n CATALOG_ELEMENTS_LIMIT: 1000\n\ncaproverOneClickApp:\n variables:\n - id: '$$cap_registry_version'\n label: Registry Version\n defaultValue: '2.8.2'\n description: Check out the Docker page for the valid tags https://hub.docker.com/_/registry/tags\n validRegex: \"/.{1,}/\"\n - id: '$$cap_ui_version'\n label: UI Version\n defaultValue: '2.5.0'\n description: Check out the Docker page for the valid tags https://hub.docker.com/r/joxit/docker-registry-ui/tags\n validRegex: \"/.{1,}/\"\n instructions:\n start: |-\n A private docker registry, with a webui to see images\n end: |-\n The registry has been deployed! Look in the \"auth\" volume to update credentials\n displayName: docker-registry-with-ui\n isOfficial: false\n description: A private docker registry, with a webui to see images\n documentation: https://docs.docker.com/registry/\n\n","id":"https://blog.x4m3.rocks/docker-private-registry/","title":"Setup a private Docker registry"},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"body":"When we sign in to our server, the message of the day (MOTD) is pretty lame. Let's get something better!\nThis is the default MOTD of alpine:\nWelcome to Alpine!\n\nThe Alpine Wiki contains a large amount of how-to guides and general\ninformation about administrating Alpine systems.\nSee <http://wiki.alpinelinux.org>.\n\nYou can setup the system with the command: setup-alpine\n\nYou may change this message by editing /etc/motd.\n\nAnd here's my new MOTD. I even show the WireGuard ip address:\n\n\n Name: intra.philt3r\n Kernel: 6.1.35-0-lts\n Distro: Alpine Linux v3.18\n Version 3.18.2\n\n Uptime: 0 days, 0 hours, 22 minutes\n CPU Load: 0.00, 0.00, 0.00\n\n Memory: 468M\n Free Memory: 217M\n\n Disk: 6.6G\n Free Disk: 6.6G\n\n eth0 Address: 192.168.1.71\n wg0 Address: 10.131.111.1\n\n\n\nStart and enable cron at startup (it should be installed by default):\nrc-service crond start\nrc-update add crond\n\nLet's run a script every 15 minutes to update the /etc/motd file:\n/etc/periodic/15min/motd\n\nHere's the content of my MOTD:\n#!/bin/sh\n#. /etc/os-release\nPRETTY_NAME=`awk -F= '$1==\"PRETTY_NAME\" { print $2 ;}' /etc/os-release | tr -d '\"'`\nVERSION_ID=`awk -F= '$1==\"VERSION_ID\" { print $2 ;}' /etc/os-release`\nUPTIME_DAYS=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 / 86400)\nUPTIME_HOURS=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 % 86400 / 3600)\nUPTIME_MINUTES=$(expr `cat /proc/uptime | cut -d '.' -f1` % 31556926 % 86400 % 3600 / 60)\ncat > /etc/motd << EOF\n\n\n Name: `hostname`\n Kernel: `uname -r`\n Distro: $PRETTY_NAME\n Version $VERSION_ID\n\n Uptime: $UPTIME_DAYS days, $UPTIME_HOURS hours, $UPTIME_MINUTES minutes\n CPU Load: `cat /proc/loadavg | awk '{print $1 \", \" $2 \", \" $3}'`\n\n Memory: `free -m | head -n 2 | tail -n 1 | awk {'print $2'}`M\n Free Memory: `free -m | head -n 2 | tail -n 1 | awk {'print $4'}`M\n\n Disk: `df -h / | awk '{ a = $2 } END { print a }'`\n Free Disk: `df -h / | awk '{ a = $2 } END { print a }'`\n\n eth0 Address: `ifconfig eth0 | grep \"inet addr\" | awk -F: '{print $2}' | awk '{print $1}'`\n wg0 Address: `ifconfig wg0 | grep \"inet addr\" | awk -F: '{print $2}' | awk '{print $1}'`\n\n\nEOF\n\nMake the script executable, and check if it's good:\nchmod a+x /etc/periodic/15min/motd\nrun-parts --test /etc/periodic/15min\n\nIf you're lazy and don't want to wait 15 minutes, run the script directly:\n/etc/periodic/15min/motd\n\nLog out and log back in, you should see the new MOTD!\nResources\nhttps://kingtam.win/archives/apline-custom.html\nI just copy/pasted and changed the MOTD.\n","id":"https://blog.x4m3.rocks/dynamic-motd-alpine/","title":"Dynamic MOTD on Alpine Linux"},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"body":"i code on my linux machine, and i use vim as my text editor.\ni've been using vim for almost 4 years, and i started to make my config file.\ni store it with git, along all my config files for my linux setup (aka my dot files).\nhere's the thing, i also use windows to code, and i also use vim.\ni also want to use the same config that i store in git.\nto do so i need to do a symbolink link to my vimrc file. i dunno how to do that on windows.\nhere's how to do it:\ncmd\nif you use the old school, black boxed cmd.exe, you need to run these commands:\ncd c:\\users\\_username_\nmklink .vimrc _path-to-vimrc_\n\nand you should be good to go.\njust make sure it has been linked correctly with vim ~/.vimrc\npowershell\nif you use the new, blue boxed powershell.exe, it's a bit different:\nyou can make it with powershell's language (or whatever they call the stuff they're using), but some require admin privileges, some require custom functions or something like that...\nor you can keep it simple and use the cmd command to use cmd.exe to run the mklink program to make the symlink:\ncd c:\\users\\_username_\ncmd /c mklink .vimrc _path-to-vimrc_\n\nsources\ni found this blog post to find out how to do symlinks on cmd,\nand i used this wikipedia article and this stackoverflow thread to learn how to do it on powershell.\n","id":"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/","title":"how to link your vimrc file on windows"},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"body":"you read it right! i am a contributor to the linux kernel!\n... but you are going to be dissapointed: my contributions are not going to change the world, just comments, alignments and documentation and stuff...\ni submited something like 10 patches (as of april 10, 2018) and 3 patches have been accepted and are now into the kernel!\nif you wanna check them out, you can read them on kernel.org.\nyes, i am aware that Linus has a copy of the repo on github, but when i try to see my commits on github, i can't get them because there is too many commits and github can't get me the list.\nso, here are my kernel contributions, listed by date:\n\nfeb 23, 2016\nmar 7, 2016\ndec 28, 2017\n\n","id":"https://blog.x4m3.rocks/linux-kernel-contributions/","title":"my contributions to the linux kernel"},"https://blog.x4m3.rocks/openbsd-setup/":{"body":"just installed openbsd on my chromebook, seems to be working fine!\nsince it's my first time using openbsd, here are some stuff that i will start to do on my machines after installing openbsd:\nenable doas\ndoas is kinda the equivalent of sudo. to enable it, run cp /etc/examples/doas.conf /etc to copy the doas config file.\ndisable root account\nnow that doas is ready, we dont need to root account anymore. to disable it, run usermod -p'*' root to set the root password to *. this will prevent root from log on directly to the machine (with su as an example), but with doas we can run doas sh to get a shell.\ninstall missing firmware for your hardware\nmaybe your wifi card isn't working? or maybe you can't display any graphical interface? maybe that's because you don't have the firmware for it: here's how to install it:\nrun doas fw_update -i to see the missing firmwares.\nso grab a flash drive, format it in fat filesystem format, go to firmware.openbsd.org, download the missing firmwares, along with the SHA256.sig and index.txt files, and put them on the usb key.\nmount the flash drive on openbsd, and run doas fw_update -p *path of flash drive* to install the firmwares from the flash drive.\nyour missing firmware should not be anymore.\n","id":"https://blog.x4m3.rocks/openbsd-setup/","title":"openbsd first setup after install"},"https://blog.x4m3.rocks/restart-chrome-url/":{"body":"did you know that you can restart chrome/chromium with a simple url?\nhere is it: about://restart !\nbut this trick does not work with the <a> html tag, which seems logical, copy the link and paste it in a new tab to get it to work\nit'd be annoying as fuck if you could click on links that restart your browser, imagine if an extension could replace every clickable link with this one! 😊\ni think its usage is for chrome developers, the end user doesn't really care to type a url to restart their browser, they click on the x and they reopen it (duh).\n","id":"https://blog.x4m3.rocks/restart-chrome-url/","title":"restart chrome with a url"},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"body":"Now we have a basic internal infrastructure with:\n\nEverything hidden and encrypted through the network (WireGuard)\nPretty internal domain names instead of raw ip addresses (CoreDNS)\nA basic http server just in case (Caddy)\nOur own TLS certificates that are easy to get (Step CA)\n\nBut everything is on the same machine. While it could be okay, I will host the services I want on other machines.\nI will run them on the same Proxmox cluster, but the possibilities are endless (as long you can get WireGuard running).\nGet started\nInstall Alpine. Setup ssh and repositories.\nWireGuard\nWe will set up WireGuard, but not a server, a regular peer that will connect to the WireGuard server.\nCreate a new peer on the WireGuard server, and get the config file ready.\nInstall\nInstall WireGuard:\napk add wireguard-tools\n\nTo load the WireGuard module on startup, edit\n/etc/modules\n\nand simply add\nwireguard\n\nand reboot.\nConfigure\nPut the WireGuard config to\n/etc/wireguard/wg0.conf\n\nStart\nCopy the init.d script for WireGuard like we did for the original server.\nAnd ask it to start on boot.\nReboot and make sure everything works, you should see WireGuard logs when the machine is starting.\nAnd the DNS should be working! Try to ping an internal DNS name.\nSometimes the DNS will go back to the system's default (probably your DHCP server's), so force the DNS as seen in the post about CoreDNS.\nDNS entry\nIn the main server, edit CoreDNS to add a new DNS entry for the newly added peer.\nSave and restart CoreDNS.\nMOTD\nAdd the dynamic MOTD if you feel like it. I did.\nReverse proxy\nBefore installing and starting services, let's add a reverse proxy for security + some sweet TLS certs.\nI'll be using caddy. You will need to enable the community repo first.\napk add caddy\n\nLet's get a hello world:\n/etc/caddy/Caddyfile\n\n# global\n{\n # step-ca ACME server\n acme_ca https://10.131.111.1:444/acme/acme/directory\n}\n\ndocker.philt3r docker.philt3r:80 {\n respond \"Hello, world!\"\n}\n\nI start the service on ports 80 and 443 to get the initial TLS certificate, I will remove access on port 80 afterward.\nDon't start caddy yet.\nTLS certificates\nOn our new server, we need to trust the root ca. Download the root ca, and ask the system to trust it:\napk add ca-certificates ca-certificates-bundle\nwget --no-check-certificate https://10.131.111.1:444/roots.pem -O /usr/local/share/ca-certificates/philt3r.crt\nupdate-ca-certificates \n\nNow we can start caddy and enable it on boot:\nrc-service caddy start\nrc-update add caddy\n\nYou should get a Hello World on port 443. If you do, you can disable access from port 80 in the Caddyfile and restart caddy.\nInstall the service\nNow we can install the service we want to host, start it, and configure caddy to be a reverse proxy for it.\nRepeat the process for the other services you want to host.\nProtip: serve the services on 127.0.0.1 and use caddy to restrict access only from the WireGuard peers (since there is the DNS restriction).\nSample Caddyfile:\n# global\n{\n # step-ca ACME server\n acme_ca https://10.131.111.1:444/acme/acme/directory\n}\n\ndocker.philt3r {\n reverse_proxy 127.0.0.1:3000\n}\n\nDocker\nSince I'll be using Docker to host most services, I'll install it:\napk add docker docker-compose\nrc-update add docker\nrc-service docker start\n\nThen spin up your docker containers and route them with caddy.\n","id":"https://blog.x4m3.rocks/service-internal-infra-alpine/","title":"Setup a service on our internal infrastructure on Alpine Linux"},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"body":"disclaimer\ni need to warn you that you are on your own. even though it works fine, i'm not responsible of what you do.\nintroduction\nyou have a thinkpad. it's beautiful, it's fast, it's perfect, it doesn't run windows; there's just one thing that could be perfect: the boot logo.\nby default on new models, your boot logo look like this:\n\nto get a custom boot logo, you need:\n\nan internet connection\na compatible model\na usb flash drive\na gif image (you can also use a bmp or a jpg image, but i've found that with gif images it works better)\n\nget the BIOS update\nto install your custom boot logo, you need to flash a BIOS update.\nto download the BIOS update, go on lenovo's support website, choose drivers and updates and find your model.\nnext, go in the section BIOS/UEFI and download the BIOS Update (Bootable CD). it will download a iso image.\nif you can't find the update image, that means that you're out of luck, and you can't get a custom boot logo. sorry.\nconvert the iso image\nnow that you have the iso image, you need to convert it to a img file. to do so, run the following command in a terminal:\ngeteltorito -o bios-image.img bios-image-downloaded.iso\n\nif you don't have geteltorito, look online to install it.\nflash the image on your usb drive\nnow it's time to flash the image on your usb drive. get the name of your flash drive using lsblk, plug your usb drive, and run lsblk again to see your drive.\ngo into the folder where the img file is located, and run in a terminal:\nsudo dd if=bios-image.img of=/dev/sdX bs=1M status=progress oflag=sync\n\nwhere X is your drive letter that you know thanks to lsblk.\nget the gif file to use\nif you want, i already have this selection of images ready to be used, or you can make your own!\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\nyou can see the requirements, go in your usb drive, open the readme.txt in the flash folder.\nput the gif image in the flash folder, and name it LOGO1.JPG. copy that image, and name that one LOGO2.JPG.\ncheck the readme.txt file to see the filenames, they might differ on different models.\nflash the BIOS update\nreboot your computer, and boot on the usb flash drive. if you don't know how, the internet should help you with that.\nnow that the flash utility has booted, choose the second option, and follow the instructions.\nthe computer will reboot, flash the update, and when it will reboot, you should get your custom boot logo!\n\nif you want to go back to the default logo, simply reflash the bios update, when when asked if you want to use your custom logo, say no, and the default logo will be put back.\n","id":"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/","title":"how to put a custom boot logo on a thinkpad"},"https://blog.x4m3.rocks/wireguard-alpine/":{"body":"Let's do this baremetal, no Docker!\nI will do this inside a Proxmox virtual machine.\nGet started\nStart by installing Alpine Linux: Run the installer, next, next, next, and boot the os once it's done.\nSetup ssh\nCopy ssh key (run this on your local machine):\nssh-copy-id -i ~/.ssh/id_rsa.pub user@ip\n\nLogin via ssh, and install your favorite editor:\ndoas apk add vim\n\nEdit ssh config to force ssh key use:\ndoas vim /etc/ssh/sshd_config\n\nFind and update these statements:\nPermitRootLogin no\nPubkeyAuthentication yes\n\nRestart ssh service, logout, and log back in\ndoas rc-service sshd restart\n\nSetup alpine package manager\nI use mirrors.ircam.fr as my mirror\nOpen \n/etc/apk/repositories\n\nadd the community repo, and run updates:\ndoas apk -U upgrade\n\nWireGuard basics\nInstall WireGuard:\ndoas apk add wireguard-tools\n\nKernel module\nLoad the module\ndoas modprobe wireguard\n\nTo launch the module on startup, edit\n/etc/modules\n\nand simply add\nwireguard\n\nat the bottom, and save the file.\nIP forwarding\nEdit\n/etc/sysctl.conf\n\nand add\nnet.ipv4.ip_forward = 1\n\nat the bottom of the file, and save\nLaunch sysctl on startup with\ndoas rc-update add sysctl\n\nand reboot.\nIP Addresses\nPick a range if ip addresses to use: RFC 1918\nI'll pick 10.131.111.x for the WireGuard peers.\nCalculate your CIDR: https://www.ipaddressguide.com/cidr\nHere's my network layout:\n\nCIDR: 10.131.110.0/23\nStart: 10.131.110.0\nEnd: 10.131.111.255\n\nNetwork services:\n\nStart: 10.131.110.0/24\nEnd: 10.131.110.255/24\n\nWireGuard:\n\nStart: 10.131.111.0/24\nEnd: 10.131.111.255/24\n\nGenerate keys for WireGuard\nDo everything as root (doas is the equivalent of sudo):\ndoas su\n\nMove to the wireguard configuration, I'll store everything there for easy access:\ncd /etc/wireguard/\n\nGenerate the private and public key, store them in files (we'll use them later):\nwg genkey | tee philt3r-privatekey | wg pubkey > philt3r-publickey\n\nConfigure server interface\nAll the server configuration will happen in\n/etc/wireguard/wg0.conf\n\nProtip for vim users: To add content of a file in current buffer directly: StackOverflow answer\n[Interface]\n# Name = wg0\nAddress = 10.131.111.1/24\nListenPort = 51820\nPrivateKey = <server-private-key>\nPostUp = iptables -t nat -A POSTROUTING -s 10.131.111.0/24 -o %i -j MASQUERADE;\nPostUp = iptables -t nat -A POSTROUTING -s 10.131.110.0/24 -o %i -j MASQUERADE;\nPostUp = iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT;\nPostUp = iptables -A FORWARD -i %i -j ACCEPT;\nPostUp = iptables -A FORWARD -o %i -j ACCEPT;\nPostDown = iptables -t nat -D POSTROUTING -s 10.131.111.0/24 -o %i -j MASQUERADE;\nPostDown = iptables -t nat -D POSTROUTING -s 10.131.110.0/24 -o %i -j MASQUERADE;\nPostDown = iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT;\nPostDown = iptables -D FORWARD -i %i -j ACCEPT;\nPostDown = iptables -D FORWARD -o %i -j ACCEPT;\n\nOnce it's good, make sure only root can read and write to the files:\nchmod 600 /etc/wireguard/*\n\nAdd new peer\nYou will need to repeat this for each new peer\ncd /etc/wireguard/\n\nGenerate keys\nStarting now, name is a placeholder for the name of the peer.\nI typically use the format name-of-person followed by device-name. For example, the peer for my phone will be phil-iphone.\nCreate folder to store keys for the peer:\nmkdir -p peers/name\n\nGenerate preshared key (not required):\nwg genpsk | tee peers/name/preshared.psk\n\nGenerate private and public keys for the peer:\nwg genkey | tee peers/name/private.key | wg pubkey > peers/name/public.key\n\nUpdate server configuration\nEdit your wg0.conf, add at the bottom:\n[Peer]\n# Name = name\nPublicKey = <peers/name/public.key>\nPresharedKey = <peers/name/preshared.psk>\nAllowedIPs = 10.131.111.2/32\nAllowedIPs = 10.131.110.0/24\nAllowedIPs = 10.131.111.0/24\n\nPeer configuration\nNow let's create the configuration to give to the peer:\nCreate the file\npeers/name/philt3r-name.wg.conf\n\nAnd put the following\n[Interface]\nPrivateKey = <peers/name/private.key>\nAddress = 10.131.111.2/24\n#DNS = 10.131.111.1\n\n[Peer]\nPublicKey = <server-public-key>\nPresharedKey = <peers/name/preshared.psk>\nEndpoint = <server-ip>:51820\nAllowedIPs = 10.131.110.0/24\nAllowedIPS = 10.131.111.0/24\nPersistentKeepalive = 25\n\nDNS info is not used yet, it's normal, I will enable it once my DNS server will be created (not in this blog post though).\nDistribute config\nEither give the configuration file we just created, or you can have multiple choices.\nQR Code\nStart by installing\napk add libqrencode-tools\n\nAnd run \nqrencode -t ansiutf8 < peers/name/philt3r-name.wg.conf\n\nBase64\nNote: I'm using base64 on Alpine, which comes from BusyBox, the CLI may be different depending on the operating system you're using.\nEncode the configuration file to a base64 string:\ncat philt3r-name.wg.conf | base64 -w 0\n\nAnd on the other device, decode the string and save to a file:\nbase64 -d > philt3r-name.wg.conf\n\nPut the base64 encoded string, and send a EOF (usually ctrl + d).\nRestart WireGuard\nIf you already have WireGuard running, simply run\nrc-service wg restart\n\nto restart the server with your new peer.\nStart WireGuard manually\nMake sure to open the port on your router in UDP mode! I spent a lot of time debugging to realize that my port was in TCP, double check!\nMake sure to be root before, don't use doas or sudo!\nwg-quick up wg0\n\nOn the peer, start the tunnel.\nOn the server, run\nwg\n\nto check the status of WireGuard. You should see the peer and some stats it is connected.\nIf you do not see info about the peer even if it is not connected, that means you did something wrong in the configuration!\nFrom your peer, you should be able to ping the WireGuard internal IP:\n10.131.111.1\n\n\niOS: Ping\nOSX / Linux: ping\n\nIf you can ping the ip, you're good!\nYou may not be able to go on the internet, or even make DNS requests, it's normal.\nWe are just testing if the tunnel works. You can stop the tunnel.\nStop WireGuard manually\nwg-quick down wg0\n\nScript to launch on server startup\nTo start WireGuard on startup, we will write an OpenRC script. It will be located in\n/etc/init.d/wg\n\nPut the following:\n#!/sbin/openrc-run\n#\n\ndescription=\"WireGuard\"\n\ndepend() {\n need localmount net sysctl\n after bootmisc\n}\n\nstart() {\n ebegin \"Starting WireGuard\"\n wg-quick up wg0\n eend $?\n}\n\nstop() {\n ebegin \"Stopping WireGuard\"\n wg-quick down wg0\n eend $?\n}\n\nstatus() {\n wg show wg0\n}\n\nGive it executable access\nchmod +x /etc/init.d/wg\n\nManual\n\nStart: rc-service wg start\nStop: rc-service wg stop\nRestart: rc-service wg restart\nStatus: rc-service wg status\n\nStartup\n\nAdd at startup: rc-update add wg\nRemove from startup: rc-update del wg\nShow services at startup: rc-status\n\nReboot and make sure everything works, you should see WireGuard logs when your server is starting.\nResources\nThese resources helped me when setting up my WireGuard server. Thanks!\n\nhttps://github.com/pirate/wireguard-docs\nhttps://blog.ruanbekker.com/blog/2020/01/11/setup-a-wireguard-vpn-server-on-linux/\nhttps://try.popho.be/wg.html\n\n","id":"https://blog.x4m3.rocks/wireguard-alpine/","title":"Setup WireGuard server on Alpine Linux"},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"body":"do you use zsh and ohmyzsh ?\ndo you run into an issue when you are about to edit a file with vim, and you use the Tab key to autocomplete the filename, but instead you get something like this:\n$ vim ~/filena<TAB>\n_arguments:448: _vim_files: function definition file not found\n\nannoying af, right ?\nhow to fix it\nhere's how to fix it: delete the zcompdump directory off your personal directory, and reload your zsh config file (or close and open a new shell).\nrm -rf ~/.zcompdump*; source ~/.zshrc;\n\nit took me at least 15 mins to find that .... hopefully i save some time for you .\nsources\nstackoverflow and github\n","id":"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/","title":"error on zsh when using vim and autocomplete"}},"docInfo":{"https://blog.x4m3.rocks/":{"body":0,"title":0},"https://blog.x4m3.rocks/2019-02-24-thinkpad-custom-boot-logo/boot-logo/":{"body":0,"title":0},"https://blog.x4m3.rocks/archivebox-setup/":{"body":89,"title":3},"https://blog.x4m3.rocks/archlinux-how-old-is-your-installation/":{"body":33,"title":3},"https://blog.x4m3.rocks/caddy-ca-acme-alpine/":{"body":812,"title":7},"https://blog.x4m3.rocks/coredns-alpine/":{"body":134,"title":4},"https://blog.x4m3.rocks/dd-status/":{"body":105,"title":2},"https://blog.x4m3.rocks/docker-epitech-moulinette/":{"body":113,"title":4},"https://blog.x4m3.rocks/docker-private-registry/":{"body":549,"title":4},"https://blog.x4m3.rocks/dynamic-motd-alpine/":{"body":293,"title":4},"https://blog.x4m3.rocks/link-your-vimrc-file-on-windows/":{"body":130,"title":4},"https://blog.x4m3.rocks/linux-kernel-contributions/":{"body":62,"title":3},"https://blog.x4m3.rocks/openbsd-setup/":{"body":126,"title":4},"https://blog.x4m3.rocks/restart-chrome-url/":{"body":50,"title":3},"https://blog.x4m3.rocks/service-internal-infra-alpine/":{"body":334,"title":6},"https://blog.x4m3.rocks/thinkpad-custom-boot-logo/":{"body":260,"title":5},"https://blog.x4m3.rocks/wireguard-alpine/":{"body":759,"title":5},"https://blog.x4m3.rocks/zsh-vim-autocomplete-error/":{"body":57,"title":5}},"length":18},"lang":"English"}
\ No newline at end of file
diff --git a/service-internal-infra-alpine/index.html b/service-internal-infra-alpine/index.html
new file mode 100644
index 0000000..a79da46
--- /dev/null
+++ b/service-internal-infra-alpine/index.html
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+ Setup a service on our internal infrastructure on Alpine Linux · deadbaed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
if you don't have geteltorito, look online to install it.
+
flash the image on your usb drive
+
now it's time to flash the image on your usb drive. get the name of your flash drive using lsblk, plug your usb drive, and run lsblk again to see your drive.
+
go into the folder where the img file is located, and run in a terminal:
you can see the requirements, go in your usb drive, open the readme.txt in the flash folder.
+
put the gif image in the flash folder, and name it LOGO1.JPG. copy that image, and name that one LOGO2.JPG.
+
check the readme.txt file to see the filenames, they might differ on different models.
+
flash the BIOS update
+
reboot your computer, and boot on the usb flash drive. if you don't know how, the internet should help you with that.
+
now that the flash utility has booted, choose the second option, and follow the instructions.
+
the computer will reboot, flash the update, and when it will reboot, you should get your custom boot logo!
+
+
if you want to go back to the default logo, simply reflash the bios update, when when asked if you want to use your custom logo, say no, and the default logo will be put back.
do you run into an issue when you are about to edit a file with vim, and you use the Tab key to autocomplete the filename, but instead you get something like this:
+
$ vim ~/filena<TAB>
+_arguments:448: _vim_files: function definition file not found
+
+
annoying af, right ?
+
how to fix it
+
here's how to fix it: delete the zcompdump directory off your personal directory, and reload your zsh config file (or close and open a new shell).
+
rm -rf ~/.zcompdump*; source ~/.zshrc;
+
+
it took me at least 15 mins to find that .... hopefully i save some time for you .