diff options
Diffstat (limited to '')
-rw-r--r-- | 404.html | 24 | ||||
-rw-r--r-- | Gemfile | 3 | ||||
-rw-r--r-- | Gemfile.lock | 3 | ||||
-rw-r--r-- | TODOs.org | 3 | ||||
-rw-r--r-- | _config.yml | 15 | ||||
-rw-r--r-- | _includes/feed.atom | 97 | ||||
-rw-r--r-- | _layouts/default.html | 2 | ||||
-rw-r--r-- | _posts/2018-08-01-verifying-npm-ci-reproducibility.md | 3 | ||||
-rw-r--r-- | _posts/2018-12-21-using-youtube-dl-to-manage-youtube-subscriptions.md | 2 | ||||
-rw-r--r-- | _posts/2019-06-02-stateless-os.md | 2 | ||||
-rw-r--r-- | feed.en.atom | 3 | ||||
-rw-r--r-- | feed.pt.atom | 3 | ||||
-rw-r--r-- | gemset.nix | 11 | ||||
-rw-r--r-- | pastebins.md | 2 | ||||
-rwxr-xr-x | scripts/assert-content.sh | 85 | ||||
-rw-r--r-- | site.json | 26 | ||||
-rw-r--r-- | sitemap.xml | 29 |
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> @@ -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 @@ -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" %} @@ -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> |