mirror of
https://github.com/jbowdre/runtimeterror.git
synced 2024-11-29 18:02:18 +00:00
Compare commits
62 commits
b425d47395
...
39ea0e9516
Author | SHA1 | Date | |
---|---|---|---|
39ea0e9516 | |||
838b448b94 | |||
8720ced825 | |||
0607b54eb5 | |||
711fac9e1f | |||
285cb0f49e | |||
ac03a9f995 | |||
96c5360479 | |||
0869b0a2c8 | |||
7df7a9fad6 | |||
06720c680d | |||
b00049b2b1 | |||
5a63d1a007 | |||
97d7c08d0b | |||
6c3c3437a2 | |||
e5db4ccd19 | |||
cfa4325526 | |||
3bf2fd4642 | |||
368413597e | |||
fbd7f70939 | |||
50d43c19b9 | |||
577279df27 | |||
bd00a037a3 | |||
80316ec72f | |||
6dcc6ba697 | |||
7faca4f360 | |||
f3746e4047 | |||
05852d3803 | |||
847951b142 | |||
c81969204d | |||
4c460309a7 | |||
a20372f224 | |||
1b90235577 | |||
530a5c2433 | |||
a3da8809ec | |||
92da8b7593 | |||
13c8bdccfa | |||
50597ea7d4 | |||
9dbc4542c2 | |||
7a67dad462 | |||
e310192cd1 | |||
f484bb98d7 | |||
036c7825a2 | |||
a14609c559 | |||
6f1ec82c29 | |||
3442f2d483 | |||
a60ebcb1ec | |||
4e6095e5ff | |||
c100a122df | |||
85a5a68f46 | |||
9f59df16ad | |||
254496777d | |||
2d02179d2e | |||
cdba5eace2 | |||
5991a169a4 | |||
5a790710f0 | |||
50d48780be | |||
5639ff45cf | |||
659b6dfaa4 | |||
1b35ccd64d | |||
788b806981 | |||
|
59d5622fd1 |
18 changed files with 369 additions and 106 deletions
14
.github/workflows/daily_build.yml
vendored
14
.github/workflows/daily_build.yml
vendored
|
@ -1,14 +0,0 @@
|
||||||
name: Daily build
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 13 * * *"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Trigger build webhook on Netlify
|
|
||||||
run: curl -s -X POST "https://api.netlify.com/build_hooks/${TOKEN}"
|
|
||||||
env:
|
|
||||||
TOKEN: ${{ secrets.NETLIFY_CRON_BUILD_HOOK }}
|
|
46
.github/workflows/deploy-preview-to-neocities.yml
vendored
Normal file
46
.github/workflows/deploy-preview-to-neocities.yml
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
name: Deploy Preview to Neocities
|
||||||
|
|
||||||
|
# only run on changes to preview
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- preview
|
||||||
|
|
||||||
|
concurrency: # prevent concurrent deploys doing strange things
|
||||||
|
group: deploy-preview-to-neocities
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
# Default to bash
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: Build and deploy Hugo site
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Hugo setup
|
||||||
|
uses: peaceiris/actions-hugo@v2.6.0
|
||||||
|
with:
|
||||||
|
hugo-version: '0.121.1'
|
||||||
|
extended: true
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build with Hugo
|
||||||
|
run: hugo --minify --environment preview
|
||||||
|
- name: Insert 404 page
|
||||||
|
run: |
|
||||||
|
cp public/404/index.html public/not_found.html
|
||||||
|
- name: Highlight with Torchlight
|
||||||
|
run: |
|
||||||
|
npm i @torchlight-api/torchlight-cli
|
||||||
|
npx torchlight
|
||||||
|
- name: Deploy to Neocities
|
||||||
|
uses: bcomnes/deploy-to-neocities@v1
|
||||||
|
with:
|
||||||
|
api_token: ${{ secrets.NEOCITIES_PREVIEW_API_TOKEN }}
|
||||||
|
cleanup: true
|
||||||
|
dist_dir: public
|
48
.github/workflows/deploy-to-neocities.yml
vendored
Normal file
48
.github/workflows/deploy-to-neocities.yml
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
name: Deploy to Neocities
|
||||||
|
|
||||||
|
# only run on changes to main
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: 0 13 * * *
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency: # prevent concurrent deploys doing strange things
|
||||||
|
group: deploy-to-neocities
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
# Default to bash
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: Build and deploy Hugo site
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Hugo setup
|
||||||
|
uses: peaceiris/actions-hugo@v2.6.0
|
||||||
|
with:
|
||||||
|
hugo-version: '0.121.1'
|
||||||
|
extended: true
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Build with Hugo
|
||||||
|
run: hugo --minify
|
||||||
|
- name: Insert 404 page
|
||||||
|
run: |
|
||||||
|
cp public/404/index.html public/not_found.html
|
||||||
|
- name: Highlight with Torchlight
|
||||||
|
run: |
|
||||||
|
npm i @torchlight-api/torchlight-cli
|
||||||
|
npx torchlight
|
||||||
|
- name: Deploy to Neocities
|
||||||
|
uses: bcomnes/deploy-to-neocities@v1
|
||||||
|
with:
|
||||||
|
api_token: ${{ secrets.NEOCITIES_API_TOKEN }}
|
||||||
|
cleanup: true
|
||||||
|
dist_dir: public
|
|
@ -1 +1 @@
|
||||||
[![Netlify Status](https://api.netlify.com/api/v1/badges/7cd6b595-2b3b-403d-a29f-c4f27e8bd366/deploy-status)](https://app.netlify.com/sites/runtimeterrordev/deploys)
|
[![Neocities Deployment Status](https://github.com/jbowdre/runtimeterror/actions/workflows/deploy-to-neocities.yml/badge.svg)](https://github.com/jbowdre/runtimeterror/actions/workflows/deploy-to-neocities.yml)
|
|
@ -18,13 +18,14 @@ giscusInputPosition = "bottom"
|
||||||
giscusLang = "en"
|
giscusLang = "en"
|
||||||
giscusLoading = "lazy"
|
giscusLoading = "lazy"
|
||||||
giscusMapping = "og:title"
|
giscusMapping = "og:title"
|
||||||
giscusReactions = "1"
|
giscusReactions = "0"
|
||||||
giscusRepo = "jbowdre/site-comments"
|
giscusRepo = "jbowdre/site-comments"
|
||||||
giscusRepoId = "R_kgDOKKEGDw"
|
giscusRepoId = "R_kgDOKKEGDw"
|
||||||
giscusStrict = "0"
|
giscusStrict = "0"
|
||||||
giscusTheme = "noborder_gray"
|
giscusTheme = "noborder_gray"
|
||||||
|
|
||||||
analytics = true
|
analytics = true
|
||||||
|
kudos = true
|
||||||
|
|
||||||
[author]
|
[author]
|
||||||
name = "John Bowdre"
|
name = "John Bowdre"
|
||||||
|
@ -171,8 +172,8 @@ title = "hugo"
|
||||||
url = "https://gohugo.io"
|
url = "https://gohugo.io"
|
||||||
|
|
||||||
[[powerLinks]]
|
[[powerLinks]]
|
||||||
title = "netlify"
|
title = "neocities"
|
||||||
url = "https://www.netlify.com"
|
url = "https://neocities.org/about"
|
||||||
|
|
||||||
[[powerLinks]]
|
[[powerLinks]]
|
||||||
title = "risotto"
|
title = "risotto"
|
||||||
|
@ -183,8 +184,8 @@ title = "torchlight"
|
||||||
url = "https://torchlight.dev"
|
url = "https://torchlight.dev"
|
||||||
|
|
||||||
[[powerLinks]]
|
[[powerLinks]]
|
||||||
title = "cabin"
|
title = "tinylytics"
|
||||||
url = "https://withcabin.com/privacy/runtimeterror.dev"
|
url = "https://tinylytics.app/home"
|
||||||
|
|
||||||
[[verifyLinks]]
|
[[verifyLinks]]
|
||||||
title = "omg.lol"
|
title = "omg.lol"
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
comments = true
|
comments = false
|
||||||
analytics = false
|
analytics = false
|
|
@ -1 +1 @@
|
||||||
baseURL = "https://preview--runtimeterrordev.netlify.app"
|
baseURL = "https://preview--runtimeterror.neocities.org/"
|
|
@ -3,6 +3,7 @@ title = "404'd!"
|
||||||
noindex = true
|
noindex = true
|
||||||
timeless = true
|
timeless = true
|
||||||
comments = true
|
comments = true
|
||||||
|
kudos = false
|
||||||
+++
|
+++
|
||||||
|
|
||||||
We're not sure what you were looking for but it's not here.
|
We're not sure what you were looking for but it's not here.
|
||||||
|
|
91
content/posts/deploy-hugo-neocities-github-actions/index.md
Normal file
91
content/posts/deploy-hugo-neocities-github-actions/index.md
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
---
|
||||||
|
title: "Deploying a Hugo Site to Neocities with GitHub Actions"
|
||||||
|
date: 2024-01-21
|
||||||
|
# lastmod: 2024-01-21
|
||||||
|
description: "Using GitHub Actions to automatically deploy a Hugo website to Neocities."
|
||||||
|
featured: false
|
||||||
|
toc: true
|
||||||
|
comments: true
|
||||||
|
categories: Backstage
|
||||||
|
tags:
|
||||||
|
- hugo
|
||||||
|
- meta
|
||||||
|
- serverless
|
||||||
|
---
|
||||||
|
I came across [Neocities](https://neocities.org) many months ago, and got really excited by the premise: a free web host with the mission to bring back the *"fun, creativity and independence that made the web great."* I spent a while scrolling through the [gallery](https://neocities.org/browse) of personal sites and was amazed by both the nostalgic vibes and the creativity on display. It's like a portal back to when the web was fun. Neocities seemed like something I wanted to be a part of so I signed up for an account... and soon realized that I didn't *really* want to go back to crafting artisinal HTML by hand like I did in the early '00s. I didn't see an easy way to leverage my preferred static site generator[^lazy] so I filed it away and moved on.
|
||||||
|
|
||||||
|
[^lazy]: Also I'm kind of lazy, and not actually very good at web design anyway. I mean, you've seen my work.
|
||||||
|
|
||||||
|
Until yesterday, when I saw a post from [Sophie](https://social.lol/@sophie) on [How I deploy my Eleventy site to Neocities](https://localghost.dev/blog/how-i-deploy-my-eleventy-site-to-neocities/). I hadn't realized that Neocities had an [API](https://neocities.org/api), or that there was a [deploy-to-neocities](https://github.com/bcomnes/deploy-to-neocities) GitHub Action which uses that API to push content to Neocities. With that new-to-me information, I thought I'd give Neocities another try - a real one this time.
|
||||||
|
|
||||||
|
I had been hosting this site on Netlify's free plan [for a couple of years](/hello-hugo/) and haven't really encountered any problems. But I saw Neocities as a better vision of the internet, and I wanted to be a part of that[^passion]. So last night I upgraded to the $5/month [Neocities Supporter](https://neocities.org/supporter) plan which would let me use a custom domain for my site (along with higher storage and bandwidth limits).
|
||||||
|
|
||||||
|
[^passion]: Plus I love supporting passion projects.
|
||||||
|
|
||||||
|
I knew I'd need to make some changes to Sophie's workflow since my site is built with Hugo rather than Eleventy. I did some poking around and found [GitHub Actions for Hugo](https://github.com/peaceiris/actions-hugo) which would take care of installing Hugo for me. Then I'd just need to render the HTML with `hugo --minify` and use the [Torchlight](/spotlight-on-torchlight/) CLI to mark up the code blocks. Along the way, I also discovered that I'd need to overwrite `/not_found.html` to insert my custom 404 page so I included an extra step to do that. After that, I'll finally be ready to push the results to Neocities.
|
||||||
|
|
||||||
|
It took a bit of trial and error, but I eventually adapted this workflow which does the trick:
|
||||||
|
|
||||||
|
### The Workflow
|
||||||
|
```yaml
|
||||||
|
# torchlight! {"lineNumbers": true}
|
||||||
|
# .github/workflows/deploy-to-neocities.yml
|
||||||
|
name: Deploy to Neocities
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Daily build to catch any future-dated posts
|
||||||
|
schedule:
|
||||||
|
- cron: 0 13 * * *
|
||||||
|
# Build on pushes to the main branch only
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: deploy-to-neocities
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
name: Build and deploy Hugo site
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
# Install Hugo in the runner
|
||||||
|
- name: Hugo setup
|
||||||
|
uses: peaceiris/actions-hugo@v2.6.0
|
||||||
|
with:
|
||||||
|
hugo-version: '0.121.1'
|
||||||
|
extended: true
|
||||||
|
# Check out the source for the site
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
# Build the site with Hugo
|
||||||
|
- name: Build with Hugo
|
||||||
|
run: hugo --minify
|
||||||
|
# Copy my custom 404 page to not_found.html so it
|
||||||
|
# will be picked up by Neocities
|
||||||
|
- name: Insert 404 page
|
||||||
|
run: |
|
||||||
|
cp public/404/index.html public/not_found.html
|
||||||
|
# Highlight code blocks with the Torchlight CLI
|
||||||
|
- name: Highlight with Torchlight
|
||||||
|
run: |
|
||||||
|
npm i @torchlight-api/torchlight-cli
|
||||||
|
npx torchlight
|
||||||
|
# Push the rendered site to Neocities and
|
||||||
|
# clean up any orphaned files
|
||||||
|
- name: Deploy to Neocities
|
||||||
|
uses: bcomnes/deploy-to-neocities@v1
|
||||||
|
with:
|
||||||
|
api_token: ${{ secrets.NEOCITIES_API_TOKEN }}
|
||||||
|
cleanup: true
|
||||||
|
dist_dir: public
|
||||||
|
```
|
||||||
|
|
||||||
|
I'm thrilled with how well this works, and happy to have learned a bit more about GitHub Actions in the process. Big thanks to Sophie for pointing me in the right direction!
|
46
content/posts/enable-fips-fix-aria-lifecycle/index.md
Normal file
46
content/posts/enable-fips-fix-aria-lifecycle/index.md
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
title: "Enabling FIPS Compliance Fixes Aria Lifecycle 8.14"
|
||||||
|
date: 2024-01-19
|
||||||
|
# lastmod: 2024-01-19
|
||||||
|
description: "Never in my life have I seen enabling FIPS *fix* a problem - until now."
|
||||||
|
featured: false
|
||||||
|
comments: true
|
||||||
|
categories: VMware
|
||||||
|
tags:
|
||||||
|
- vmware
|
||||||
|
---
|
||||||
|
This week, VMware posted [VMSA-2024-0001](https://www.vmware.com/security/advisories/VMSA-2024-0001.html) which details a critical (9.9/10) vulnerability in <s>vRealize</s> *Aria* Automation. While working to get our environment patched, I ran into an interesting error on our Aria Lifecycle appliance:
|
||||||
|
|
||||||
|
```log
|
||||||
|
Error Code: LCMVRAVACONFIG590024
|
||||||
|
VMware Aria Automation hostname is not valid or unable to run the product specific commands via SSH on the host. Check if VMware Aria Automation is up and running.
|
||||||
|
VMware Aria Automation hostname is not valid or unable to run the product specific commands via SSH on the host. Check if VMware Aria Automation is up and running.
|
||||||
|
com.vmware.vrealize.lcm.drivers.vra80.exception.VraVaProductNotFoundException: Either provided hostname: <VMwareAriaAutomationFQDN> is not a valid VMware Aria Automation hostname or unable to run the product specific commands via SSH on the host.
|
||||||
|
at com.vmware.vrealize.lcm.drivers.vra80.helpers.VraPreludeInstallHelper.getVraFullVersion(VraPreludeInstallHelper.java:970)
|
||||||
|
at com.vmware.vrealize.lcm.drivers.vra80.helpers.VraPreludeInstallHelper.checkVraApplianceAndVersion(VraPreludeInstallHelper.java:978)
|
||||||
|
at com.vmware.vrealize.lcm.drivers.vra80.helpers.VraPreludeInstallHelper.getVraProductDetails(VraPreludeInstallHelper.java:754)
|
||||||
|
at com.vmware.vrealize.lcm.plugin.core.vra80.task.VraVaImportEnvironmentTask.execute(VraVaImportEnvironmentTask.java:145)
|
||||||
|
at com.vmware.vrealize.lcm.platform.automata.service.Task.retry(Task.java:158)
|
||||||
|
at com.vmware.vrealize.lcm.automata.core.TaskThread.run(TaskThread.java:60)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
|
||||||
|
at java.base/java.lang.Thread.run(Unknown Source)
|
||||||
|
```
|
||||||
|
|
||||||
|
Digging further into the appliance logs revealed some more details:
|
||||||
|
```log
|
||||||
|
Session.connect: java.security.spec.InvalidKeySpecException: key spec not recognized
|
||||||
|
```
|
||||||
|
|
||||||
|
That seems like a much more insightful error than "the hostname is not valid, dummy."
|
||||||
|
|
||||||
|
Anyhoo, searching for the error took me to a VMware KB on the subject:
|
||||||
|
- [VMware Aria Suite Lifecycle 8.14 Patch 1 Day 2 operations fail for VMware Aria Automation with error code LCMVRAVACONFIG590024 (96243)](https://kb.vmware.com/s/article/96243)
|
||||||
|
|
||||||
|
> After applying VMware Aria Suite Lifecycle 8.14 Patch 1, you may encounter deployment and day-2 operation failures, attributed to the elimination of weak algorithms in Suite Lifecycle. To prevent such issues, it is recommended to either turn on FIPS in VMware Aria Suite Lifecycle or implement the specified workarounds on other VMware Aria Products, as outlined in the article Steps for Removing SHA1 weak Algorithms/Ciphers from all VMware Aria Products.
|
||||||
|
|
||||||
|
That's right. According to the KB, the solution for the untrusted encryption algorithms is to *enable* FIPS compliance. I was skeptical: I've never seen FIPS enforcement fix problems, it always causes them.
|
||||||
|
|
||||||
|
But I gave it a shot, and *holy crap it actually worked!* Enabling FIPS compliance on the Aria Lifecycle appliance got things going again.
|
||||||
|
|
||||||
|
I feel like I've seen everything now.
|
|
@ -97,6 +97,7 @@ resources:
|
||||||
|
|
||||||
And I will add in a `storage` property as well which will automatically adjust the deployed VMDK size to match the specified input:
|
And I will add in a `storage` property as well which will automatically adjust the deployed VMDK size to match the specified input:
|
||||||
```yaml
|
```yaml
|
||||||
|
# torchlight! {"torchlightAnnotations": false}
|
||||||
# torchlight! {"lineNumbers": true}
|
# torchlight! {"lineNumbers": true}
|
||||||
[...]
|
[...]
|
||||||
description: '${input.description}'
|
description: '${input.description}'
|
||||||
|
@ -202,7 +203,6 @@ inputs:
|
||||||
type: string
|
type: string
|
||||||
title: Point of Contact Email
|
title: Point of Contact Email
|
||||||
default: jack.shephard@example.com
|
default: jack.shephard@example.com
|
||||||
pattern: '^[^\s@]+@[^\s@]+\.[^\s@]+$'
|
|
||||||
ticket:
|
ticket:
|
||||||
type: string
|
type: string
|
||||||
title: Ticket/Request Number
|
title: Ticket/Request Number
|
||||||
|
@ -292,7 +292,7 @@ Once all those constants are created I can move on to the meat of this little pr
|
||||||
|
|
||||||
#### ABX Action
|
#### ABX Action
|
||||||
I'll click back to **Extensibility > Library > Actions** and then **+ New Action**. I give the new action a clever title and description:
|
I'll click back to **Extensibility > Library > Actions** and then **+ New Action**. I give the new action a clever title and description:
|
||||||
![Create a new action](20210901_create_action.png)]
|
![Create a new action](20210901_create_action.png)
|
||||||
|
|
||||||
I then hit the language dropdown near the top left and select to use `powershell` so that I can use those sweet, sweet PowerCLI cmdlets.
|
I then hit the language dropdown near the top left and select to use `powershell` so that I can use those sweet, sweet PowerCLI cmdlets.
|
||||||
![Language selection](20210901_action_select_language.png)
|
![Language selection](20210901_action_select_language.png)
|
||||||
|
|
|
@ -1,7 +1,24 @@
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
{{- $ageDays := div (sub now.Unix .Date.Unix) 86400 -}}
|
{{- $ageDays := div (sub now.Unix .Date.Unix) 86400 -}}
|
||||||
<header class="content__header">
|
<header class="content__header">
|
||||||
<h1>{{ .Title | markdownify }}</h1>
|
<div class="frontmatter">
|
||||||
|
<hr>
|
||||||
|
<table class="frontmatter">
|
||||||
|
<tr><td class="label">title:</td><td class="title">{{ .Title | markdownify }}</td></tr>
|
||||||
|
{{- if .Params.date }}
|
||||||
|
{{- $postDate := .Date.Format "2006-01-02" }}
|
||||||
|
{{- $updateDate := .Lastmod.Format "2006-01-02" }}
|
||||||
|
<tr><td class="label">posted:</td><td class="content">{{ $postDate }}</td></tr>
|
||||||
|
{{- if ne $postDate $updateDate }}
|
||||||
|
<tr><td class="label">updated:</td><td class="content">{{ $updateDate }}</td></tr>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{- with .Params.tags }}{{- $tagCount := len . }}
|
||||||
|
<tr class="frontmatter_tags"><td>tags:</td><td>{{- if gt $tagCount 5 }}<details><summary>See all {{ $tagCount }} tags...</summary>{{- end }}["<a href="/tags">all</a>" {{- range . }}{{- $tag := urlize . }}{{ if $tag }}, {{ end }}"<a href='{{ absLangURL (printf "tags/%s" $tag) }}'>{{ . }}</a>"{{- end }}]{{- if gt $tagCount 5 }}</details>{{- end }}</td></tr>
|
||||||
|
{{- end }}
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
{{- with .Param "lastmod" -}}
|
{{- with .Param "lastmod" -}}
|
||||||
{{- $ageDays = div (sub now.Unix .Unix) 86400 -}}
|
{{- $ageDays = div (sub now.Unix .Unix) 86400 -}}
|
||||||
|
@ -16,6 +33,7 @@
|
||||||
<div class="content__body">
|
<div class="content__body">
|
||||||
{{ .Content }}
|
{{ .Content }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{- $showComments := true }}
|
{{- $showComments := true }}
|
||||||
{{- if eq .Site.Params.comments false }}
|
{{- if eq .Site.Params.comments false }}
|
||||||
{{- $showComments = false }}
|
{{- $showComments = false }}
|
||||||
|
@ -23,6 +41,16 @@
|
||||||
{{- $showComments = false }}
|
{{- $showComments = false }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if ne $showComments false }}
|
{{- if ne $showComments false }}
|
||||||
|
<hr>
|
||||||
|
{{- $showKudos := true }}
|
||||||
|
{{- if eq .Site.Params.kudos false }}
|
||||||
|
{{- $showKudos = false }}
|
||||||
|
{{- else if eq .Params.kudos false }}
|
||||||
|
{{- $showKudos = false }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if and (eq .Site.Params.analytics true) (ne $showKudos false) }}
|
||||||
|
<span class="post_kudos">Celebrate this post: <button class="tinylytics_kudos"></button></span>
|
||||||
|
{{- end }}
|
||||||
{{- partial "comments" . }}
|
{{- partial "comments" . }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
<footer class="content__footer"></footer>
|
<footer class="content__footer"></footer>
|
||||||
|
|
|
@ -1,30 +1,10 @@
|
||||||
{{- $postDate := .Date.Format "2006-01-02" }}
|
{{ if .Params.description }}<p>{{ .Params.description }}</p><hr>{{ end }}
|
||||||
{{- $updateDate := .Lastmod.Format "2006-01-02" }}
|
{{ if and (gt .WordCount 400 ) (gt (len .TableOfContents) 180) }}
|
||||||
{{ if or (.Params.description) (.Params.date) }}
|
<p>
|
||||||
{{ if .Params.description }}<p>{{ .Params.description }}</p>{{ end }}
|
|
||||||
<p>
|
|
||||||
{{ if .Params.date }}<table><tr><td>posted:</td><td>{{ $postDate }}</td></tr>{{- if ne $postDate $updateDate }}<tr><td>updated:</td><td>{{ $updateDate }}</td></tr>{{ end }}</table>{{ end }}
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
{{ if and (gt .WordCount 400 ) (gt (len .TableOfContents) 180) }}
|
|
||||||
<p>
|
|
||||||
<h3>On this page</h3>
|
<h3>On this page</h3>
|
||||||
{{ .TableOfContents }}
|
{{ .TableOfContents }}
|
||||||
<hr>
|
<hr>
|
||||||
</p>
|
</p>
|
||||||
{{ end }}
|
|
||||||
{{- with .Params.tags -}}
|
|
||||||
<p>
|
|
||||||
<h3>Tags</h3>
|
|
||||||
[<a href="/tags">all</a>]
|
|
||||||
{{- range . }}
|
|
||||||
{{- $tag := urlize . -}}
|
|
||||||
[<a href='{{ absLangURL (printf "tags/%s" $tag) }}' title="{{ . }}">{{ . }}</a>]
|
|
||||||
{{- end }}
|
|
||||||
<br><br>
|
|
||||||
<hr>
|
|
||||||
</p>
|
|
||||||
{{- end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ if isset .Params "categories" }}
|
{{ if isset .Params "categories" }}
|
||||||
|
@ -62,3 +42,8 @@
|
||||||
<hr>
|
<hr>
|
||||||
<h3>status.lol</h3>
|
<h3>status.lol</h3>
|
||||||
<script src="https://status.lol/jbowdre.js?time&link&fluent&pretty"></script>
|
<script src="https://status.lol/jbowdre.js?time&link&fluent&pretty"></script>
|
||||||
|
{{- if eq .Site.Params.analytics true }}
|
||||||
|
<hr>
|
||||||
|
<h3>Webring</h3>
|
||||||
|
<a href="" target="_blank" class="tinylytics_webring">🕸️<img class="tinylytics_webring_avatar" src="" style="display: none"/>💍</a>
|
||||||
|
{{- end }}
|
|
@ -6,11 +6,7 @@
|
||||||
<!-- Back to Top button via https://github.com/vfeskov/vanilla-back-to-top -->
|
<!-- Back to Top button via https://github.com/vfeskov/vanilla-back-to-top -->
|
||||||
{{ $jsToTop := resources.Get "js/back-to-top.js" | minify }}
|
{{ $jsToTop := resources.Get "js/back-to-top.js" | minify }}
|
||||||
<script src="{{ $jsToTop.RelPermalink }}"></script>
|
<script src="{{ $jsToTop.RelPermalink }}"></script>
|
||||||
<script>addBackToTop({
|
<script>addBackToTop()</script>
|
||||||
diameter: 56,
|
|
||||||
backgroundColor: '#383838',
|
|
||||||
textColor: '#c45a5a'
|
|
||||||
})</script>
|
|
||||||
|
|
||||||
<!-- Search index via https://victoria.dev/blog/add-search-to-hugo-static-sites-with-lunr/ -->
|
<!-- Search index via https://victoria.dev/blog/add-search-to-hugo-static-sites-with-lunr/ -->
|
||||||
{{ partial "search-index.html" .}}
|
{{ partial "search-index.html" .}}
|
||||||
|
|
|
@ -34,9 +34,9 @@
|
||||||
<link rel="stylesheet" href="{{ "css/risotto.css" | absURL }}">
|
<link rel="stylesheet" href="{{ "css/risotto.css" | absURL }}">
|
||||||
<link rel="stylesheet" href="{{ "css/custom.css" | absURL }}">
|
<link rel="stylesheet" href="{{ "css/custom.css" | absURL }}">
|
||||||
|
|
||||||
{{ if .Site.Params.analytics }}
|
{{ if eq .Site.Params.analytics true }}
|
||||||
<!-- cabin analytics -->
|
<!-- tinylytics -->
|
||||||
<script async defer src="https://scripts.withcabin.com/hello.js"></script>
|
<script src="https://tinylytics.app/embed/z4bwvaCBkF39NcDDLsRu.js?kudos=🎉&webring=avatars" defer></script>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
<!-- syntax highlighting -->
|
<!-- syntax highlighting -->
|
||||||
|
|
39
netlify.toml
39
netlify.toml
|
@ -1,39 +0,0 @@
|
||||||
[build]
|
|
||||||
publish = "public"
|
|
||||||
|
|
||||||
[build.environment]
|
|
||||||
HUGO_VERSION = "0.121.1"
|
|
||||||
|
|
||||||
[context.production]
|
|
||||||
command = """
|
|
||||||
hugo
|
|
||||||
npm i @torchlight-api/torchlight-cli
|
|
||||||
npx torchlight
|
|
||||||
"""
|
|
||||||
|
|
||||||
[context.preview]
|
|
||||||
command = """
|
|
||||||
hugo --environment preview
|
|
||||||
npm i @torchlight-api/torchlight-cli
|
|
||||||
npx torchlight
|
|
||||||
"""
|
|
||||||
[[headers]]
|
|
||||||
for = "/*"
|
|
||||||
[headers.values]
|
|
||||||
X-Robots-Tag = "noindex"
|
|
||||||
|
|
||||||
[context.drafts]
|
|
||||||
command = """
|
|
||||||
hugo --environment drafts -D
|
|
||||||
npm i @torchlight-api/torchlight-cli
|
|
||||||
npx torchlight
|
|
||||||
"""
|
|
||||||
[[headers]]
|
|
||||||
for = "/*"
|
|
||||||
[headers.values]
|
|
||||||
X-Robots-Tag = "noindex"
|
|
||||||
|
|
||||||
[[redirects]]
|
|
||||||
from = "/*"
|
|
||||||
to = "/404/"
|
|
||||||
status = 404
|
|
|
@ -260,7 +260,6 @@ form button {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
|
||||||
grid-gap: 0.5rem;
|
grid-gap: 0.5rem;
|
||||||
/* justify-content: center; */
|
|
||||||
margin: 0.5rem 0;
|
margin: 0.5rem 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -275,3 +274,78 @@ form button {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
color: var(--off-fg);
|
color: var(--off-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* blockquote styling */
|
||||||
|
blockquote {
|
||||||
|
font-style: italic;
|
||||||
|
border-left: 0.25rem solid var(--logo);
|
||||||
|
padding-left: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tinylytics kudos styling*/
|
||||||
|
.post_kudos {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.tinylytics_kudos {
|
||||||
|
border: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
color: var(--off-fg);
|
||||||
|
font-size: 1.2rem;
|
||||||
|
padding: 0;
|
||||||
|
transition: all .2s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.tinylytics_kudos:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
text-shadow: var(--off-fg) 0 0 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* post front matter styling*/
|
||||||
|
.frontmatter hr {
|
||||||
|
margin-bottom: 0rem;
|
||||||
|
margin-top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter h1 {
|
||||||
|
margin-top: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter .label {
|
||||||
|
color: var(--off-fg);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter .title {
|
||||||
|
color: var(--fg);
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter table {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
margin-bottom: 0rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frontmatter_tags {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--off-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* back-to-top styling */
|
||||||
|
#back-to-top {
|
||||||
|
background: var(--inner-bg);
|
||||||
|
height: 56px;
|
||||||
|
width: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#back-to-top svg {
|
||||||
|
fill: var(--link);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* footnote link styling */
|
||||||
|
.footnote-backref {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
|
@ -2,20 +2,20 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--base00: #181818; /* bg */
|
--base00: #090909; /* bg */
|
||||||
--base01: #282828; /* off-bg */
|
--base01: #1c1c1c; /* off-bg */
|
||||||
--base02: #383838; /* inner-bg */
|
--base02: #292929; /* inner-bg */
|
||||||
--base03: #585858; /* muted */
|
--base03: #6d6c6c; /* muted */
|
||||||
--base04: #abaaaa; /* off-fg */
|
--base04: #abaaaa; /* off-fg */
|
||||||
--base05: #d8d8d8; /* fg */
|
--base05: #d8d8d8; /* fg */
|
||||||
--base06: #cfcfcf; /* code */
|
--base06: #75f558; /* code */
|
||||||
--base07: #5f8700; /* user prompt */
|
--base07: #5f8700; /* user prompt */
|
||||||
--base08: #ab4642; /* root prompt */
|
--base08: #ab4642; /* root prompt */
|
||||||
--base09: #dc9656;
|
--base09: #dc9656;
|
||||||
--base0A: #f7ca88; /* highlight */
|
--base0A: #f7ca88; /* highlight */
|
||||||
--base0B: #772a28; /* logo */
|
--base0B: #682523; /* logo */
|
||||||
--base0C: #ab2321; /* hover */
|
--base0C: #ab2321; /* hover */
|
||||||
--base0D: #c45a5a; /* link */
|
--base0D: #d36060; /* link */
|
||||||
--base0E: #ba8baf;
|
--base0E: #ba8baf;
|
||||||
--base0F: #a16946;
|
--base0F: #a16946;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue