From 7130402cfecc196ce79c8f07a9dba71974f085e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= <ismael.bouya@normalesup.org>
Date: Sun, 7 Jun 2020 18:24:25 +0200
Subject: Add history page

---
 modules/private/websites/immae/history/.gitignore  |   3 +
 modules/private/websites/immae/history/Gemfile     |  31 +++
 .../private/websites/immae/history/Gemfile.lock    |  75 ++++++
 modules/private/websites/immae/history/LICENSE     |   9 +
 modules/private/websites/immae/history/_config.yml |  47 ++++
 .../websites/immae/history/_data/categories.yml    |  13 +
 .../websites/immae/history/_includes/footer.html   |   5 +
 .../websites/immae/history/_includes/head.html     |  18 ++
 .../websites/immae/history/_includes/header.html   |  36 +++
 .../websites/immae/history/_includes/post.html     |  26 ++
 .../websites/immae/history/_includes/scripts.html  |   3 +
 .../websites/immae/history/_layouts/default.html   |  47 ++++
 .../websites/immae/history/_layouts/post.html      |   7 +
 .../immae/history/_posts/2020-06-07-historique.md  |   8 +
 .../websites/immae/history/_sass/style.scss        | 127 +++++++++
 .../websites/immae/history/_sass/syntex.scss       |  38 +++
 .../websites/immae/history/_sass/variables.scss    |  16 ++
 .../websites/immae/history/assets/css/main.scss    |   6 +
 .../websites/immae/history/assets/js/script.js     |  17 ++
 modules/private/websites/immae/history/default.nix |  27 ++
 modules/private/websites/immae/history/gemset.nix  | 297 +++++++++++++++++++++
 modules/private/websites/immae/history/index.html  |  18 ++
 modules/private/websites/immae/production.nix      |   8 +
 .../websites/tools/tools/landing/config.yml        |   3 +
 24 files changed, 885 insertions(+)
 create mode 100644 modules/private/websites/immae/history/.gitignore
 create mode 100644 modules/private/websites/immae/history/Gemfile
 create mode 100644 modules/private/websites/immae/history/Gemfile.lock
 create mode 100644 modules/private/websites/immae/history/LICENSE
 create mode 100644 modules/private/websites/immae/history/_config.yml
 create mode 100644 modules/private/websites/immae/history/_data/categories.yml
 create mode 100644 modules/private/websites/immae/history/_includes/footer.html
 create mode 100644 modules/private/websites/immae/history/_includes/head.html
 create mode 100644 modules/private/websites/immae/history/_includes/header.html
 create mode 100644 modules/private/websites/immae/history/_includes/post.html
 create mode 100644 modules/private/websites/immae/history/_includes/scripts.html
 create mode 100644 modules/private/websites/immae/history/_layouts/default.html
 create mode 100644 modules/private/websites/immae/history/_layouts/post.html
 create mode 100644 modules/private/websites/immae/history/_posts/2020-06-07-historique.md
 create mode 100644 modules/private/websites/immae/history/_sass/style.scss
 create mode 100644 modules/private/websites/immae/history/_sass/syntex.scss
 create mode 100644 modules/private/websites/immae/history/_sass/variables.scss
 create mode 100644 modules/private/websites/immae/history/assets/css/main.scss
 create mode 100644 modules/private/websites/immae/history/assets/js/script.js
 create mode 100644 modules/private/websites/immae/history/default.nix
 create mode 100644 modules/private/websites/immae/history/gemset.nix
 create mode 100644 modules/private/websites/immae/history/index.html

(limited to 'modules')

diff --git a/modules/private/websites/immae/history/.gitignore b/modules/private/websites/immae/history/.gitignore
new file mode 100644
index 0000000..64af247
--- /dev/null
+++ b/modules/private/websites/immae/history/.gitignore
@@ -0,0 +1,3 @@
+_site
+.sass-cache
+.jekyll-metadata
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/Gemfile b/modules/private/websites/immae/history/Gemfile
new file mode 100644
index 0000000..35f655f
--- /dev/null
+++ b/modules/private/websites/immae/history/Gemfile
@@ -0,0 +1,31 @@
+source "https://rubygems.org"
+
+# Hello! This is where you manage which Jekyll version is used to run.
+# When you want to use a different version, change it below, save the
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
+#
+#     bundle exec jekyll serve
+#
+# This will help ensure the proper Jekyll version is running.
+# Happy Jekylling!
+gem "jekyll", "~> 3.8.5"
+
+# This is the default theme for new Jekyll sites. You may change this to anything you like.
+gem "minima", "~> 2.0"
+
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
+# gem "github-pages", group: :jekyll_plugins
+
+# If you have any plugins, put them here!
+group :jekyll_plugins do
+  gem "jekyll-feed", "~> 0.6"
+  gem 'jekyll-paginate-v2', '1.9.0'
+end
+
+# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
+gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+# Performance-booster for watching directories on Windows
+gem "wdm", "~> 0.1.0" if Gem.win_platform?
+
diff --git a/modules/private/websites/immae/history/Gemfile.lock b/modules/private/websites/immae/history/Gemfile.lock
new file mode 100644
index 0000000..9a3cb5e
--- /dev/null
+++ b/modules/private/websites/immae/history/Gemfile.lock
@@ -0,0 +1,75 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    colorator (1.1.0)
+    concurrent-ruby (1.1.6)
+    em-websocket (0.5.1)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0.6.0)
+    eventmachine (1.2.7)
+    ffi (1.13.0)
+    forwardable-extended (2.6.0)
+    http_parser.rb (0.6.0)
+    i18n (0.9.5)
+      concurrent-ruby (~> 1.0)
+    jekyll (3.8.7)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      em-websocket (~> 0.5)
+      i18n (~> 0.7)
+      jekyll-sass-converter (~> 1.0)
+      jekyll-watch (~> 2.0)
+      kramdown (~> 1.14)
+      liquid (~> 4.0)
+      mercenary (~> 0.3.3)
+      pathutil (~> 0.9)
+      rouge (>= 1.7, < 4)
+      safe_yaml (~> 1.0)
+    jekyll-feed (0.13.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-paginate-v2 (1.9.0)
+      jekyll (~> 3.0)
+    jekyll-sass-converter (1.5.2)
+      sass (~> 3.4)
+    jekyll-seo-tag (2.6.1)
+      jekyll (>= 3.3, < 5.0)
+    jekyll-watch (2.2.1)
+      listen (~> 3.0)
+    kramdown (1.17.0)
+    liquid (4.0.3)
+    listen (3.2.1)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    mercenary (0.3.6)
+    minima (2.5.1)
+      jekyll (>= 3.5, < 5.0)
+      jekyll-feed (~> 0.9)
+      jekyll-seo-tag (~> 2.1)
+    pathutil (0.16.2)
+      forwardable-extended (~> 2.6)
+    public_suffix (4.0.5)
+    rb-fsevent (0.10.4)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rouge (3.19.0)
+    safe_yaml (1.0.5)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jekyll (~> 3.8.5)
+  jekyll-feed (~> 0.6)
+  jekyll-paginate-v2 (= 1.9.0)
+  minima (~> 2.0)
+  tzinfo-data
+
+BUNDLED WITH
+   2.1.4
diff --git a/modules/private/websites/immae/history/LICENSE b/modules/private/websites/immae/history/LICENSE
new file mode 100644
index 0000000..0e87543
--- /dev/null
+++ b/modules/private/websites/immae/history/LICENSE
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2019 bansal.io
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_config.yml b/modules/private/websites/immae/history/_config.yml
new file mode 100644
index 0000000..56da0e4
--- /dev/null
+++ b/modules/private/websites/immae/history/_config.yml
@@ -0,0 +1,47 @@
+title: Historique d’ImmaeEu
+heading: Mises à jour
+logo: /logo.jpg
+website: https://www.immae.eu
+
+# the base hostname & protocol for your site, 
+# e.g. https://updates.changelog.site
+# Note Don't put trailing slash https://updates.changelog.site/
+url: "https://www.immae.eu"  # (required)
+
+baseurl: '/history' # optional
+
+rss-feed-icon: true #(optional)
+
+defaults:
+  -
+    scope:
+      path: "_posts"
+      type: "posts"
+    values:
+      layout: "post"
+  -
+    scope:
+      path: "assets"
+    values:
+      sitemap: false 
+
+permalink: /:title/
+markdown: kramdown
+highlighter: rouge
+sass:
+  sass_dir:         _sass
+  style:            compressed
+
+exclude: [ "Gemfile", "Gemfile.lock", "gemset.nix", "LICENSE", "default.nix", "shell.nix", "readme.md" ]
+
+plugins:
+  - jekyll-feed
+  - jekyll-paginate-v2
+
+pagination:
+  enabled: true
+  per_page: 20
+  title: ':title - page :num of :max'
+  limit: 0
+  sort_field: 'date'
+  sort_reverse: true
diff --git a/modules/private/websites/immae/history/_data/categories.yml b/modules/private/websites/immae/history/_data/categories.yml
new file mode 100644
index 0000000..fa7189b
--- /dev/null
+++ b/modules/private/websites/immae/history/_data/categories.yml
@@ -0,0 +1,13 @@
+# Available colors: blue, red, orange, green, purple
+- name: Nouveautés
+  color: green
+
+- name: Pannes
+  color: red
+
+- name: Informations
+  color: blue
+
+- name: Maintenance
+  color: purple
+
diff --git a/modules/private/websites/immae/history/_includes/footer.html b/modules/private/websites/immae/history/_includes/footer.html
new file mode 100644
index 0000000..a6adafb
--- /dev/null
+++ b/modules/private/websites/immae/history/_includes/footer.html
@@ -0,0 +1,5 @@
+<footer class="p-3 text-center mt-5">
+    <div class="w-25 border-top mb-3 mx-auto"></div>
+    <a href="https://changelog.site">Powered By ChangeLog.Site</a>
+</footer>
+{% include scripts.html %}
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_includes/head.html b/modules/private/websites/immae/history/_includes/head.html
new file mode 100644
index 0000000..cd9112e
--- /dev/null
+++ b/modules/private/websites/immae/history/_includes/head.html
@@ -0,0 +1,18 @@
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>{% if page.title %}{{ page.title }}{% else %}{{ site.name }}{% endif %}</title>
+    <link rel="icon" type="image/png" href="/favicon.png">
+    <!-- CSS -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+    <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/main.css" type="text/css">
+  
+    <!-- Font -->
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro">
+
+    <link rel="canonical" href="{{ page.url | replace:'index.html','' | absolute_url }}">
+    <link rel="alternate" type="application/rss+xml" title="{{ site.title | escape }}" href="{{ "/feed.xml" | relative_url }}">
+  
+  </head>
+
+  
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_includes/header.html b/modules/private/websites/immae/history/_includes/header.html
new file mode 100644
index 0000000..42eda83
--- /dev/null
+++ b/modules/private/websites/immae/history/_includes/header.html
@@ -0,0 +1,36 @@
+  <nav class="bg-light border-bottom px-5 py-3">
+
+    <div class="w-75 mx-auto">
+
+      <div class="row">
+        <div class="col-md-6">
+          <div class="d-flex align-items-center">
+            <a href="{{ site.website }}">
+              <img src="{{ site.logo }}" alt="{{ site.name }}" class="logo" alt="Logo">
+            </a>
+            <a href="{{ site.url }}">
+              <span class="text-muted mx-3">
+                Changes
+              </span>
+            </a>
+          </div>
+        </div>
+
+        <div class="col-md-6 ml-auto  d-flex align-items-center justify-content-end">
+          {% if site.rss-feed-icon %}
+          <a href="{{ site.baseurl }}/feed.xml"
+            class="inline-block  mt-3 mt-md-0 text-orange d-flex align-items-center">
+            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none"
+              stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"
+              class="feather feather-rss">
+              <path d="M4 11a9 9 0 0 1 9 9"></path>
+              <path d="M4 4a16 16 0 0 1 16 16"></path>
+              <circle cx="5" cy="19" r="1"></circle>
+            </svg>
+          </a>
+          {% endif %}
+        </div>
+      </div>
+
+    </div>
+  </nav>
diff --git a/modules/private/websites/immae/history/_includes/post.html b/modules/private/websites/immae/history/_includes/post.html
new file mode 100644
index 0000000..04f4a77
--- /dev/null
+++ b/modules/private/websites/immae/history/_includes/post.html
@@ -0,0 +1,26 @@
+<div class="row p-3">
+    <div class="col-md-3 mb-3">
+      <a href="{{ include.url | prepend: site.baseurl | replace: '//', '/' }}" class="post-date text-muted">
+        {{ include.date | date: '%F' }}
+      </a>
+    </div>
+    <div class="col-md-9">
+      <h2 class="title">
+        {{ include.title }}
+      </h2>
+      <div>
+        {% if include.category %}
+
+          {% for category in site.data.categories %}
+          {% if category.name == include.category %}
+          {% assign color = category.color | downcase | prepend: 'bg-' %}
+          {% endif %}
+          {% endfor %}
+          <span class="category {% if color %}{{ color }}{% endif %}">{{ include.category }}</span>
+        {% endif %}
+      </div>
+        <div class="post-content my-4 text-grey-darker leading-normal text-base font-thin">
+          {{ include.content }}
+        </div>
+    </div>
+  </div>
diff --git a/modules/private/websites/immae/history/_includes/scripts.html b/modules/private/websites/immae/history/_includes/scripts.html
new file mode 100644
index 0000000..b566db8
--- /dev/null
+++ b/modules/private/websites/immae/history/_includes/scripts.html
@@ -0,0 +1,3 @@
+<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+<script src="//unpkg.com/jscroll/dist/jquery.jscroll.min.js"></script>
+<script src="{{ site.baseurl }}/assets/js/script.js"></script>
diff --git a/modules/private/websites/immae/history/_layouts/default.html b/modules/private/websites/immae/history/_layouts/default.html
new file mode 100644
index 0000000..24c76ed
--- /dev/null
+++ b/modules/private/websites/immae/history/_layouts/default.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+{% include head.html %}
+
+<body>
+
+<div id="fb-root"></div>
+
+    {% include header.html %}
+    <div class="p-4">
+        <div class="row no-gutters">
+            <div class="col-md-7 offset-md-2">
+                    {% if page.name == 'index.html' %}
+                <div class="d-flex">
+                    <a href="javascript:void(0);" id="expand-list" class="text-muted ml-auto"><svg
+                            xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none"
+                            stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
+                            class="feather feather-list">
+                            <line x1="8" y1="6" x2="21" y2="6"></line>
+                            <line x1="8" y1="12" x2="21" y2="12"></line>
+                            <line x1="8" y1="18" x2="21" y2="18"></line>
+                            <line x1="3" y1="6" x2="3" y2="6"></line>
+                            <line x1="3" y1="12" x2="3" y2="12"></line>
+                            <line x1="3" y1="18" x2="3" y2="18"></line>
+                        </svg></a>
+                    <a href="javascript:void(0);" id="collapse-list" class="text-muted ml-3"><svg
+                            xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none"
+                            stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
+                            class="feather feather-server">
+                            <rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect>
+                            <rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect>
+                            <line x1="6" y1="6" x2="6" y2="6"></line>
+                            <line x1="6" y1="18" x2="6" y2="18"></line>
+                        </svg></a>
+                </div>
+                {% endif %}
+                <div class=" pt-5">
+                    {{ content }}
+                </div>
+            </div>
+        </div>
+    </div>
+
+    {% include footer.html %}
+</body>
+
+</html>
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_layouts/post.html b/modules/private/websites/immae/history/_layouts/post.html
new file mode 100644
index 0000000..664eaed
--- /dev/null
+++ b/modules/private/websites/immae/history/_layouts/post.html
@@ -0,0 +1,7 @@
+---
+layout: default
+---
+{% include post.html title=page.title category=page.category url=page.url date=page.date content=content %}
+
+<hr>
+
diff --git a/modules/private/websites/immae/history/_posts/2020-06-07-historique.md b/modules/private/websites/immae/history/_posts/2020-06-07-historique.md
new file mode 100644
index 0000000..7fc9abe
--- /dev/null
+++ b/modules/private/websites/immae/history/_posts/2020-06-07-historique.md
@@ -0,0 +1,8 @@
+---
+title: "Nouvelle page d’historique"
+category: Nouveautés
+date: 2020-06-07
+---
+ImmaeEu intègre dorénavant une page d’historique, pour lister l’ensemble
+des changements importants de l’infrastructure : pannes, nouveautés,
+maintenance, etc.
diff --git a/modules/private/websites/immae/history/_sass/style.scss b/modules/private/websites/immae/history/_sass/style.scss
new file mode 100644
index 0000000..cb2702a
--- /dev/null
+++ b/modules/private/websites/immae/history/_sass/style.scss
@@ -0,0 +1,127 @@
+body {
+    font-family: $primary-font;
+    font-size: 16px;
+    line-height: 1.8;
+    min-height: 100vh;
+    color: $text-color-primary;
+}
+
+.logo {
+    max-height: 45px;
+}
+
+footer a {
+    color: rgba(0, 0, 0, 0.4);
+    font-size: 0.8rem;
+}
+
+.category {
+    padding: 3px 10px;
+    background: $primary-color;
+    color: rgba(255, 255, 255, 0.9);
+    border-radius: 20px;
+    font-size: 12px;
+    line-height: 1.2;
+}
+
+@each $color,
+$value in $tag-colors {
+    .text-#{$color} {
+        color: $value;
+    }
+
+    .bg-#{$color} {
+        background-color: $value;
+    }
+}
+
+.title {
+    color: rgba(0, 0, 0, 0.9);
+    font-weight: 600;
+    font-size: 1.8rem;
+}
+
+.post-content {
+
+
+    h1,
+    h2,
+    h3,
+    h4,
+    h5,
+    h6 {
+        margin-top: 1.5rem;
+        margin-bottom: 0.8rem;
+    }
+
+    strong{
+        color: darken($text-color-primary, 50%);
+        font-weight: 600;
+    }
+
+    table {
+        border: 1px solid $border-color;
+        width: 100%;
+        margin-bottom: 1rem;
+        border-collapse: collapse;
+
+        th,
+        td {
+            border: 1px solid $border-color;
+            padding: .75rem;
+            vertical-align: top;
+            border-top: 1px solid $border-color;
+        }
+
+        thead {
+
+            th,
+            td {
+                border-bottom-width: 2px;
+                padding: .75rem;
+                vertical-align: top;
+                border-top: 1px solid $border-color;
+            }
+        }
+    }
+
+    // Blockquote
+
+    blockquote {
+        background: $bg-light;
+        font-style: italic;
+        border-left: 8px solid $border-color;
+        padding: 20px;
+        margin: 20px 0px;
+        box-sizing: border-box;
+    }
+
+    a {
+        color: $primary-color;
+        &:hover {
+            color: darken($primary-color, 15%);
+        }
+    }
+
+
+
+    p code,
+    li code {
+        font-size: .8rem;
+        line-height: 1.8571;
+        color: rgba(0, 0, 0, 1);
+        background-color: $bg-light;
+        border: 1px solid $border-color;
+        -webkit-border-radius: 4px;
+        -moz-border-radius: 4px;
+        border-radius: 4px;
+        margin: 0 2px;
+        padding: 0 5px;
+    }
+
+    img {
+        max-width: 100%;
+        height: auto;
+        margin: 10px 0px;
+    }
+}
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_sass/syntex.scss b/modules/private/websites/immae/history/_sass/syntex.scss
new file mode 100644
index 0000000..d09a98f
--- /dev/null
+++ b/modules/private/websites/immae/history/_sass/syntex.scss
@@ -0,0 +1,38 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #f8f8f8; padding: 0.5em 1em; border-radius: 4px; margin-bottom: 0em;}
+.highlight .c { color: #008000 } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #0000ff } /* Keyword */
+.highlight .ch { color: #008000 } /* Comment.Hashbang */
+.highlight .cm { color: #008000 } /* Comment.Multiline */
+.highlight .cp { color: #0000ff } /* Comment.Preproc */
+.highlight .cpf { color: #008000 } /* Comment.PreprocFile */
+.highlight .c1 { color: #008000 } /* Comment.Single */
+.highlight .cs { color: #008000 } /* Comment.Special */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gh { font-weight: bold } /* Generic.Heading */
+.highlight .gp { font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { font-weight: bold } /* Generic.Subheading */
+.highlight .kc { color: #0000ff } /* Keyword.Constant */
+.highlight .kd { color: #0000ff } /* Keyword.Declaration */
+.highlight .kn { color: #0000ff } /* Keyword.Namespace */
+.highlight .kp { color: #0000ff } /* Keyword.Pseudo */
+.highlight .kr { color: #0000ff } /* Keyword.Reserved */
+.highlight .kt { color: #2b91af } /* Keyword.Type */
+.highlight .s { color: #a31515 } /* Literal.String */
+.highlight .nc { color: #2b91af } /* Name.Class */
+.highlight .ow { color: #0000ff } /* Operator.Word */
+.highlight .sa { color: #a31515 } /* Literal.String.Affix */
+.highlight .sb { color: #a31515 } /* Literal.String.Backtick */
+.highlight .sc { color: #a31515 } /* Literal.String.Char */
+.highlight .dl { color: #a31515 } /* Literal.String.Delimiter */
+.highlight .sd { color: #a31515 } /* Literal.String.Doc */
+.highlight .s2 { color: #a31515 } /* Literal.String.Double */
+.highlight .se { color: #a31515 } /* Literal.String.Escape */
+.highlight .sh { color: #a31515 } /* Literal.String.Heredoc */
+.highlight .si { color: #a31515 } /* Literal.String.Interpol */
+.highlight .sx { color: #a31515 } /* Literal.String.Other */
+.highlight .sr { color: #a31515 } /* Literal.String.Regex */
+.highlight .s1 { color: #a31515 } /* Literal.String.Single */
+.highlight .ss { color: #a31515 } /* Literal.String.Symbol */
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/_sass/variables.scss b/modules/private/websites/immae/history/_sass/variables.scss
new file mode 100644
index 0000000..5719431
--- /dev/null
+++ b/modules/private/websites/immae/history/_sass/variables.scss
@@ -0,0 +1,16 @@
+$primary-font: 'Source Sans Pro', sans-serif;
+$primary-color: #0775F8;
+$text-color-primary: #48586b;
+$border-color: #dae1e7;
+$bg-light: #f1f5f8;
+$blue: #0775F8;
+$purple: #6D75F1;
+$green: #00CECE;
+$red: #F7444E;
+$orange: #F27013;
+
+$tag-colors: ("blue": $blue,
+    "purple": $purple,
+    "green": $green,
+    "red": $red,
+    "orange": $orange);
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/assets/css/main.scss b/modules/private/websites/immae/history/assets/css/main.scss
new file mode 100644
index 0000000..7df8776
--- /dev/null
+++ b/modules/private/websites/immae/history/assets/css/main.scss
@@ -0,0 +1,6 @@
+---
+sitemap: false
+---
+@import "variables";
+@import "syntex";
+@import "style";
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/assets/js/script.js b/modules/private/websites/immae/history/assets/js/script.js
new file mode 100644
index 0000000..65115d3
--- /dev/null
+++ b/modules/private/websites/immae/history/assets/js/script.js
@@ -0,0 +1,17 @@
+$(function() {
+    var options = {
+        padding: 0,
+        nextSelector: 'a.next-page:last',
+        contentSelector: '.post_list',
+        autoTrigger: false,
+        debug: true
+    };
+
+    $('.post_list').jscroll(options);
+    $(document).on('click', '#expand-list', function(){
+        $('.post-content').hide();
+    });
+    $(document).on('click', '#collapse-list', function(){
+        $('.post-content').show();
+    });
+});
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/default.nix b/modules/private/websites/immae/history/default.nix
new file mode 100644
index 0000000..2335627
--- /dev/null
+++ b/modules/private/websites/immae/history/default.nix
@@ -0,0 +1,27 @@
+{ lib, bundlerEnv, ruby, stdenv }:
+
+# rebuild with bundix -l
+let
+  jekyll = bundlerEnv rec {
+    name = pname + "-" + version;
+    pname = "jekyll";
+    version = (import ./gemset.nix).jekyll.version;
+
+    inherit ruby;
+    gemdir = ./.;
+  };
+in
+  stdenv.mkDerivation rec {
+    pname = "changelog";
+    version = "1";
+    src = ./.;
+    buildInputs = [ jekyll ];
+    phases = [ "unpackPhase" "buildPhase" "installPhase"];
+    buildPhase = ''
+      jekyll build
+    '';
+
+    installPhase = ''
+      cp -a _site $out
+    '';
+  }
diff --git a/modules/private/websites/immae/history/gemset.nix b/modules/private/websites/immae/history/gemset.nix
new file mode 100644
index 0000000..55bb74a
--- /dev/null
+++ b/modules/private/websites/immae/history/gemset.nix
@@ -0,0 +1,297 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  colorator = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "094387x4yasb797mv07cs3g6f08y56virc2rjcpb1k79rzaj3nhl";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
+      type = "gem";
+    };
+    version = "0.5.1";
+  };
+  eventmachine = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  ffi = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y9y4pkfbjvzp7fdvikz5nxccan8v1x0ppb18a5333v0z3pv3y86";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  forwardable-extended = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  "http_parser.rb" = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13gi6v6ib925v9r0w3a3dqvbhj9rrwbbpkr3slisfxwpwy6k0kyp";
+      type = "gem";
+    };
+    version = "3.8.7";
+  };
+  jekyll-feed = {
+    dependencies = ["jekyll"];
+    groups = ["jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lx8nvkhd8l1wm3b6s506rycwbmpbzbsbjl65p21asjz6vbwf1ir";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  jekyll-paginate-v2 = {
+    dependencies = ["jekyll"];
+    groups = ["jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hkl5vfgrz4p0j5dgji0rhnv081y4mrvsy2lnnzl0zv9rd5gqsn7";
+      type = "gem";
+    };
+    version = "1.9.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sass"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  jekyll-seo-tag = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p9fl2r4ni10lbx143zp41caldjs4hg27az5wg42sbwzb7s6z66m";
+      type = "gem";
+    };
+    version = "2.6.1";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  kramdown = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1c4jmrh5ig8iv1rw81s4mw4xsp4v97hvf8zkigv4hn5h542qjq";
+      type = "gem";
+    };
+    version = "1.17.0";
+  };
+  liquid = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w923wmdi3gyiky0asqdw5dnh3gcjs2xyn82ajvjfjwh6sn0clgi";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  mercenary = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  minima = {
+    dependencies = ["jekyll" "jekyll-feed" "jekyll-seo-tag"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gk7jmriiswda1ykjzpsw9cpiya4m9n0yrh0h6xnrc8zcfy543jj";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  public_suffix = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
+      type = "gem";
+    };
+    version = "4.0.5";
+  };
+  rb-fsevent = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
+      type = "gem";
+    };
+    version = "0.10.4";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rouge = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "102rc07d78k5bkl0s9nd1gw6wz0w0zcvg4g5sl7z9xxi4r793c35";
+      type = "gem";
+    };
+    version = "3.19.0";
+  };
+  safe_yaml = {
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default" "jekyll_plugins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+}
\ No newline at end of file
diff --git a/modules/private/websites/immae/history/index.html b/modules/private/websites/immae/history/index.html
new file mode 100644
index 0000000..e9226e4
--- /dev/null
+++ b/modules/private/websites/immae/history/index.html
@@ -0,0 +1,18 @@
+---
+layout: default
+permalink: /
+pagination:
+  permalink: /page/:num/
+  enabled: true
+  indexpage: 'index'
+---
+<div class="post_list">
+{% for post in paginator.posts %}
+    {% include post.html title=post.title category=post.category url=post.url date=post.date content=post.content %}
+    <hr>
+{% endfor %}
+
+  {% if paginator.next_page %}
+    <a href="{{ paginator.next_page_path | replace: 'index.html', '' | prepend: site.baseurl }}" class="d-block text-center p-3 text-muted next-page">Load More Updates</a>
+  {% endif %}
+</div>
\ No newline at end of file
diff --git a/modules/private/websites/immae/production.nix b/modules/private/websites/immae/production.nix
index dc89ae3..ae4abe0 100644
--- a/modules/private/websites/immae/production.nix
+++ b/modules/private/websites/immae/production.nix
@@ -5,6 +5,7 @@ let
   coursDir = "/var/lib/buildbot/outputs/cours";
   rechercheDir = "/var/lib/buildbot/outputs/recherche";
   recettesDir = "/var/lib/buildbot/outputs/recettes";
+  historyDir = pkgs.callPackage ./history {};
   env = config.myEnv.websites.immae;
 in {
   options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website";
@@ -65,6 +66,13 @@ in {
           AllowOverride All
           Require all granted
         </Directory>
+
+        Alias /history ${historyDir}
+        <Directory ${historyDir}>
+          DirectoryIndex index.html
+          AllowOverride None
+          Require all granted
+        </Directory>
         ''
       ];
     };
diff --git a/modules/private/websites/tools/tools/landing/config.yml b/modules/private/websites/tools/tools/landing/config.yml
index 81a99d5..f3de6fc 100644
--- a/modules/private/websites/tools/tools/landing/config.yml
+++ b/modules/private/websites/tools/tools/landing/config.yml
@@ -129,6 +129,9 @@ services:
       - name: "Page principale"
         icon: "fas fa-user"
         url: "https://www.immae.eu"
+      - name: "Historique infrastructure / Changelog"
+        icon: "fas fa-history"
+        url: "https://www.immae.eu/history"
       - name: "Atelier d’écriture"
         icon: "fas fa-pen"
         url: "https://www.immae.eu/atelier"
-- 
cgit v1.2.3