Merge branch 'main' into drafts

This commit is contained in:
John Bowdre 2024-06-06 20:51:15 -05:00
commit d8a9f804bb
8 changed files with 45 additions and 32 deletions

View file

@ -1,10 +1,11 @@
name: Deploy Preview to Neocities name: Build and Deploy Preview
# only run on changes to preview # only run on changes to preview
on: on:
push: push:
branches: branches:
- preview - preview
workflow_dispatch:
concurrency: # prevent concurrent deploys doing strange things concurrency: # prevent concurrent deploys doing strange things
group: deploy-preview group: deploy-preview
@ -42,16 +43,20 @@ jobs:
chmod 644 ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts
- name: Build with Hugo - name: Build with Hugo
run: HUGO_REMOTE_FONT_PATH=${{ secrets.REMOTE_FONT_PATH }} hugo --minify --environment preview run: HUGO_REMOTE_FONT_PATH=${{ secrets.REMOTE_FONT_PATH }} hugo --minify --environment preview
- name: Insert 404 page
run: |
cp public/404/index.html public/not_found.html
- name: Highlight with Torchlight - name: Highlight with Torchlight
run: | run: |
npm i @torchlight-api/torchlight-cli npm i @torchlight-api/torchlight-cli
npx torchlight TORCHLIGHT_TOKEN=${{ secrets.TORCHLIGHT_TOKEN }} npx torchlight
- name: Deploy to Neocities - name: Deploy to Bunny
uses: bcomnes/deploy-to-neocities@v1 uses: ayeressian/bunnycdn-storage-deploy@v2.2.2
with: with:
api_token: ${{ secrets.NEOCITIES_PREVIEW_API_TOKEN }} source: public
cleanup: true destination: /
dist_dir: public storageZoneName: "${{ secrets.BUNNY_STORAGE_NAME_PREVIEW }}"
storagePassword: "${{ secrets.BUNNY_STORAGE_PASSWORD_PREVIEW }}"
storageEndpoint: "${{ secrets.BUNNY_STORAGE_ENDPOINT }}"
accessKey: "${{ secrets.BUNNY_API_KEY }}"
pullZoneId: "${{ secrets.BUNNY_ZONE_ID_PREVIEW }}"
upload: "true"
remove: "true"
purgePullZone: "true"

View file

@ -1,4 +1,4 @@
name: Deploy to Production name: Build and Deploy Prod
# only run on changes to main # only run on changes to main
on: on:
@ -45,19 +45,23 @@ jobs:
chmod 644 ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts
- name: Build with Hugo - name: Build with Hugo
run: HUGO_REMOTE_FONT_PATH=${{ secrets.REMOTE_FONT_PATH }} hugo --minify run: HUGO_REMOTE_FONT_PATH=${{ secrets.REMOTE_FONT_PATH }} hugo --minify
- name: Insert 404 page
run: |
cp public/404/index.html public/not_found.html
- name: Highlight with Torchlight - name: Highlight with Torchlight
run: | run: |
npm i @torchlight-api/torchlight-cli npm i @torchlight-api/torchlight-cli
npx torchlight TORCHLIGHT_TOKEN=${{ secrets.TORCHLIGHT_TOKEN }} npx torchlight
- name: Deploy HTML to Neocities - name: Deploy to Bunny
uses: bcomnes/deploy-to-neocities@v1 uses: ayeressian/bunnycdn-storage-deploy@v2.2.2
with: with:
api_token: ${{ secrets.NEOCITIES_API_TOKEN }} source: public
cleanup: true destination: /
dist_dir: public storageZoneName: "${{ secrets.BUNNY_STORAGE_NAME }}"
storagePassword: "${{ secrets.BUNNY_STORAGE_PASSWORD }}"
storageEndpoint: "${{ secrets.BUNNY_STORAGE_ENDPOINT }}"
accessKey: "${{ secrets.BUNNY_API_KEY }}"
pullZoneId: "${{ secrets.BUNNY_ZONE_ID }}"
upload: "true"
remove: "true"
purgePullZone: "true"
- name: Deploy GMI to Agate - name: Deploy GMI to Agate
run: | run: |
rsync -avz --delete --exclude='*.html' --exclude='*.css' --exclude='*.js' -e ssh public/ deploy@${{ secrets.GMI_HOST }}:${{ secrets.GMI_CONTENT_PATH }} rsync -avz --delete --exclude='*.html' --exclude='*.css' --exclude='*.js' -e ssh public/ deploy@${{ secrets.GMI_HOST }}:${{ secrets.GMI_CONTENT_PATH }}

View file

@ -1 +1 @@
baseURL = "https://preview--runtimeterror.neocities.org/" baseURL = "https://preview.runtimeterror.dev/"

View file

@ -1,7 +1,7 @@
--- ---
title: "/changelog" title: "/changelog"
date: "2024-05-26T21:19:08Z" date: "2024-05-26T21:19:08Z"
lastmod: "2024-05-30" lastmod: "2024-06-06"
description: "Maybe I should keep a log of all my site-related tinkering?" description: "Maybe I should keep a log of all my site-related tinkering?"
featured: false featured: false
toc: false toc: false
@ -10,6 +10,9 @@ categories: slashes
--- ---
*High-level list of config/layout changes to the site.* *High-level list of config/layout changes to the site.*
**2024-06-06:**
- Migrate hosting from Neocities to Bunny CDN
**2024-05-30:** **2024-05-30:**
- Fix broken styling for taxonomy (categories/tags) feeds - Fix broken styling for taxonomy (categories/tags) feeds
- Open "notes" header link in new tab since it's an external link - Open "notes" header link in new tab since it's an external link

View file

@ -1,7 +1,7 @@
--- ---
title: "/colophon" title: "/colophon"
date: "2024-05-26T22:30:58Z" date: "2024-05-26T22:30:58Z"
lastmod: "2024-05-28" lastmod: "2024-06-06"
description: "There's a lot that goes into this site. Let me tell you how it works." description: "There's a lot that goes into this site. Let me tell you how it works."
featured: false featured: false
toc: true toc: true
@ -16,8 +16,8 @@ categories: slashes
- performs syntax highlighting with [Torchlight](https://torchlight.dev) ([details](/spotlight-on-torchlight/)). - 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/). - 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 [tinylytics](https://tinylytics.app/) for privacy-friendly analytics and cute kudos buttons. - leverages [tinylytics](https://tinylytics.app/) for privacy-friendly analytics and cute kudos buttons.
- uses [bunny.net](https://bunny.net) for DNS and CDN services. - resolves via [Bunny DNS](https://bunny.net/dns/).
- is published to / hosted by [Neocities](https://neocities.org) with a GitHub Actions workflow ([details](/deploy-hugo-neocities-github-actions/)). - is published to / hosted by [Bunny CND](https://bunny.net/cdn/) with a GitHub Actions workflow.
- 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 a GitHub Actions workflow, and served with [Agate](https://github.com/mbrubeck/agate).

View file

@ -1,7 +1,7 @@
--- ---
title: "Prettify Hugo RSS Feeds with XSLT" title: "Prettify Hugo RSS Feeds with XSLT"
date: 2024-04-30 date: 2024-04-30
lastmod: "2024-05-30" lastmod: "2024-06-05"
description: "Making my Hugo-generated RSS XML look as good to human visitors as it does to feed readers." description: "Making my Hugo-generated RSS XML look as good to human visitors as it does to feed readers."
featured: false featured: false
thumbnail: pretty-feed.png thumbnail: pretty-feed.png
@ -180,7 +180,7 @@ That's getting there:
![A darker styled RSS page](getting-there-feed.png) ![A darker styled RSS page](getting-there-feed.png)
Including those CSS styles means that the rendered page now uses my color palette and the [font I worked so hard to integrate](/using-custom-font-hugo/). I'm just going to make a few more tweaks to change some of the formatting, put the `New to feeds?` bit on its own line, and point to my [self-hosted instance of the SearXNG metasearch engine](https://scribbles.jbowdre.lol/post/self-hosting-a-search-engine-iyjdlk6y) instead of DDG. Including those CSS styles means that the rendered page now uses my color palette and the [font I worked so hard to integrate](/using-custom-font-hugo/). I'm just going to make a few more tweaks to change some of the formatting, put the `New to feeds?` bit on its own line, and point to [Mojeek](https://mojeek.com) instead of DDG ([why?](https://scribbles.jbowdre.lol/post/a-comprehensive-evaluation-of-various-search-engines-i-ve-used)).
Here's my final (for now) `static/xml/feed.xsl` file: Here's my final (for now) `static/xml/feed.xsl` file:
@ -210,7 +210,7 @@ Here's my final (for now) `static/xml/feed.xsl` file:
<body> <body>
<h1><xsl:value-of select="rss/channel/title"/> (RSS)</h1> <h1><xsl:value-of select="rss/channel/title"/> (RSS)</h1>
<p>This is an <abbr title="Really Simple Syndication">RSS</abbr> feed. To subscribe to it, copy its address and paste it when your feed reader asks for it. It will be updated periodically in your reader.</p> <p>This is an <abbr title="Really Simple Syndication">RSS</abbr> feed. To subscribe to it, copy its address and paste it when your feed reader asks for it. It will be updated periodically in your reader.</p>
<p>New to feeds? <a href="https://grep.vpota.to/search?q=how+to+get+started+with+rss+feeds" title="Search on the web to learn more">Learn more</a>.</p> <p>New to feeds? <a href="https://www.mojeek.com/search?q=how+to+get+started+with+rss+feeds" title="Search on the web to learn more">Learn more</a>.</p>
<p> <p>
<label for="address">RSS address:</label> <label for="address">RSS address:</label>
<input><xsl:attribute name="type">url</xsl:attribute><xsl:attribute name="id">address</xsl:attribute><xsl:attribute name="spellcheck">false</xsl:attribute><xsl:attribute name="value"><xsl:value-of select="rss/channel/atom:link[@rel='self']/@href"/></xsl:attribute></input> <input><xsl:attribute name="type">url</xsl:attribute><xsl:attribute name="id">address</xsl:attribute><xsl:attribute name="spellcheck">false</xsl:attribute><xsl:attribute name="value"><xsl:value-of select="rss/channel/atom:link[@rel='self']/@href"/></xsl:attribute></input>

View file

@ -1,7 +1,7 @@
--- ---
title: "/uses" title: "/uses"
date: "2024-05-29" date: "2024-05-29"
# lastmod: {{ .Date | time.Format "2006-01-02" }} lastmod: "2024-06-02"
description: "The hardware, software, services, and gear which I use (almost) daily." description: "The hardware, software, services, and gear which I use (almost) daily."
toc: true toc: true
timeless: true timeless: true
@ -18,7 +18,7 @@ categories: slashes
- **[Weatherflow Tempest Weather Station](https://shop.tempest.earth/products/tempest)** to help me get my Wx nerd on. - **[Weatherflow Tempest Weather Station](https://shop.tempest.earth/products/tempest)** to help me get my Wx nerd on.
### Everyday Carry ### Everyday Carry
*What has it got in its pockets/backpack?* *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. - **[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. - **[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. - **[Milky lactase tablets](https://shopmilky.com/)** in my wallet so I can enjoy dairy without consequences.
@ -28,7 +28,8 @@ categories: slashes
- **[Pixel Watch 2](https://store.google.com/product/pixel_watch_2)** on my wrist, for notifications and fitness tracking. - **[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. - **[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. - **[Ridge Wallet](https://ridge.com/products/aluminum-gunmetal)** in my pocket for keeping my cards handy.
- **[Ti EDC Backpack](https://bigidesign.com/pages/ti-edc-backpack-landing-page)** for carrying my stuff. - **[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. - **[Yubico Yubikey 5C NFC](https://www.yubico.com/product/yubikey-5c-nfc/)** on my keychain for hardware token things.
### Software ### Software

View file

@ -22,7 +22,7 @@
<body> <body>
<h1><xsl:value-of select="rss/channel/title"/> (RSS)</h1> <h1><xsl:value-of select="rss/channel/title"/> (RSS)</h1>
<p>This is an <abbr title="Really Simple Syndication">RSS</abbr> feed. To subscribe to it, copy its address and paste it when your feed reader asks for it. It will be updated periodically in your reader.</p> <p>This is an <abbr title="Really Simple Syndication">RSS</abbr> feed. To subscribe to it, copy its address and paste it when your feed reader asks for it. It will be updated periodically in your reader.</p>
<p>New to feeds? <a href="https://grep.vpota.to/search?q=how+to+get+started+with+rss+feeds" title="Search on the web to learn more">Learn more</a>.</p> <p>New to feeds? <a href="https://www.mojeek.com/search?q=how+to+get+started+with+rss+feeds" title="Search on the web to learn more">Learn more</a>.</p>
<p> <p>
<label for="address">RSS address:</label> <label for="address">RSS address:</label>
<input><xsl:attribute name="type">url</xsl:attribute><xsl:attribute name="id">address</xsl:attribute><xsl:attribute name="spellcheck">false</xsl:attribute><xsl:attribute name="value"><xsl:value-of select="rss/channel/atom:link[@rel='self']/@href"/></xsl:attribute></input> <input><xsl:attribute name="type">url</xsl:attribute><xsl:attribute name="id">address</xsl:attribute><xsl:attribute name="spellcheck">false</xsl:attribute><xsl:attribute name="value"><xsl:value-of select="rss/channel/atom:link[@rel='self']/@href"/></xsl:attribute></input>