aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--404.html24
-rw-r--r--Gemfile3
-rw-r--r--Gemfile.lock3
-rw-r--r--TODOs.org3
-rw-r--r--_config.yml15
-rw-r--r--_includes/feed.atom97
-rw-r--r--_layouts/default.html2
-rw-r--r--_posts/2018-08-01-verifying-npm-ci-reproducibility.md3
-rw-r--r--_posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md2
-rw-r--r--_posts/2019-06-02-stateless-os.md2
-rw-r--r--feed.en.atom3
-rw-r--r--feed.pt.atom3
-rw-r--r--gemset.nix11
-rw-r--r--pastebins.md2
-rwxr-xr-xscripts/assert-content.sh85
-rw-r--r--site.json26
-rw-r--r--sitemap.xml29
17 files changed, 183 insertions, 130 deletions
diff --git a/404.html b/404.html
deleted file mode 100644
index 1edf1a0..0000000
--- a/404.html
+++ /dev/null
@@ -1,24 +0,0 @@
----
-layout: default
----
-
-<style type="text/css" media="screen">
- .container {
- margin: 10px auto;
- max-width: 600px;
- text-align: center;
- }
- h1 {
- margin: 30px 0;
- font-size: 4em;
- line-height: 1;
- letter-spacing: -1px;
- }
-</style>
-
-<div class="container">
- <h1>404</h1>
-
- <p><strong>Page not found</strong></p>
- <p><strong>Página não encontrada</strong></p>
-</div>
diff --git a/Gemfile b/Gemfile
index 5b81e13..3ed43f3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,6 +3,5 @@ source "https://rubygems.org"
gem "jekyll"
group :jekyll_plugins do
- gem "jekyll-feed"
- gem "jekyll-seo-tag"
+ gem "jekyll-seo-tag" # FIXME
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 3516df2..65a43b5 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -27,8 +27,6 @@ GEM
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
- jekyll-feed (0.13.0)
- jekyll (>= 3.7, < 5.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.6.1)
@@ -60,7 +58,6 @@ PLATFORMS
DEPENDENCIES
jekyll
- jekyll-feed
jekyll-seo-tag
BUNDLED WITH
diff --git a/TODOs.org b/TODOs.org
index 3b94187..8bcfd2c 100644
--- a/TODOs.org
+++ b/TODOs.org
@@ -1,6 +1,5 @@
* Tasks
** Spelling
-** i18n Feed title
** config.yml
** kramdown -> commonmark
** https://github.com/planetjekyll/awesome-jekyll-plugins/
@@ -9,3 +8,5 @@ use subfolders?
** Fix date formatting
** add sitemap
https://www.sylvaindurand.org/making-jekyll-multilingual/
+** Indent XML and HTML
+** Drafts in feed
diff --git a/_config.yml b/_config.yml
index 2462bfd..382eec0 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,17 +1,14 @@
---
-title: Your awesome title
-email: your-email@example.com
-description: >-
- Write an awesome description for your new site here. You can edit this
- line in _config.yml. It will appear in your document head meta (for
- Google search results) and in your feed.xml site description.
-baseurl: ""
-url: "url.com"
+title: EuAndreh::blog
+url: "https://euandre.org"
+author:
+ name: EuAndreh
+ email: eu@euandre.org
markdown: kramdown
plugins:
- - jekyll-feed
- jekyll-seo-tag
+# FIXME: remove plugins
exclude:
- Gemfile
diff --git a/_includes/feed.atom b/_includes/feed.atom
index 4d4fd16..f4243ea 100644
--- a/_includes/feed.atom
+++ b/_includes/feed.atom
@@ -1,96 +1,35 @@
-<?xml version="1.0" encoding="utf-8"?>
-{% if page.xsl %}
- <?xml-stylesheet type="text/xml" href="{{ '/feed.xslt.xml' | absolute_url }}"?>
-{% endif %}
-<feed xmlns="http://www.w3.org/2005/Atom" {% if site.lang %}xml:lang="{{ site.lang }}"{% endif %}>
- <generator uri="https://jekyllrb.com/" version="{{ jekyll.version }}">Jekyll</generator>
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{{ include.lang }}">
<link href="{{ page.url | absolute_url }}" rel="self" type="application/atom+xml" />
- <link href="{{ '/' | absolute_url }}" rel="alternate" type="text/html" {% if site.lang %}hreflang="{{ site.lang }}" {% endif %}/>
+ <link href="{{ '/' | absolute_url }}" rel="alternate" type="text/html" hreflang="{{ include.lang }}" />
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ page.url | absolute_url | xml_escape }}</id>
- {% assign title = site.title | default: site.name %}
- {% if page.collection != "posts" %}
- {% assign collection = page.collection | capitalize %}
- {% assign title = title | append: " | " | append: collection %}
- {% endif %}
- {% if page.category %}
- {% assign category = page.category | capitalize %}
- {% assign title = title | append: " | " | append: category %}
- {% endif %}
+ <title type="html">{{ site.title | smartify | xml_escape }}</title>
+ <subtitle>{{ site.t.feed_title[include.lang] | smartify | xml_escape }}</subtitle>
- {% if title %}
- <title type="html">{{ title | smartify | xml_escape }}</title>
- {% endif %}
+ <author>
+ <name>{{ site.author.name | xml_escape }}</name>
+ <email>{{ site.author.email | xml_escape }}</email>
+ </author>
- {% if site.description %}
- <subtitle>{{ site.description | xml_escape }}</subtitle>
- {% endif %}
-
- {% if site.author %}
- <author>
- <name>{{ site.author.name | default: site.author | xml_escape }}</name>
- {% if site.author.email %}
- <email>{{ site.author.email | xml_escape }}</email>
- {% endif %}
- {% if site.author.uri %}
- <uri>{{ site.author.uri | xml_escape }}</uri>
- {% endif %}
- </author>
- {% endif %}
-
- {% assign posts = site[page.collection] | where_exp: "post", "post.draft != true" | sort: "date" | reverse %}
- {% if page.category %}
- {% assign posts = posts | where: "category",page.category %}
- {% endif %}
- {% for post in posts limit: 10 %}
- <entry{% if post.lang %}{{" "}}xml:lang="{{ post.lang }}"{% endif %}>
+ {% assign posts = site.posts | where:"lang", include.lang | sort: "date" | reverse %}
+ {% for post in posts %}
+ <entry xml:lang="{{ post.lang }}">
<title type="html">{{ post.title | smartify | strip_html | normalize_whitespace | xml_escape }}</title>
<link href="{{ post.url | absolute_url }}" rel="alternate" type="text/html" title="{{ post.title | xml_escape }}" />
<published>{{ post.date | date_to_xmlschema }}</published>
- <updated>{{ post.last_modified_at | default: post.date | date_to_xmlschema }}</updated>
- <id>{{ post.id | absolute_url | xml_escape }}</id>
- {% assign excerpt_only = post.feed.excerpt_only | default: site.feed.excerpt_only %}
- {% unless excerpt_only %}
- <content type="html" xml:base="{{ post.url | absolute_url | xml_escape }}">{{ post.content | strip | xml_escape }}</content>
- {% endunless %}
+ <updated>{{ post.updated_at | default: post.date | date_to_xmlschema }}</updated>
+ <id>{{ post.url | absolute_url | xml_escape }}</id>
- {% assign post_author = post.author | default: post.authors[0] | default: site.author %}
- {% assign post_author = site.data.authors[post_author] | default: post_author %}
- {% assign post_author_email = post_author.email | default: nil %}
- {% assign post_author_uri = post_author.uri | default: nil %}
- {% assign post_author_name = post_author.name | default: post_author %}
+ <content type="html" xml:base="{{ post.url | absolute_url | xml_escape }}">{{ post.content | strip | xml_escape }}</content>
<author>
- <name>{{ post_author_name | default: "" | xml_escape }}</name>
- {% if post_author_email %}
- <email>{{ post_author_email | xml_escape }}</email>
- {% endif %}
- {% if post_author_uri %}
- <uri>{{ post_author_uri | xml_escape }}</uri>
- {% endif %}
+ <name>{{ site.author.name | xml_escape }}</name>
+ <email>{{ site.author.email | xml_escape }}</email>
</author>
- {% if post.category %}
- <category term="{{ post.category | xml_escape }}" />
- {% endif %}
-
- {% for tag in post.tags %}
- <category term="{{ tag | xml_escape }}" />
- {% endfor %}
-
- {% if post.excerpt and post.excerpt != empty %}
- <summary type="html">{{ post.excerpt | strip_html | normalize_whitespace | xml_escape }}</summary>
- {% endif %}
-
- {% assign post_image = post.image.path | default: post.image %}
- {% if post_image %}
- {% unless post_image contains "://" %}
- {% assign post_image = post_image | absolute_url %}
- {% endunless %}
- <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="{{ post_image | xml_escape }}" />
- <media:content medium="image" url="{{ post_image | xml_escape }}" xmlns:media="http://search.yahoo.com/mrss/" />
- {% endif %}
+ <summary type="html">{{ post.excerpt | strip_html | normalize_whitespace | xml_escape }}</summary>
</entry>
{% endfor %}
</feed>
diff --git a/_layouts/default.html b/_layouts/default.html
index 53b9830..bd253c8 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/styles.css">
<link rel="alternate" type="application/atom+xml" href="{{ site.t.feed_url[page.lang] }}" title="{{ site.t.feed_title[page.lang] }}" />
- {%- seo -%}
+ <!-- {%- seo -%} -->
</head>
<body>
<header>
diff --git a/_posts/2018-08-01-verifying-npm-ci-reproducibility.md b/_posts/2018-08-01-verifying-npm-ci-reproducibility.md
index efb5fea..dcfdd75 100644
--- a/_posts/2018-08-01-verifying-npm-ci-reproducibility.md
+++ b/_posts/2018-08-01-verifying-npm-ci-reproducibility.md
@@ -2,6 +2,9 @@
title: Verifying "npm ci" reproducibility
date: 2018-08-01
layout: post
+lang: en
+ref: veryfing-npm-ci-reproducibility
+updated_at: 2019-05-22
---
When
[npm\@5](https://blog.npmjs.org/post/161081169345/v500) came bringing
diff --git a/_posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md b/_posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md
index 21b6686..b58aee9 100644
--- a/_posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md
+++ b/_posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md
@@ -2,6 +2,8 @@
title: Using "youtube-dl" to manage YouTube subscriptions
date: 2018-12-21
layout: post
+lang: en
+ref: using-youtube-dl-to-manage-youtube-subscriptions
---
I\'ve recently read the
[announcement](https://www.reddit.com/r/DataHoarder/comments/9sg8q5/i_built_a_selfhosted_youtube_subscription_manager/)
diff --git a/_posts/2019-06-02-stateless-os.md b/_posts/2019-06-02-stateless-os.md
index 64e74f7..486a0c2 100644
--- a/_posts/2019-06-02-stateless-os.md
+++ b/_posts/2019-06-02-stateless-os.md
@@ -2,6 +2,8 @@
title: Using NixOS as an stateless workstation
date: 2019-06-02
layout: post
+lang: en
+ref: stateless-os
---
Last week[^1] I changed back to an old[^2] Samsung laptop, and installed
[NixOS](https://nixos.org/) on it.
diff --git a/feed.en.atom b/feed.en.atom
new file mode 100644
index 0000000..643f557
--- /dev/null
+++ b/feed.en.atom
@@ -0,0 +1,3 @@
+---
+---
+{% include feed.atom lang="en" %} \ No newline at end of file
diff --git a/feed.pt.atom b/feed.pt.atom
new file mode 100644
index 0000000..39a9248
--- /dev/null
+++ b/feed.pt.atom
@@ -0,0 +1,3 @@
+---
+---
+{% include feed.atom lang="pt" %}
diff --git a/gemset.nix b/gemset.nix
index 23e26a2..4c38b33 100644
--- a/gemset.nix
+++ b/gemset.nix
@@ -103,17 +103,6 @@
};
version = "3.8.5";
};
- jekyll-feed = {
- dependencies = ["jekyll"];
- groups = ["default"];
- platforms = [];
- source = {
- remotes = ["https://rubygems.org"];
- sha256 = "1lx8nvkhd8l1wm3b6s506rycwbmpbzbsbjl65p21asjz6vbwf1ir";
- type = "gem";
- };
- version = "0.13.0";
- };
jekyll-sass-converter = {
dependencies = ["sass"];
groups = ["default"];
diff --git a/pastebins.md b/pastebins.md
index e2d95c6..24083f9 100644
--- a/pastebins.md
+++ b/pastebins.md
@@ -1,3 +1,5 @@
---
layout: pastebins-listing
+lang: en
+ref: pastebins
---
diff --git a/scripts/assert-content.sh b/scripts/assert-content.sh
new file mode 100755
index 0000000..a55e9b0
--- /dev/null
+++ b/scripts/assert-content.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+set -Eeuo pipefail
+
+JSON="${1:-}"
+[[ -z "${JSON}" ]] && {
+ echo 'Missing input JSON file.'
+ exit 2
+}
+
+contains-element() {
+ local e match="$1"
+ shift
+ for e; do [[ "$e" == "$match" ]] && return 0; done
+ return 1
+}
+
+fail-attr() {
+ ATTRIBUTE="${1}"
+ URL="${2}"
+ red "Undefined '${ATTRIBUTE}' for ${URL}." >&2
+ exit 1
+}
+
+LANGS=(en pt)
+assert-frontmatter() {
+ F="${1}"
+ LANG="$(echo "$F" | base64 --decode | jq -r .lang)"
+ REF="$(echo "$F" | base64 --decode | jq -r .ref)"
+ URL="$(echo "$F" | base64 --decode | jq -r .url)"
+ [[ -z "${LANG}" ]] && fail-attr 'lang' "${URL}"
+ [[ -z "${REF}" ]] && fail-attr 'ref' "${URL}"
+ set +e
+ contains-element "${LANG}" "${LANGS[@]}"
+ [[ $? != 0 ]] && {
+ red "Invalid lang '${LANG}' in ${URL}." >&2
+ exit 1
+ }
+ set -e
+ :
+}
+
+echo Linting posts... >&2
+for post in $(jq -r '.posts[] | @base64' "${JSON}"); do
+ assert-frontmatter "${post}"
+done
+
+echo Linting pages... >&2
+IGNORED_PAGES=(/site.json /sitemap.xml)
+for page in $(jq -r '.pages[] | @base64' "${JSON}"); do
+ URL="$(echo "$page" | base64 --decode | jq -r .url)"
+ set +e
+ contains-element "${URL}" "${IGNORED_PAGES[@]}"
+ if [[ $? != 0 ]]; then
+ set -e
+ assert-frontmatter "${page}"
+ fi
+ set -e
+done
+
+echo Asserting unique refs... >&2
+KNOWN_IDS=()
+for page in $(jq -r '.pages[] | @base64' "${JSON}"); do
+ URL="$(echo "$page" | base64 --decode | jq -r .url)"
+ set +e
+ contains-element "${URL}" "${IGNORED_PAGES[@]}"
+ if [[ $? != 0 ]]; then
+ set -e
+ LANG="$(echo "$page" | base64 --decode | jq -r .lang)"
+ REF="$(echo "$page" | base64 --decode | jq -r .ref)"
+ ID="${LANG}:${REF}"
+
+ set +e
+ contains-element "${ID}" "${KNOWN_IDS[@]}"
+ [[ $? == 0 ]] && {
+ red "Duplicated lang:ref match: '${ID}'." >&2
+ exit 1
+ }
+ set -e
+
+ KNOWN_IDS+=("${ID}") # printf '%s\n' "${KNOWN_IDS[@]}"
+ fi
+ set -e
+done
+
+echo Done. >&2
diff --git a/site.json b/site.json
new file mode 100644
index 0000000..0920bf8
--- /dev/null
+++ b/site.json
@@ -0,0 +1,26 @@
+---
+---
+{
+ "posts": [
+ {% for post in site.posts %}
+ {
+ "title": "{{ post.title | smartify }}",
+ "url": "{{ post.url }}",
+ "lang": "{{ post.lang }}",
+ "ref": "{{ post.ref }}",
+ "content": {{ post.content | strip_html | jsonify }}
+ }{% unless forloop.last %},{% endunless %}
+ {% endfor %}
+ ],
+ "pages": [
+ {% for page in site.pages %}
+ {
+ "title": "{{ page.title | smartify }}",
+ "url": "{{ page.url }}",
+ "lang": "{{ page.lang }}",
+ "ref": "{{ page.ref }}",
+ "content": {{ page.content | strip_html | jsonify }}
+ }{% unless forloop.last %},{% endunless %}
+ {% endfor %}
+ ]
+}
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..1c17a14
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,29 @@
+---
+---
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+ {% for post in site.posts %}
+ <url>
+ <loc>{{ site.url }}{{ post.url }}</loc>
+ {% assign versions=site.posts | where:"ref", post.ref %}
+ {% for version in versions %}
+ <xhtml:link rel="alternate" hreflang="{{ version.lang }}" href="{{ site.url }}{{ version.url }}" />
+ {% endfor %}
+ <lastmod>{{ post.date | date_to_xmlschema }}</lastmod>
+ <changefreq>weekly</changefreq>
+ </url>
+ {% endfor %}
+
+ {% for page in site.pages %}
+ <url>
+ <loc>{{ site.base }}{{ page.url }}</loc>
+ {% if page.ref != nil %}
+ {% assign versions=site.pages | where:"ref", page.ref %}
+ {% for version in versions %}
+ <xhtml:link rel="alternate" hreflang="{{ version.lang }}" href="{{ site.url }}{{ version.url }}" />
+ {% endfor %}
+ {% endif %}
+ <changefreq>weekly</changefreq>
+ </url>
+ {% endfor %}
+</urlset>