From 8607603eb9706ddc36211dc06e416a7901683394 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Sat, 16 May 2026 00:32:45 +0100 Subject: [PATCH 01/12] feat(posts): Convert to typst; update style --- Makefile | 41 +- index.html | 307 +++----------- posts/2023/_refs.yaml | 136 ++++++ .../2023/jb-to-vim.typ | 225 +++++----- posts/2024/_refs.yaml | 227 ++++++++++ posts/2024/chaser-bootable-win-usb.typ | 78 ++++ .../2024/chaser-vim-91-debian.typ | 41 +- .../2024/pyproject-guide.typ | 186 ++++----- .../2024/vim-as-data-ide.typ | 57 +-- posts/2025/_refs.yaml | 30 ++ .../2025/praising-uv.typ | 69 ++-- posts/2026/_refs.yaml | 44 ++ .../2026/make-ci.typ | 40 +- .../2026/secret-core-rewrite.typ | 83 ++-- posts/template.typ | 35 ++ static/assets/favicon.svg | 7 - static/assets/style.css | 389 ------------------ static/blogs/20240707-docker-to-kubernetes.md | 9 - .../blogs/20241129-chaser-bootable-win-usb.md | 75 ---- .../archivo-black-v23-latin-regular.woff2 | Bin 18604 -> 0 bytes .../google-sans-code-v14-latin-300.woff2 | Bin 11804 -> 0 bytes static/fonts/raleway-v37-latin-300.woff2 | Bin 22436 -> 0 bytes .../fonts/raleway-v37-latin-300italic.woff2 | Bin 22776 -> 0 bytes static/fonts/raleway-v37-latin-500.woff2 | Bin 22004 -> 0 bytes static/fonts/raleway-v37-latin-italic.woff2 | Bin 22720 -> 0 bytes static/fonts/raleway-v37-latin-regular.woff2 | Bin 22408 -> 0 bytes style.css | 176 ++++++++ 27 files changed, 1179 insertions(+), 1076 deletions(-) create mode 100644 posts/2023/_refs.yaml rename static/blogs/20230915-jb-to-vim.md => posts/2023/jb-to-vim.typ (78%) create mode 100644 posts/2024/_refs.yaml create mode 100644 posts/2024/chaser-bootable-win-usb.typ rename static/blogs/20240406-chaser-vim-91-debian.md => posts/2024/chaser-vim-91-debian.typ (56%) rename static/blogs/20240627-pyproject-guide.md => posts/2024/pyproject-guide.typ (81%) rename static/blogs/20240405-vim-as-data-ide.md => posts/2024/vim-as-data-ide.typ (84%) create mode 100644 posts/2025/_refs.yaml rename static/blogs/20250411-praising-uv.md => posts/2025/praising-uv.typ (81%) create mode 100644 posts/2026/_refs.yaml rename static/blogs/20260311-make-ci.md => posts/2026/make-ci.typ (80%) rename static/blogs/20260302-rewrote-core.md => posts/2026/secret-core-rewrite.typ (82%) create mode 100644 posts/template.typ delete mode 100644 static/assets/favicon.svg delete mode 100644 static/assets/style.css delete mode 100644 static/blogs/20240707-docker-to-kubernetes.md delete mode 100644 static/blogs/20241129-chaser-bootable-win-usb.md delete mode 100644 static/fonts/archivo-black-v23-latin-regular.woff2 delete mode 100644 static/fonts/google-sans-code-v14-latin-300.woff2 delete mode 100644 static/fonts/raleway-v37-latin-300.woff2 delete mode 100644 static/fonts/raleway-v37-latin-300italic.woff2 delete mode 100644 static/fonts/raleway-v37-latin-500.woff2 delete mode 100644 static/fonts/raleway-v37-latin-italic.woff2 delete mode 100644 static/fonts/raleway-v37-latin-regular.woff2 create mode 100644 style.css diff --git a/Makefile b/Makefile index e931459..06bfa28 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,44 @@ +SOURCES := $(shell find posts -mindepth 2 -name "*.typ") +POSTS := $(addprefix dist/, $(notdir $(SOURCES:.typ=.html))) + +.PHONY: bundle +bundle: dist/index.html $(POSTS) + .PHONY: clean clean: @rm -rf dist -.PHONY: bundle -bundle: clean +.PHONY: dist +dist: @mkdir -p dist - @cp -r static dist/ - @cp index.html dist/ - @cp robots.txt dist/ + @cp style.css dist/ + +dist/%.html: posts/*/%.typ | dist + @typst compile --features html --format html --root ../.. "$<" "$@.tmp" + $(eval TITLE := $(shell grep 'head:' "$<" | head -n 1 | cut -d'"' -f2)) + @echo "" > $@ + @echo "" >> $@ + @echo "$(TITLE)" >> $@ + @sed -n '/
- -

- SOLC - DOT - UK - // - Personal - website - of - Sol - Cotton: - Data - Engineer; - Maker - of - Noise - Experience - Writing - Recording - GitHub - LinkedIn - _ -

-

SOLC DOT UK _

+

-----------------------------------------

+

--- sol cotton --------------------------

+

-----------------------------------------

+

-----------------------------------------

+

-------------------------solc.uk---------

+

-----------------------------------------

+
-
-

- WORK EXPERIENCE // Many years of Data Engineering Backend Engineering - Cloud Engineering DevOps Systems Architecture CI/CD Pipelines Server Management - (Inc. Home Kubernetes Cluster) Golang Python (Postgre)SQL GCP AWS Terraform Docker -

-
-
-

- DEVSJC BLOGS // Thoughts and experiences in Programming and Elsewhere; Long Form, Short Form (Chasers) Written by hand not by AI (otherwise why bother) -

+

london, uk

+
+

BLOGS

+
+
+

WORK EXPERIENCE

+
+

+ Many years of: Data Engineering Backend Engineering Cloud Engineering + DevOps Systems Architecture CI/CD Pipelines Server Management + (Inc. Home Kubernetes Cluster) Golang Python (Postgre)SQL GCP AWS Terraform Docker +

+
+

2022 > openclimatefix >>> DATA ENGINEER

+

2020 > auden >>>>>>>>>>> DATA ENGINEER

+

2019 > dunnhumby >>>>> JUNIOR ENGINEER

+
+ +
-

- FACE THE MUSIC // - The State Pension - : Drums -

+

MUSIC

+
+

the state pension

+

soundcloud.com/thestatepension

+
+

sbebs

+

youtube.com/@sbebs

+
+ +
+

* * *

+
+

GITHUB

+

github.com/devsjc

+
+

LINKEDIN

+

linkedin.com/in/solcotton

+
+

EMAIL

+

hi.site@solc.uk

+
+

* * *

+
+

(c) Sol Cotton

diff --git a/posts/template.typ b/posts/template.typ index e034b74..a4f1ef4 100644 --- a/posts/template.typ +++ b/posts/template.typ @@ -13,11 +13,12 @@ description: description, keywords: keywords, ) + set raw(theme: none) title() if sub != none { - text(style: "italic")[ #sub \/\/ \ ] + heading(level: 4)[ #sub \/\/ \ ] } let author-string = if type(author) == str { @@ -29,7 +30,6 @@ } heading(level: 3)[#date • By #author-string] - line(length: 100%, stroke: 0.5pt) body } diff --git a/style.css b/style.css deleted file mode 100644 index c37dc64..0000000 --- a/style.css +++ /dev/null @@ -1,196 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Lato:ital@0;1&family=Space+Grotesk:wght@700&family=Space+Mono&display=swap'); - -*, *::before, *::after { - box-sizing: border-box; -} - -body, body.post { - font-family: 'Space Grotesk', Helvetica, Arial, sans-serif; - font-size: 18px; - font-weight: 700; - margin: 0; - - --background-col: #050505; - --shade-col: rgb(17, 17, 17); - --text-col: rgb(178, 178, 178); - --tint-col: rgb(208, 208, 208); - --accent-col: #ff00c3; -} - -main { - display: grid; - grid-template-columns: minmax(0, 1fr); - grid-template-rows: 100vh auto auto auto; - transition: 200ms ease-in-out; - width: 100vw; - min-height: 100vh; - overflow-x: hidden; - overflow-y: auto; -} - -header { - background-color: var(--background-col); - display: flex; - justify-content: center; - align-items: center; - padding: 2rem; - border-bottom: 1px solid var(--shade-col); - color: var(--text-col); - border-bottom: 2px solid var(--shade-col); -} -header > div { - opacity: 1; - max-width: 800px; - flex-wrap: wrap; - gap: 0.2em 0.3em; -} -header > nav, header > a { - display: none; - text-decoration: none; -} - -section { - background-color: var(--background-col); - color: var(--text-col); - display: none; - align-items: center; - padding: 2rem; - flex-direction: column; -} -section > div { - opacity: 1; - max-width: 800px; - flex-wrap: wrap; - gap: 0.2em 0.3em; -} -section:target { - display: flex; -} - -/* When a section is targeted, only show the in the header and hide the rest */ -main:has(section:target) { - grid-template-rows: 6vh auto 0vh 0vh; -} -main:has(section:target) header { - overflow: hidden; - padding: 0; -} -main:has(section:target) header > div { - display: none; -} -main:has(section:target) header > a { - display: inline; - color: var(--tint-col); - width: 100%; - text-align: center; -} -main:has(section:target) header > a:hover { - text-decoration: none; -} -ul { - max-width: 800px; - width: 100%; - list-style: none; - padding: 0; -} -li > h3 { - margin-bottom: 5px; -} -li > time { - font-size: 0.8rem; - color: var(--text-col); -} - -/* Likewise, when a blog post is targeted */ -body.post main { - grid-template-rows: 6vh auto !important; - font-family: 'Lato', Helvetica, Arial, sans-serif; -} -body.post header { - overflow: hidden; - padding: 0; -} -body.post header > div { - display: none; -} -body.post header > a { - display: inline; - color: var(--tint-col); - width: 100%; - text-align: center; -} -body.post section { - display: flex; -} -article { - max-width: 800px; - width: 100%; - line-height: 1.6; - font-weight: 400; -} -article img { max-width: 100%; } -article pre { - overflow-x: auto; - border: 1px solid var(--text-col); - background: var(--shade-col); - padding: 1rem; - font-family: 'Space Mono', monospace; - font-size: .875rem; - font-weight: 400; - max-width: 100%; -} - -/*----- TYPOGRAPHY -----*/ -h1 { - font-size: 42px; - letter-spacing: -0.05em; - line-height: 1.1; -} -h1 > span { - padding: 0 5px; - animation: flash 0.15s steps(1) forwards; - animation-delay: var(--d); -} -a { - text-decoration: none; - color: inherit; -} -a:hover { - text-decoration: underline; -} - -/*----- ANIMATION -----*/ -@keyframes flash { - 0% { - opacity: 1; - color: transparent; - } - 50% { - opacity: 1; - color: var(--accent-col); - } - 100% { - opacity: 1; - color: var(--tint-col); - } -} - -.cursor { - opacity: 0; - color: var(--accent-col); - animation: - flash 0.1s steps(1) forwards, - blink 0.8s step-end infinite; - animation-delay: var(--d), var(--d); -} - -@keyframes blink { - 0% { opacity: 1; color: var(--accent-col); } - 50% { opacity: 0; color: var(--accent-col); } -} - -@media only screen and (max-width: 680px) { - h1 { font-size: 30px; } - body { font-size: 16px;} - a { text-decoration: underline; } -} From 1f9333ab83fa506ab9044c7aa5e63e16b5619672 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:49:19 +0100 Subject: [PATCH 05/12] fix(fix): fix container --- .github/workflows/build.yml | 3 +++ Makefile | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index feef3d4..a99237d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,6 +22,9 @@ jobs: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + - uses: typst-community/setup-typst@a3ced27cc8dc211a23fe48005eaea8ac9df9400f # v5.1.0 + - name: Log in to the Container registry uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: diff --git a/Makefile b/Makefile index fcd305a..ad61528 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ dist/index.html: index.html $(SOURCES) | dist title=$$(grep 'head:' "$$file" | head -n 1 | cut -d'"' -f2); \ date=$$(grep 'date:' "$$file" | head -n 1 | cut -d'"' -f2); \ bname=$$(basename "$$file" .typ); \ - fmt_date=$$(python3 -c "from datetime import datetime; print(datetime.strptime('$$date', '%Y-%m-%d').strftime('%d %b'))"); \ + fmt_date=$$(uv run python -c "from datetime import datetime; print(datetime.strptime('$$date', '%Y-%m-%d').strftime('%d %b'))"); \ echo "$$date|
  • $$title
  • " >> dist/blog_list.tmp; \ done @sort -r dist/blog_list.tmp | cut -d'|' -f2 > dist/blog_list_sorted.tmp From 7594de93e0448a44e15a5ded19be83a70d1963b2 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:52:42 +0100 Subject: [PATCH 06/12] fix: fix --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a99237d..43bec2c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - - uses: typst-community/setup-typst@a3ced27cc8dc211a23fe48005eaea8ac9df9400f # v5.1.0 + - uses: typst-community/setup-typst@v5 - name: Log in to the Container registry uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 From 2312285b7dc3334f04902832843693f8d59a0abc Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:56:17 +0100 Subject: [PATCH 07/12] fix: fix --- .github/workflows/build.yml | 3 --- Containerfile | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 43bec2c..feef3d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,9 +22,6 @@ jobs: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - - uses: typst-community/setup-typst@v5 - - name: Log in to the Container registry uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: diff --git a/Containerfile b/Containerfile index 2a83121..16282e6 100644 --- a/Containerfile +++ b/Containerfile @@ -1226,7 +1226,7 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # FROM alpine:3.13.2 AS bundler -RUN apk add --no-cache make +RUN apk add --no-cache make typst uv COPY . . From d90763535f2167a86ec1ef72f22301dec0c71dc2 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Mon, 22 Jun 2026 23:58:27 +0100 Subject: [PATCH 08/12] fix: fix --- Containerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 16282e6..68eec88 100644 --- a/Containerfile +++ b/Containerfile @@ -1226,7 +1226,10 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # FROM alpine:3.13.2 AS bundler -RUN apk add --no-cache make typst uv +RUN apk add --no-cache make + +RUN echo "https://alpinelinux.org(cut -d'.' -f1,2 /etc/apk/os-release)/community" >> /etc/apk/repositories && \ + apk add --no-cache typst uv COPY . . From e1fdcc226aaf8f6f311a52bf457891a0e32cf333 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Tue, 23 Jun 2026 00:00:31 +0100 Subject: [PATCH 09/12] fix: fix --- Containerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Containerfile b/Containerfile index 68eec88..0c8612b 100644 --- a/Containerfile +++ b/Containerfile @@ -1226,10 +1226,9 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # FROM alpine:3.13.2 AS bundler -RUN apk add --no-cache make +RUN sudo setup-apkrepos -c -1 +RUN apk add --no-cache make uv typst -RUN echo "https://alpinelinux.org(cut -d'.' -f1,2 /etc/apk/os-release)/community" >> /etc/apk/repositories && \ - apk add --no-cache typst uv COPY . . From e4816d2660238bff03569045a37add4645e74a45 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Tue, 23 Jun 2026 00:01:17 +0100 Subject: [PATCH 10/12] fix: fix --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 0c8612b..64f6078 100644 --- a/Containerfile +++ b/Containerfile @@ -1226,7 +1226,7 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # FROM alpine:3.13.2 AS bundler -RUN sudo setup-apkrepos -c -1 +RUN setup-apkrepos -c -1 RUN apk add --no-cache make uv typst From 402a945e7f9faba9d68e39610a0d323abab3f7ed Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Tue, 23 Jun 2026 00:06:51 +0100 Subject: [PATCH 11/12] fix: fix --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 64f6078..153f5ea 100644 --- a/Containerfile +++ b/Containerfile @@ -1226,7 +1226,7 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # FROM alpine:3.13.2 AS bundler -RUN setup-apkrepos -c -1 +RUN sed -i '/community/s/^#//' /etc/apk/repositories RUN apk add --no-cache make uv typst From 7c25d6f2a4ea31384688270408289f6961f45656 Mon Sep 17 00:00:00 2001 From: devsjc <47188100+devsjc@users.noreply.github.com> Date: Tue, 23 Jun 2026 00:10:50 +0100 Subject: [PATCH 12/12] fix: fix --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 153f5ea..be1d608 100644 --- a/Containerfile +++ b/Containerfile @@ -1224,7 +1224,7 @@ RUN du -h -d0 /busybox/_install/bin/busybox # -- Bundle the static files -- # -FROM alpine:3.13.2 AS bundler +FROM alpine:3.24 AS bundler RUN sed -i '/community/s/^#//' /etc/apk/repositories RUN apk add --no-cache make uv typst