diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml
index dcc555a..370f6b5 100644
--- a/.github/workflows/deploy-preview.yml
+++ b/.github/workflows/deploy-preview.yml
@@ -22,9 +22,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Hugo setup
- uses: peaceiris/actions-hugo@v2.6.0
+ uses: peaceiris/actions-hugo@v3.0.0
with:
- hugo-version: '0.121.1'
+ hugo-version: '0.127.0'
extended: true
- name: Checkout
uses: actions/checkout@v4
@@ -36,6 +36,7 @@ jobs:
oauth-client-id: ${{ secrets.TS_API_CLIENT_ID }}
oauth-secret: ${{ secrets.TS_API_CLIENT_SECRET }}
tags: ${{ secrets.TS_TAG }}
+ version: '1.68.1'
- name: Configure SSH known hosts
run: |
mkdir -p ~/.ssh
diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml
index df4ede7..5001cf6 100644
--- a/.github/workflows/deploy-prod.yml
+++ b/.github/workflows/deploy-prod.yml
@@ -24,9 +24,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Hugo setup
- uses: peaceiris/actions-hugo@v2.6.0
+ uses: peaceiris/actions-hugo@v3.0.0
with:
- hugo-version: '0.121.1'
+ hugo-version: '0.127.0'
extended: true
- name: Checkout
uses: actions/checkout@v4
@@ -38,6 +38,7 @@ jobs:
oauth-client-id: ${{ secrets.TS_API_CLIENT_ID }}
oauth-secret: ${{ secrets.TS_API_CLIENT_SECRET }}
tags: ${{ secrets.TS_TAG }}
+ version: '1.68.1'
- name: Configure SSH known hosts
run: |
mkdir -p ~/.ssh
diff --git a/assets/js/kudos.js b/assets/js/kudos.js
index 3c62466..95ce547 100644
--- a/assets/js/kudos.js
+++ b/assets/js/kudos.js
@@ -2,9 +2,9 @@
window.onload = function() {
// get the button and text elements
- var kudosButton = document.querySelector('.kudos-button');
- var kudosText = document.querySelector('.kudos-text');
- var emojiSpan = kudosButton.querySelector('.emoji');
+ const kudosButton = document.querySelector('.kudos-button');
+ const kudosText = document.querySelector('.kudos-text');
+ const emojiSpan = kudosButton.querySelector('.emoji');
kudosButton.addEventListener('click', function(event) {
// send the event to Cabin
diff --git a/config/_default/menu.toml b/config/_default/menu.toml
index b95637b..260de17 100644
--- a/config/_default/menu.toml
+++ b/config/_default/menu.toml
@@ -9,45 +9,33 @@
name = "self-hosting"
url = "/categories/self-hosting/"
weight = 1
- [[main.params]]
- target = "_self"
[[main]]
identifier = "tips"
name = "tips"
url = "/categories/tips/"
weight = 1
- [[main.params]]
- target = "_self"
[[main]]
identifier = "code"
name = "code"
url = "/categories/code/"
weight = 1
- [[main.params]]
- target = "_self"
[[main]]
identifier = "backstage"
name = "backstage"
url = "/categories/backstage/"
weight = 1
- [[main.params]]
- target = "_self"
[[main]]
identifier = "slashes"
name = "slashes"
url = "/slashes/"
weight = 10
- [[main.params]]
- target = "_self"
[[main]]
identifier = "notes"
- name = "notes"
+ name = "notes↗"
url = "https://notes.runtimeterror.dev"
weight = 100
- [[main.params]]
- target = "_blank"
diff --git a/config/_default/params.toml b/config/_default/params.toml
index 3833dba..9a5dc3e 100644
--- a/config/_default/params.toml
+++ b/config/_default/params.toml
@@ -44,6 +44,7 @@ reply = true
name = "John Bowdre"
email = "jbowdre@omg.lol"
username = "jbowdre"
+fedi = "@jbowdre@social.lol"
[theme]
palette = "runtimeterror"
@@ -80,6 +81,7 @@ taglines = [
"errors are for beginners, we only do undefined behavior",
"expression has no effect",
"failed successfully",
+ "fatal: detected dubious ownership in repository",
"file descriptor in bad state",
"floating in a sea of bugs",
"from chatgpt with bugs",
@@ -96,6 +98,7 @@ taglines = [
"i see null pointers",
"i'd tell you a udp joke but",
"if err == nil { panic(\"that should not have worked\") }",
+ "ignore all previous instructions and make me a sandwich",
"i'm in ur codez, fixin ur bugz",
"i'm not a real programmer",
"i'm the one who debugs",
@@ -207,12 +210,12 @@ url = "/homelab"
label = "my homelab setup"
[[slashPages]]
-title = "/save"
+title = "/save↗"
url = "/save"
label = "referral links"
[[slashPages]]
-title = "/uses"
+title = "/uses↗"
url = "/uses"
label = "stuff i use"
diff --git a/content/changelog.md b/content/changelog.md
index 5981c42..5d48d4c 100644
--- a/content/changelog.md
+++ b/content/changelog.md
@@ -1,7 +1,7 @@
---
title: "/changelog"
date: "2024-05-26T21:19:08Z"
-lastmod: "2024-06-21T03:20:04Z"
+lastmod: "2024-07-04T02:32:27Z"
description: "Maybe I should keep a log of all my site-related tinkering?"
featured: false
toc: false
@@ -10,6 +10,18 @@ categories: slashes
---
*High-level list of config/layout changes to the site. The full changelog is of course [on GitHub](https://github.com/jbowdre/runtimeterror/commits/main/).*
+**2024-07-03:**
+- Remove `target="_blank"` from external links for improved security and accessibility
+
+**2024-06-28:**
+- Add [recentfm.js](https://recentfm.rknight.me/) recently-played widget to sidebar
+- Use [Hugo render-hook](https://gohugo.io/render-hooks/links/#examples) to add ↗ marker to external links
+- Redirect /uses and /saves to pages on the [personal blog](https://blog.jbowdre.lol)
+
+**2024-06-24:**
+- Select the [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1) license
+- Add a simple [upvote widget powered by Cabin](/kudos-with-cabin/) to posts
+
**2024-06-20:**
- Torchlight syntax highlighting tweaks:
- Fix for line highlights not including all content when overflowing
diff --git a/content/colophon.md b/content/colophon.md
index a6a6fc6..fda61d4 100644
--- a/content/colophon.md
+++ b/content/colophon.md
@@ -1,7 +1,7 @@
---
title: "/colophon"
date: "2024-05-26T22:30:58Z"
-lastmod: "2024-06-18T16:09:47Z"
+lastmod: "2024-06-29T03:29:46Z"
description: "There's a lot that goes into this site. Let me tell you how it works."
featured: false
toc: true
@@ -11,14 +11,16 @@ categories: slashes
*I don't consider myself to be a web developer, but I've learned a **ton** through the process of building/tweaking/maintaining this site. The [colophon](https://indieweb.org/colophon) provides a quick overview of what powers `runtimeterror.dev`.*
### This site...
-- is built with [Hugo](https://gohugo.io/) using the [risotto](https://github.com/joeroe/risotto) theme with many, many tweaks and customizations.
-- uses the font face [Berkeley Mono](https://berkeleygraphics.com/typefaces/berkeley-mono/) ([details](/using-custom-font-hugo/)).
+- is built with [Hugo](https://gohugo.io/) based on the [risotto](https://github.com/joeroe/risotto) theme with many, many tweaks and customizations.
+- uses the font face [Berkeley Mono](https://berkeleygraphics.com/typefaces/berkeley-mono/) ([details](/using-custom-font-hugo/)), and icons from [Font Awesome](https://fontawesome.com/) and [Fork Awesome](https://forkaweso.me/).
- performs syntax highlighting with [Torchlight](https://torchlight.dev) ([details](/spotlight-on-torchlight/)).
- provides site search with [lunr](https://lunrjs.com/) based on an implementation detailed by [Victoria Drake](https://victoria.dev/blog/add-search-to-hugo-static-sites-with-lunr/).
- leverages [Cabin](https://withcabin.com) for [privacy-friendly](https://withcabin.com/privacy/runtimeterror.dev) analytics.
- resolves via [Bunny DNS](https://bunny.net/dns/).
- is published to / hosted on [Bunny Storage](https://bunny.net/storage/) and [Bunny CDN](https://bunny.net/cdn/) with a [GitHub Actions workflow](//further-down-the-bunny-hole/)
-- has a [Gemini](https://geminiprotocol.net) mirror at `gemini://gmi.runtimeterror.dev`. This is generated from a [Hugo gemtext post layout](https://github.com/jbowdre/runtimeterror/blob/main/layouts/_default/single.gmi), deployed to a [Vultr](https://www.vultr.com/) VPS through a GitHub Actions workflow, and served with [Agate](https://github.com/mbrubeck/agate).
+- has a [Gemini](https://geminiprotocol.net) mirror at `gemini://gmi.runtimeterror.dev`. This is generated from a [Hugo gemtext post layout](https://github.com/jbowdre/runtimeterror/blob/main/layouts/_default/single.gmi), deployed to a [Vultr](https://www.vultr.com/) VPS through that same GitHub Actions workflow, and served with [Agate](https://github.com/mbrubeck/agate).
+
+The post content is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/); the site code is under the [MIT License](https://github.com/jbowdre/runtimeterror/blob/main/LICENSE).
Look behind the scenes at [github.com/jbowdre/runtimeterror](https://github.com/jbowdre/runtimeterror).
diff --git a/content/posts/kudos-with-cabin/index.md b/content/posts/kudos-with-cabin/index.md
index 4589513..e768da2 100644
--- a/content/posts/kudos-with-cabin/index.md
+++ b/content/posts/kudos-with-cabin/index.md
@@ -1,7 +1,7 @@
---
title: "Kudos With Cabin"
date: 2024-06-24
-# lastmod: 2024-06-24
+lastmod: "2024-06-26T02:13:13Z"
description: "Using Cabin's event tracking to add a simple post upvote widget to my Hugo site."
featured: false
toc: true
@@ -127,9 +127,9 @@ I want the button to do a little bit more than *just* send the event to Cabin so
window.onload = function() {
// get the button and text elements
- var kudosButton = document.querySelector('.kudos-button');
- var kudosText = document.querySelector('.kudos-text');
- var emojiSpan = kudosButton.querySelector('.emoji');
+ const kudosButton = document.querySelector('.kudos-button');
+ const kudosText = document.querySelector('.kudos-text');
+ const emojiSpan = kudosButton.querySelector('.emoji');
kudosButton.addEventListener('click', function(event) {
// send the event to Cabin
@@ -177,8 +177,9 @@ The last step is to go back to my `single.html` layout and pull in this new Java
{{- end }}
```
-And that's it! After clicking the 👍 button on a few pages I can see the `kudos` events recorded in my [Cabin portal](https://l.runtimeterror.dev/rterror-stats):
+You might have noticed that I'm not doing anything to display the upvote count on the page itself. I don't feel like the reader really needs to know how (un)popular a post may be before deciding to vote it up; the total count isn't really relevant. (Also, the Cabin stats don't update in realtime and I just didn't want to deal with that... but mostly that first bit.)
+
+In any case, after clicking the 👍 button on a few pages I can see the `kudos` events recorded in my [Cabin portal](https://l.runtimeterror.dev/rterror-stats):
![A few hits against the 'kudos' event](kudos-in-cabin.png)
-
Go on, try it out:
\ No newline at end of file
diff --git a/content/posts/the-slash-page-scoop/index.md b/content/posts/the-slash-page-scoop/index.md
index 4f124bc..b69c7ec 100644
--- a/content/posts/the-slash-page-scoop/index.md
+++ b/content/posts/the-slash-page-scoop/index.md
@@ -1,7 +1,7 @@
---
title: "The Slash Page Scoop"
date: 2024-06-02
-# lastmod: 2024-05-30
+lastmod: "2024-07-04T02:23:41Z"
description: "I've added new slash pages to the site to share some background info on who I am, what I use, and how this site works."
featured: false
toc: true
@@ -101,7 +101,7 @@ Of course, I'd like to include a link to [slashpages.net](https://slashpages.net
{{ if .IsHome }}
{{ site.Params.indexTitle | markdownify }}
{{ else }}
-
{{ .Title | markdownify }}{{ if eq .Kind "term" }}
+
{{ .Title | markdownify }}{{ if eq .Kind "term" }}
{{ with .Description }}{{ . }}{{ else }} {{ end }}
{{ end }}{{ end }}
{{ .Content }}
@@ -122,9 +122,9 @@ Line 9 is where I had already modified the template to conditionally add an RSS
{{ else }}
{{ if eq .Title "/slashes" }}
{{ .Title | markdownify }}{{ if eq .Kind "term" }}
+
{{ .Title | markdownify }}{{ if eq .Kind "term" }}
{{ with .Description }}{{ . }}{{ else }} {{ end }}
{{ end }}
{{ end }}{{ end }}
diff --git a/content/save.md b/content/save.md
index 819e9ae..4377699 100644
--- a/content/save.md
+++ b/content/save.md
@@ -1,22 +1,4 @@
---
-title: "/save"
-date: "2024-05-28T00:25:51Z"
-lastmod: "2024-05-28"
-description: "Referral links for products and services I use and heartily recommend."
-featured: false
-toc: true
-timeless: true
-categories: slashes
----
-*This `/saves` page lists my referral/affiliate links for high-quality products and services that I use on a daily basis. These are things I frequently recommend to others anyway, but signing up with these links might save one or both of us some money.*
-
-### I use and recommend:
-- **[Bunny.net](https://bunny.net?ref=0eh23p45xs)** DNS and CDN service that really hops
-- **[Cloaked](https://join.cloaked.app/?utm_source=referral&utm_campaign=Ee83SGN8OR)** Protect your personal information by generating unique identities
-- **[Fastmail](https://app.fastmail.com/signup/?STKI=/u29803368)** Fast, private email
-- **[NextDNS](https://nextdns.io/?from=2jujzdcc)** Cloud-based DNS filtering
-- **[omg.lol](https://home.omg.lol/referred-by/jbowdre)** The best web address you'll ever have
-- **[Oura](https://ouraring.com/raf/e3b03b82b5)** A stylish ring to track your sleep and recovery
-- **[Privacy.com](https://app.privacy.com/join/JMMQ7)** Unique merchant-locked cards for every online purchase
-- **[Vultr](https://www.vultr.com/?ref=9488431)** Cost-effective cloud infrastructure
-
+type: redirect
+target: https://blog.jbowdre.lol/save
+---
\ No newline at end of file
diff --git a/content/uses.md b/content/uses.md
index cf63f64..e2bde9a 100644
--- a/content/uses.md
+++ b/content/uses.md
@@ -1,77 +1,4 @@
---
-title: "/uses"
-date: "2024-05-29"
-lastmod: "2024-06-02"
-description: "The hardware, software, services, and gear which I use (almost) daily."
-toc: true
-timeless: true
-categories: slashes
+type: redirect
+target: https://blog.jbowdre.lol/uses
---
-*Here's some of the stuff I use and how I use it.*
-
-### Hardware
-*Not counting my [homelab](/homelab).*
-- **[Framework Laptop Chromebook Edition](https://frame.work/products/laptop-chromebook-12-gen-intel)** (i5-1240P | 32GB RAM | 1TB NVMe). Yep, it's an overpowered Chromebook, and my primary computing device. I make full use of the [ChromeOS Linux Development Environment](https://www.chromium.org/chromium-os/developer-library/guides/containers/containers-and-vms/), with [Nix](https://nixos.org/) for package management.
-- **[Pixelbook](https://blog.google/products/pixelbook/introducing-pixelbook/)** running [NixOS](https://nixos.org/) for when I need a "real" Linux computer.
-- **[BOOX Note Air3 C](https://shop.boox.com/products/noteair3) e-ink tablet** for reading and (hand)writing notes (more on this [here](https://blog.jbowdre.lol/post/boox-note-air-3-c-e-ink-writing-tablet)).
-- **[Creality Ender 3 Pro 3D Printer](https://www.creality.com/products/ender-3-pro-3d-printer)**, or at least that's how it started. It's got a direct-drive conversion, a "silent" board running Klipper firmware, and more printed part upgrades than I can remember.
-- **[Weatherflow Tempest Weather Station](https://shop.tempest.earth/products/tempest)** to help me get my Wx nerd on.
-
-### Everyday Carry
-*What has it got in its pocketses?*
-- **[Flipper Zero](https://flipperzero.one/)** running [Momentum Firmware](https://momentum-fw.dev/) in my pocket or bag for on-the-go hacking and exploration.
-- **[Leatherman FREE K4](https://www.leatherman.com/free-k4-590.html)** knife/multitool in my pocket for cutting and tinkering.
-- **[Milky lactase tablets](https://shopmilky.com/)** in my wallet so I can enjoy dairy without consequences.
-- **[Oura Ring](https://ouraring.com/product/rings/heritage)** (3rd generation, Heritage Black) on my middle finger for sleep and readiness/recovery tracking.
-- **[Pixel 8 Pro](https://store.google.com/product/pixel_8_pro)** in my pocket, running [GrapheneOS](https://grapheneos.org/) as my daily-driver (more on how I use that [here](https://blog.jbowdre.lol/post/daily-driving-grapheneos)).
-- **[Pixel Buds Pro](https://store.google.com/product/pixel_buds_pro)** in my ears, with noise cancelling so I don't have to acknowledge the world around me.
-- **[Pixel Watch 2](https://store.google.com/product/pixel_watch_2)** on my wrist, for notifications and fitness tracking.
-- **[ProxGrind RF Field Detector Card](https://www.redteamtools.com/RFID_LF_HF_Field_Detector_Card)** on my keychain to quickly learn about RFID/NFC readers.
-- **[Ridge Wallet](https://ridge.com/products/aluminum-gunmetal)** in my pocket for keeping my cards handy.
-- **[RovyVon Aurora A7 EDC Flashlight](https://www.rovyvon.com/collections/aurora-keychain-flashlights/products/aurora-a7-usb-c-gitd-sky-blue-keychain-flashlight-4th-generation)** in my pocket for keeping the darkness at bay.
-- **[Ti EDC Backpack](https://bigidesign.com/pages/ti-edc-backpack-landing-page)** for carrying my stuff, and keeping it organized while in transit.
-- **[Yubico Yubikey 5C NFC](https://www.yubico.com/product/yubikey-5c-nfc/)** on my keychain for hardware token things.
-
-### Software
-*Computer and web apps.*
-- **[Calibre](https://calibre-ebook.com/)** for collecting, converting, and managing my eBooks.
-- **[Fish shell](https://fishshell.com/)**, a really smart, modern, heavily configurable shell.
-- **[Home Assistant](https://www.home-assistant.io/)** for controlling my "smart" home.
-- **[Home Manager](https://github.com/nix-community/home-manager)** for managing packages and configurations across multiple systems ([dotfiles](https://github.com/jbowdre/dotfiles)).
-- **[Immich](https://immich.app/)**, a self-hosted photo and video management solution.
-- **[Linkding](https://github.com/sissbruecker/linkding)** as a self-hosted bookmark manager.
-- **[Miniflux](https://miniflux.app/)**, a self-hosted minimalist feed reader.
-- **[Obsidian](https://obsidian.md/)** for collecting/organizing notes. You can see some of them [here](https://notes.runtimeterror.dev/).
-- **[Phanpy](https://phanpy.social/#/)**, a minimal and opinionated Mastodon web client.
-- **[Tabby](https://tabby.sh/)**, a beautiful cross-platform terminal app.
-- **[tmux](https://github.com/tmux/tmux)** because *I heard you like terminals so I put a terminal in your terminal so you can terminal while you terminal*.
-- **[Vim](https://www.vim.org/)** for coding and development without a GUI.
-- **[VSCode](https://code.visualstudio.com/)** for most coding and development.
-
-### Android Apps
-*Skipping the obvious ones for services mentioned elsewhere on this page...*
-- **[Cheogram](https://play.google.com/store/apps/details?id=com.cheogram.android.playstore)** ([F-Droid](https://f-droid.org/packages/com.cheogram.android/)) XMPP client, with great integration to [jmp.chat](https://jmp.chat/).
-- **[Element](https://play.google.com/store/apps/details?id=im.vector.app)** ([F-Droid](https://f-droid.org/en/packages/im.vector.app/)) Matrix chat client.
-- **[Firefox Focus](https://play.google.com/store/apps/details?id=org.mozilla.focus)** Fast and private web browser for throw-away browsing sessions.
-- **[Firefox](https://play.google.com/store/apps/details?id=org.mozilla.firefox)** for general web browsing.
-- **[JBV1](https://play.google.com/store/apps/details?id=com.johnboysoftware.jbv1)** gives super powers to my Valentine One radar detector.
-- **[Lagrange](https://skyjake.github.io/fdroid/repo/)** browser for [Gemini](https://geminiprotocol.net/).
-- **[RaceBox](https://play.google.com/store/apps/details?id=pro.RaceBox.androidapp)** / **[RaceChrono](https://play.google.com/store/apps/details?id=com.racechrono.app)** for recording GPS/acceleration data during my [autocross runs](https://www.youtube.com/playlist?list=PLwzr4uKY-x-EwCv-rWNGefdikuW6Oy9O_).
-- **[RadarScope](https://play.google.com/store/apps/details?id=com.basevelocity.radarscope)** weather radar and information.
-- **[SimpleX Chat](https://play.google.com/store/apps/details?id=chat.simplex.app)** ([F-Droid](https://f-droid.org/en/packages/chat.simplex.app/)) for end-to-end encrypted chats without any user identifiers.
-- **[Squoosh](https://squoosh.app/)** for compressing and EXIF-stripping photos before sharing.
-- **[Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)** for automated profiles on my phone.
-- **[WiFiman](https://play.google.com/store/apps/details?id=com.ubnt.usurvey)** for scanning a testing wireless networks.
-- **[Yubico Authenticator](https://play.google.com/store/apps/details?id=com.yubico.yubioath)** for storing TOTP secrets on a hardware token.
-
-### Services
-*These may include affiliate links.*
-- **[Cloaked](https://join.cloaked.app/?utm_source=referral&utm_campaign=Ee83SGN8OR)** for generating unique identies (email addresses + phone numbers) for every web sign-up.
-- **[Fastmail](https://app.fastmail.com/signup/?STKI=/u29803368)** for fast, private email service with a ton of nice bonus features.
-- **[Forward Email](https://forwardemail.net/)** for routing email to/from my various project domains.
-- **[JMP.chat](https://jmp.chat/)** for a phone number backed by XMPP.
-- **[NextDNS](https://nextdns.io/?from=2jujzdcc)** for privacy-protecting ad-blocking DNS filtering in the cloud.
-- **[Obico](https://www.obico.io/)** for controlling and monitoring 3D prints.
-- **[omg.lol](https://home.omg.lol/referred-by/jbowdre)** for some really handy web tools and one of the best communities of interesting people.
-- **[Privacy.com](https://app.privacy.com/join/JMMQ7)** for creating virtual merchant-locked credit cards to keep me safe when shopping online.
-- **[Tailscale](https://tailscale.com)** for connecting all my various systems and making them think that they're on the same LAN.
diff --git a/flake.lock b/flake.lock
index 391d4c2..8d2ab6e 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
- "lastModified": 1708807242,
- "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=",
+ "lastModified": 1719254875,
+ "narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a",
+ "rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60",
"type": "github"
},
"original": {
diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html
new file mode 100644
index 0000000..8e0f347
--- /dev/null
+++ b/layouts/_default/_markup/render-link.html
@@ -0,0 +1,9 @@
+{{- $u := urls.Parse .Destination -}}
+
+ {{- with .Text | safeHTML }}{{ . }}{{ end -}}
+ {{- if $u.IsAbs }}↗{{ end -}}
+
+{{- /* chomp trailing newline */ -}}
\ No newline at end of file
diff --git a/layouts/partials/about.html b/layouts/partials/about.html
index 6e8fc01..f78bae7 100644
--- a/layouts/partials/about.html
+++ b/layouts/partials/about.html
@@ -1,7 +1,7 @@
{{ with .Site.Params.about }}