summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--blogs/2026-10-09-simple-made-easy.md2
-rwxr-xr-xdeploy.sh27
-rw-r--r--public/footnotes.js2
-rw-r--r--public/my_uptime.js2
-rw-r--r--public/scrollbar.js21
-rw-r--r--public/shell.js75
-rw-r--r--public/styles/fonts/LowresPixel-Regular.woffbin0 -> 10756 bytes
-rw-r--r--public/styles/fonts/LowresPixel.css8
-rw-r--r--public/styles/fonts/Monocraft.css18
-rw-r--r--public/styles/main.css14
-rw-r--r--public/styles/style.css90
-rw-r--r--website.go196
-rw-r--r--website.templ96
-rw-r--r--website_templ.go973
15 files changed, 1137 insertions, 389 deletions
diff --git a/.gitignore b/.gitignore
index c7a2302..08f1d31 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,5 @@ pnpm-debug.log*
# jetbrains setting folder
.idea/
+
+website
diff --git a/blogs/2026-10-09-simple-made-easy.md b/blogs/2026-10-09-simple-made-easy.md
index 9399da0..8f0fd1b 100644
--- a/blogs/2026-10-09-simple-made-easy.md
+++ b/blogs/2026-10-09-simple-made-easy.md
@@ -17,7 +17,7 @@ How I discovered the talk: https://www.youtube.com/watch?v=8eXiWkPSb50
As a non-native English speaker, I always treated "easy" and "simple" and "complex" and "hard" as
just synonyms to each other, but there is actually a very important distinction between them.
-Simple <-> Complex
+Simple <-> Complex
Easy <-> Hard
Simple and Complex come from Latin, where Complex used to mean braid, as in many interleaved things
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 0000000..7953b10
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+SERVER="website@kyren.codes"
+REMOTE_DIR="/var/lib/website"
+
+echo "Generating Tailwind and Templ..."
+
+templ generate
+tailwindcss -i ./public/styles/main.css -o ./public/styles/style.css
+
+echo "Cross compiling Golang binary..."
+GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o website .
+
+echo "Copying binary to server..."
+rsync -avzP --delete website ${SERVER}:${REMOTE_DIR}/website.new
+
+echo "Swapping to new binary"
+ssh ${SERVER} << 'EOF'
+ cp /var/lib/website/website /var/lib/website/website.old 2>/dev/null || true
+ mv /var/lib/website/website.new /var/lib/website/website
+ chmod +x /var/lib/website/website
+ systemctl --user restart website || sudo systemctl restart website
+ # rm /var/lib/website/website.old
+EOF
+
+echo "Finished deploying new binary"
diff --git a/public/footnotes.js b/public/footnotes.js
index 57ded98..96a9400 100644
--- a/public/footnotes.js
+++ b/public/footnotes.js
@@ -8,7 +8,7 @@ const SIDENOTES = {
readingWidth: null, // max width of the post text, null = no cap
};
-document.addEventListener("DOMContentLoaded", () => {
+document.addEventListener("htmx:load", () => {
const area = document.querySelector("[data-scroll-area]");
const article = area?.querySelector("article");
if (!area || !article) return;
diff --git a/public/my_uptime.js b/public/my_uptime.js
index 1fdb457..b5f3ca2 100644
--- a/public/my_uptime.js
+++ b/public/my_uptime.js
@@ -13,7 +13,7 @@ async function updateUptime() {
}
// Run on page load after all DOM elements loaded
-document.addEventListener("DOMContentLoaded", () => {
+document.addEventListener("htmx:load", () => {
updateUptime();
setInterval(updateUptime, 5 * 1000); // in ms
});
diff --git a/public/scrollbar.js b/public/scrollbar.js
index 2218b55..b297d76 100644
--- a/public/scrollbar.js
+++ b/public/scrollbar.js
@@ -1,4 +1,8 @@
function initScrollbox(box) {
+ // Guard against double-initialization
+ if (box.dataset.initialized) return;
+ box.dataset.initialized = "true";
+
const area = box.querySelector("[data-scroll-area]");
const track = box.querySelector("[data-scroll-track]");
const thumb = box.querySelector("[data-scroll-thumb]");
@@ -51,23 +55,26 @@ function initScrollbox(box) {
document.querySelectorAll("[data-scrollbox]").forEach(initScrollbox);
-// Vim style j/k scrolling
+document.addEventListener("htmx:afterSettle", () => {
+ document.querySelectorAll("[data-scrollbox]").forEach(initScrollbox);
+});
+
document.addEventListener("keydown", (e) => {
- // Don't scroll in input elements
- const tag = document.activeElement.tagName;
+ const tag = document.activeElement?.tagName;
if (
["INPUT", "TEXTAREA", "SELECT"].includes(tag) ||
- document.activeElement.isContentEditable
+ document.activeElement?.isContentEditable
) {
return;
}
- // Only work for "j" and "k", no ctrl/alt/shift
if (e.ctrlKey || e.altKey || e.metaKey) return;
+ if (e.key !== "j" && e.key !== "k") return;
- const dir = key === "j" ? step : -step;
- const scrollTarget = document.scrollingElement || document.documentElement;
const scrollAmount = 100; // in pixels
+ const dir = e.key === "j" ? scrollAmount : -scrollAmount;
+ const scrollTarget = document.scrollingElement || document.documentElement;
+
if (scrollTarget && scrollTarget.scrollHeight > scrollTarget.clientHeight) {
scrollTarget.scrollBy({ top: dir, behavior: "auto" });
} else {
diff --git a/public/shell.js b/public/shell.js
new file mode 100644
index 0000000..3f3aef8
--- /dev/null
+++ b/public/shell.js
@@ -0,0 +1,75 @@
+document.addEventListener("htmx:load", () => {
+ const shell = document.querySelector("[data-shell]");
+
+ if (shell) {
+ const area = shell.closest("[data-scroll-area]");
+ const history = shell.querySelector("#shell-history");
+ const input = shell.querySelector("[data-shell-input]");
+ const caret = shell.querySelector("[data-shell-caret]");
+ let busy = false;
+
+ const updateCaret = () => {
+ const pos = input.selectionStart ?? input.value.length;
+ caret.style.left = `calc(${pos}ch - ${input.scrollLeft}px)`;
+ caret.textContent = input.value[pos] ?? "\u00a0";
+ caret.style.animation = "none"; // restart the blink so the caret is solid while typing
+ void caret.offsetWidth;
+ caret.style.animation = "";
+ };
+
+ const snapToBottom = () => {
+ area.scrollTop = area.scrollHeight;
+ };
+
+ const run = async (cmd) => {
+ busy = true;
+ try {
+ const res = await fetch("/shell/run", {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: new URLSearchParams({ cmd }),
+ });
+ const data = await res.json();
+ if (data.clear) history.replaceChildren();
+ if (data.html) history.insertAdjacentHTML("beforeend", data.html);
+ if (data.vars) {
+ for (const [key, value] of Object.entries(data.vars)) {
+ document.documentElement.style.setProperty(`--${key}`, value);
+ }
+ }
+ } catch {
+ const el = document.createElement("p");
+ el.textContent = "request failed";
+ history.append(el);
+ } finally {
+ busy = false;
+ snapToBottom();
+ }
+ };
+
+ input.addEventListener("keydown", (e) => {
+ if (e.key !== "Enter") return;
+ e.preventDefault();
+ const cmd = input.value.trim();
+ if (!cmd || busy) return;
+ input.value = "";
+ updateCaret();
+ run(cmd);
+ });
+
+ for (const event of ["input", "keyup", "click", "focus"]) {
+ input.addEventListener(event, updateCaret);
+ }
+ document.addEventListener("selectionchange", () => {
+ if (document.activeElement === input) updateCaret();
+ });
+
+ area.addEventListener("click", () => {
+ if (!getSelection().toString()) input.focus({ preventScroll: true });
+ });
+
+ input.focus({ preventScroll: true });
+ updateCaret();
+ snapToBottom();
+ }
+});
diff --git a/public/styles/fonts/LowresPixel-Regular.woff b/public/styles/fonts/LowresPixel-Regular.woff
new file mode 100644
index 0000000..a1b368a
--- /dev/null
+++ b/public/styles/fonts/LowresPixel-Regular.woff
Binary files differ
diff --git a/public/styles/fonts/LowresPixel.css b/public/styles/fonts/LowresPixel.css
new file mode 100644
index 0000000..ae4f1d3
--- /dev/null
+++ b/public/styles/fonts/LowresPixel.css
@@ -0,0 +1,8 @@
+@font-face {
+ font-family: "LowerPixelRegular";
+ font-style: normal;
+ font-weight: normal;
+ src:
+ local("LowerPixelRegular"),
+ url("LowresPixel-Regular.woff") format("woff");
+}
diff --git a/public/styles/fonts/Monocraft.css b/public/styles/fonts/Monocraft.css
index df2874e..af7b397 100644
--- a/public/styles/fonts/Monocraft.css
+++ b/public/styles/fonts/Monocraft.css
@@ -3,106 +3,124 @@
src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype");
font-weight: 100;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype");
font-weight: 100;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype");
font-weight: 200;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype");
font-weight: 200;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Light.ttf") format("truetype");
font-weight: 300;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Light-Italic.ttf") format("truetype");
font-weight: 300;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft.ttf") format("truetype");
font-weight: 400;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype");
font-weight: 400;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft.ttf") format("truetype");
font-weight: 500;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype");
font-weight: 500;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-SemiBold.ttf") format("truetype");
font-weight: 600;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-SemiBold-Italic.ttf") format("truetype");
font-weight: 600;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Bold.ttf") format("truetype");
font-weight: 700;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Bold-Italic.ttf") format("truetype");
font-weight: 700;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black.ttf") format("truetype");
font-weight: 800;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype");
font-weight: 800;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black.ttf") format("truetype");
font-weight: 900;
font-style: normal;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype");
font-weight: 900;
font-style: italic;
+ size-adjust: 90%; /* Adjust to JetBrainsMono width, 0.6 / 0.6666 = 0.9 */
}
diff --git a/public/styles/main.css b/public/styles/main.css
index 2c44266..f7539ee 100644
--- a/public/styles/main.css
+++ b/public/styles/main.css
@@ -1,6 +1,7 @@
@import "./fonts/Inter/inter.css";
@import "./fonts/JetBrainsMono.css";
@import "./fonts/Monocraft.css";
+@import "./fonts/LowresPixel.css";
@layer theme, base, components, utilities;
@import "tailwindcss/theme.css" layer(theme);
@@ -260,3 +261,16 @@ body {
transform: scale(1.03);
}
}
+
+@keyframes blink {
+ 50% {
+ opacity: 0;
+ }
+}
+
+[data-shell-caret] {
+ animation: blink 1.1s steps(1) infinite;
+}
+[data-shell-prompt]:not(:focus-within) [data-shell-caret] {
+ visibility: hidden;
+}
diff --git a/public/styles/style.css b/public/styles/style.css
index 4aff75b..76bf2a1 100644
--- a/public/styles/style.css
+++ b/public/styles/style.css
@@ -523,108 +523,132 @@
src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype");
font-weight: 100;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype");
font-weight: 100;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight.ttf") format("truetype");
font-weight: 200;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-ExtraLight-Italic.ttf") format("truetype");
font-weight: 200;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Light.ttf") format("truetype");
font-weight: 300;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Light-Italic.ttf") format("truetype");
font-weight: 300;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft.ttf") format("truetype");
font-weight: 400;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype");
font-weight: 400;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft.ttf") format("truetype");
font-weight: 500;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Italic.ttf") format("truetype");
font-weight: 500;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-SemiBold.ttf") format("truetype");
font-weight: 600;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-SemiBold-Italic.ttf") format("truetype");
font-weight: 600;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Bold.ttf") format("truetype");
font-weight: 700;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Bold-Italic.ttf") format("truetype");
font-weight: 700;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black.ttf") format("truetype");
font-weight: 800;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype");
font-weight: 800;
font-style: italic;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black.ttf") format("truetype");
font-weight: 900;
font-style: normal;
+ size-adjust: 90%;
}
@font-face {
font-family: "Monocraft";
src: url("/public/fonts/Monocraft-Black-Italic.ttf") format("truetype");
font-weight: 900;
font-style: italic;
+ size-adjust: 90%;
+}
+@font-face {
+ font-family: "LowerPixelRegular";
+ font-style: normal;
+ font-weight: normal;
+ src: local("LowerPixelRegular"), url("LowresPixel-Regular.woff") format("woff");
}
@layer theme, base, components, utilities;
@layer theme {
@@ -796,6 +820,9 @@
}
}
@layer utilities {
+ .pointer-events-none {
+ pointer-events: none;
+ }
.invisible {
visibility: hidden;
}
@@ -817,6 +844,9 @@
.inset-x-\[0\.3rem\] {
inset-inline: 0.3rem;
}
+ .inset-y-0 {
+ inset-block: 0px;
+ }
.top-1\/2 {
top: calc(1 / 2 * 100%);
}
@@ -1427,6 +1457,9 @@
.w-8 {
width: calc(var(--spacing) * 8);
}
+ .w-\[1ch\] {
+ width: 1ch;
+ }
.w-\[30\%\] {
width: 30%;
}
@@ -1467,10 +1500,10 @@
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
- .scale-150 {
- --tw-scale-x: 150%;
- --tw-scale-y: 150%;
- --tw-scale-z: 150%;
+ .scale-135 {
+ --tw-scale-x: 135%;
+ --tw-scale-y: 135%;
+ --tw-scale-z: 135%;
scale: var(--tw-scale-x) var(--tw-scale-y);
}
.transform {
@@ -1542,6 +1575,9 @@
.gap-\[1ch\] {
gap: 1ch;
}
+ .gap-\[1rem\] {
+ gap: 1rem;
+ }
.gap-x-4 {
column-gap: calc(var(--spacing) * 4);
}
@@ -1684,6 +1720,9 @@
.bg-\(--secondary\) {
background-color: var(--secondary);
}
+ .bg-\(--text\) {
+ background-color: var(--text);
+ }
.bg-\[var\(--background\)\] {
background-color: var(--background);
}
@@ -1702,6 +1741,9 @@
background-color: color-mix(in oklab, var(--color-black) 30%, transparent);
}
}
+ .bg-transparent {
+ background-color: transparent;
+ }
.bg-white\/2 {
background-color: color-mix(in srgb, #fff 2%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -1873,15 +1915,15 @@
.text-\[85\%\] {
font-size: 85%;
}
- .text-\[90\%\] {
- font-size: 90%;
- }
.text-\[95\%\] {
font-size: 95%;
}
.text-\[110\%\] {
font-size: 110%;
}
+ .text-\[120\%\] {
+ font-size: 120%;
+ }
.text-\[130\%\] {
font-size: 130%;
}
@@ -1892,6 +1934,10 @@
--tw-leading: 1.7;
line-height: 1.7;
}
+ .leading-\[1\.32\] {
+ --tw-leading: 1.32;
+ line-height: 1.32;
+ }
.leading-\[normal\] {
--tw-leading: normal;
line-height: normal;
@@ -1914,6 +1960,9 @@
.whitespace-nowrap {
white-space: nowrap;
}
+ .whitespace-pre {
+ white-space: pre;
+ }
.text-\(--accent\) {
color: var(--accent);
}
@@ -1992,6 +2041,9 @@
.text-\[\#a34eeb\] {
color: #a34eeb;
}
+ .text-\[\#ffffff\] {
+ color: #ffffff;
+ }
.text-\[\%v\] {
color: %v;
}
@@ -2007,6 +2059,9 @@
.no-underline {
text-decoration-line: none;
}
+ .caret-transparent {
+ caret-color: transparent;
+ }
.opacity-0 {
opacity: 0%;
}
@@ -2026,6 +2081,10 @@
--tw-duration: 150ms;
transition-duration: 150ms;
}
+ .outline-none {
+ --tw-outline-style: none;
+ outline-style: none;
+ }
.select-text {
-webkit-user-select: text;
user-select: text;
@@ -2071,6 +2130,12 @@
background-color: color-mix(in oklab, var(--primary) 25%, transparent) !important;
}
}
+ .group-data-\[copied\]\/copy\:block:is(:where(.group\/copy)[data-copied] *) {
+ display: block;
+ }
+ .group-data-\[copied\]\/copy\:hidden:is(:where(.group\/copy)[data-copied] *) {
+ display: none;
+ }
.after\:absolute::after {
content: var(--tw-content);
position: absolute;
@@ -2487,6 +2552,17 @@ body {
transform: scale(1.03);
}
}
+@keyframes blink {
+ 50% {
+ opacity: 0;
+ }
+}
+[data-shell-caret] {
+ animation: blink 1.1s steps(1) infinite;
+}
+[data-shell-prompt]:not(:focus-within) [data-shell-caret] {
+ visibility: hidden;
+}
@property --tw-translate-x {
syntax: "*";
inherits: false;
diff --git a/website.go b/website.go
index b54030c..b6c9af3 100644
--- a/website.go
+++ b/website.go
@@ -7,13 +7,16 @@ import (
"encoding/json"
"errors"
"fmt"
+ "html"
"html/template"
"io/fs"
"log"
+ "maps"
"net/http"
"os"
"regexp"
"slices"
+ "sort"
"strings"
"sync"
"time"
@@ -25,7 +28,7 @@ import (
"github.com/yuin/goldmark/ast"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
- "github.com/yuin/goldmark/renderer/html"
+ gmhtml "github.com/yuin/goldmark/renderer/html"
"github.com/yuin/goldmark/text"
"github.com/yuin/goldmark/util"
"gopkg.in/yaml.v3"
@@ -189,12 +192,39 @@ var md = goldmark.New(
}),
),
),
- goldmark.WithRendererOptions(html.WithUnsafe()),
+ goldmark.WithRendererOptions(gmhtml.WithUnsafe()),
goldmark.WithParserOptions(
parser.WithASTTransformers(util.Prioritized(externalLinks{}, 100)),
),
)
+var tagRe = regexp.MustCompile(`<[^>]*>`)
+
+func ligatures(html string) string {
+ var out strings.Builder
+ depth, last := 0, 0
+ apply := func(s string) string {
+ if depth == 0 {
+ return arrows.Replace(s)
+ }
+ return s
+ }
+ for _, loc := range tagRe.FindAllStringIndex(html, -1) {
+ out.WriteString(apply(html[last:loc[0]]))
+ tag := html[loc[0]:loc[1]]
+ switch {
+ case strings.HasPrefix(tag, "<pre"), strings.HasPrefix(tag, "<code"):
+ depth++
+ case strings.HasPrefix(tag, "</pre"), strings.HasPrefix(tag, "</code"):
+ depth--
+ }
+ out.WriteString(tag)
+ last = loc[1]
+ }
+ out.WriteString(apply(html[last:]))
+ return out.String()
+}
+
type frontmatter struct {
Title string `yaml:"title"`
Desc string `yaml:"description"`
@@ -234,7 +264,7 @@ func parseBlog(name, raw string) (Blog, error) {
if err := md.Convert([]byte(body), &buf); err != nil {
return Blog{}, err
}
- HTML := buf.String()
+ HTML := ligatures(buf.String())
slug := strings.TrimSuffix(name, ".md")
date := frontmatter.Date // frontmatter wins
@@ -321,6 +351,33 @@ func latestBlog(blogs []Blog) *Blog {
type externalLinks struct{}
+func newReplacer(pairs map[string]string) *strings.Replacer {
+ keys := make([]string, 0, len(pairs))
+ for k := range pairs {
+ keys = append(keys, k)
+ }
+ slices.SortFunc(keys, func(a, b string) int { return cmp.Compare(len(b), len(a)) })
+
+ args := make([]string, 0, len(keys)*2)
+ for _, k := range keys {
+ args = append(args, html.EscapeString(k), pairs[k]) // rendered text has < and > escaped
+ }
+ return strings.NewReplacer(args...)
+}
+
+var arrows = newReplacer(map[string]string{
+ // arrows
+ "->": "→", "<-": "←", "<->": "↔",
+ "-->": "⟶", "<--": "⟵", "<-->": "⟷",
+ "->>": "↠", "<<-": "↞", "|->": "↦",
+ "~>": "↝", "<~": "↜",
+ // double arrows
+ "=>": "⇒", "<=>": "⇔",
+ "==>": "⟹", "<==": "⟸", "<==>": "⟺",
+ // comparisons
+ ">=": "≥", "<=": "≤", "!=": "≠", "+-": "±",
+})
+
func openInNewTab(n ast.Node) {
n.SetAttributeString("target", []byte("_blank"))
n.SetAttributeString("rel", []byte("noopener noreferrer"))
@@ -346,12 +403,101 @@ func (externalLinks) Transform(doc *ast.Document, reader text.Reader, pc parser.
})
}
+type ShellResult struct {
+ Output templ.Component // nil renders nothing
+ Clear bool
+ Vars map[string]string
+ Cookies []*http.Cookie
+}
+
+type shellCommand func(r *http.Request, args []string) ShellResult
+
+var shellCommands map[string]shellCommand
+
+func init() {
+ shellCommands = map[string]shellCommand{
+ "fastfetch": func(*http.Request, []string) ShellResult { return ShellResult{Output: Fastfetch(fetchRows)} },
+ "clear": func(*http.Request, []string) ShellResult { return ShellResult{Clear: true} },
+ "help": func(*http.Request, []string) ShellResult { return ShellResult{Output: ShellHelp(shellNames())} },
+ "export": func(r *http.Request, args []string) ShellResult {
+ if len(args) == 0 {
+ return ShellResult{Output: ShellText("usage: export KEY=value")}
+ }
+ res := ShellResult{Vars: map[string]string{}}
+ var lines []string
+ for _, arg := range args {
+ key, value, ok := strings.Cut(arg, "=")
+ if !ok {
+ lines = append(lines, "export: expected KEY=value, got "+arg)
+ continue
+ }
+ value = strings.Trim(value, `"'`)
+ vars, cookie, err := setEnvVar(key, value)
+ if err != nil {
+ lines = append(lines, "export: "+err.Error())
+ continue
+ }
+ maps.Copy(res.Vars, vars)
+ res.Cookies = append(res.Cookies, cookie)
+ lines = append(lines, key+"="+value)
+ }
+ res.Output = ShellLines(lines)
+ return res
+ },
+ }
+}
+
+func setEnvVar(key, value string) (map[string]string, *http.Cookie, error) {
+ switch key {
+ case "THEME":
+ theme, ok := GetTheme(value)
+ if !ok {
+ return nil, nil, fmt.Errorf("unknown theme: %s", value)
+ }
+ return theme.Vars(), envCookie("theme", value), nil
+ case "FONT_PACK":
+ pack, ok := GetFontPack(value)
+ if !ok {
+ return nil, nil, fmt.Errorf("unknown font pack: %s", value)
+ }
+ return pack.Vars(), envCookie("font_pack", value), nil
+ default:
+ return nil, nil, fmt.Errorf("unknown variable: %s", key)
+ }
+}
+
+func envCookie(name, value string) *http.Cookie {
+ return &http.Cookie{Name: name, Value: value, Path: "/", MaxAge: 31536000, SameSite: http.SameSiteLaxMode}
+}
+
+func shellNames() []string {
+ names := make([]string, 0, len(shellCommands))
+ for name := range shellCommands {
+ names = append(names, name)
+ }
+ sort.Strings(names)
+ return names
+}
+
+func runShell(r *http.Request, line string) ShellResult {
+ fields := strings.Fields(line)
+ if len(fields) == 0 {
+ return ShellResult{}
+ }
+ run, ok := shellCommands[fields[0]]
+ if !ok {
+ return ShellResult{Output: ShellText(fields[0] + ": command not found")}
+ }
+
+ return run(r, fields[1:])
+}
+
var projects = []Project{
{
Slug: "krypton",
Title: "Krypton",
Category: "Programming Language Compiler",
- Desc: "",
+ Desc: "Krypton is a simple, high-performance, general-purpose language with C-like control designed for good programmers.",
// Icon: IconCpu("text-[#F5A670] self-center"),
Icon: IconKrypton(),
Tags: []ProjectTag{
@@ -376,6 +522,7 @@ var projects = []Project{
Icon: IconCpu("text-[#F16265]"),
Tags: []ProjectTag{
{"Zig", Color("text-[#D8C44B]")},
+ {"Raylib", Color("text-[#FFFFFF]")},
},
Links: []ProjectLink{
{IconGit("text-[#F5A670]"), "Git", "https://git.kyren.codes/kyren/cpu-vs-ai.git"},
@@ -500,7 +647,7 @@ func GetMyUptime() string {
defer myUptime.mu.RUnlock()
// If no ping received in 3 minutes, treat as offline
- if time.Since(myUptime.LastUpdate) > 1*time.Minute {
+ if time.Since(myUptime.LastUpdate) > 3*time.Minute {
return "Asleep"
}
@@ -519,7 +666,10 @@ func handleUptimePing(w http.ResponseWriter, r *http.Request) {
})
} else if r.Method == http.MethodPost {
if devMode == false {
- secretToken := os.Getenv("MY_UPTIME_TOKEN")
+ secretFile := os.Getenv("MY_UPTIME_TOKEN_FILE")
+ bytes, err := os.ReadFile(secretFile)
+ Assert(err == nil)
+ secretToken := string(bytes)
if r.Header.Get("Authorization") != "Bearer "+secretToken {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
@@ -602,7 +752,8 @@ func main() {
minecraft := FontPack{
Monospace: `Monocraft, JetBrains Mono, monospace`,
- Normal: `Monocraft, Inter, system-ui, sans-serif`,
+ // Normal: `Inter, Lower Pixel Regular, Monocraft, system-ui, sans-serif`,
+ Normal: `LowerPixelRegular, Inter, system-ui, sans-serif`,
}
SetTheme("carbonight-cat", carbonightCat)
@@ -634,10 +785,6 @@ func main() {
HomePage(currentStyle(r), latestBlog(getBlogs())).Render(r.Context(), w)
})
- mux.HandleFunc("GET /info", func(w http.ResponseWriter, r *http.Request) {
- InfoPage(currentStyle(r)).Render(r.Context(), w)
- })
-
mux.HandleFunc("GET /projects", func(w http.ResponseWriter, r *http.Request) {
ProjectsPage(currentStyle(r), projects, 2).Render(r.Context(), w)
})
@@ -655,6 +802,33 @@ func main() {
BlogPage(currentStyle(r), *blog, prev, next).Render(r.Context(), w)
})
+ mux.HandleFunc("GET /shell", func(w http.ResponseWriter, r *http.Request) {
+ ShellPage(currentStyle(r)).Render(r.Context(), w)
+ })
+
+ mux.HandleFunc("POST /shell/run", func(w http.ResponseWriter, r *http.Request) {
+ r.Body = http.MaxBytesReader(w, r.Body, 1<<10)
+ line := strings.TrimSpace(r.FormValue("cmd"))
+ if len(line) > 200 {
+ line = line[:200]
+ }
+ res := runShell(r, line)
+ for _, c := range res.Cookies {
+ http.SetCookie(w, c)
+ }
+
+ var buf bytes.Buffer
+ if res.Output != nil {
+ if err := ShellEntry(line, res.Output).Render(r.Context(), &buf); err != nil {
+ http.Error(w, "render failed", http.StatusInternalServerError)
+ return
+ }
+ }
+ w.Header().Set("Content-Type", "application/json")
+ w.Header().Set("Cache-Control", "no-store")
+ json.NewEncoder(w).Encode(map[string]any{"clear": res.Clear, "html": buf.String(), "vars": res.Vars})
+ })
+
mux.HandleFunc("GET /theme/{name}", styleHandler("theme", func(n string) (map[string]string, bool) {
theme, ok := GetTheme(n)
return theme.Vars(), ok
diff --git a/website.templ b/website.templ
index 94242ad..c86639b 100644
--- a/website.templ
+++ b/website.templ
@@ -24,7 +24,10 @@ templ HeadComponent(title string, description string) {
<script src="/public/scrollbar.js" defer></script>
<script src="/public/my_uptime.js" defer></script>
<script src="/public/footnotes.js" defer></script>
+ <script src="/public/shell.js" defer></script>
+ <link rel="preload" href="/public/styles/style.css" as="style"/>
<link rel="stylesheet" href="/public/styles/style.css"/>
+ <script src="https://unpkg.com/htmx.org@1.9.10" defer></script>
{ children... }
</head>
}
@@ -96,7 +99,12 @@ templ TerminalBorder(header string, footer string, extra string) {
}
templ CopyIcon() {
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy preview-icon"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>
+ <span class="block group-data-[copied]/copy:hidden">
+ @IconCopy("text-[#ffffff]")
+ </span>
+ <span class="hidden group-data-[copied]/copy:block">
+ @IconCheckmark("text-[#46d46c]")
+ </span>
}
templ TerminalBorderWithCopy(header string, footer string, extra string, text string, href string, showLabel bool) {
@@ -141,7 +149,7 @@ templ Nav(path string) {
<span>{ path }</span>
<span class="flex gap-[1ch]">
@NavLink("/", "home")
- for _, dir := range []string{"projects", "info", "blogs"} {
+ for _, dir := range []string{"projects", "blogs"} {
@NavLink("/"+dir, dir)
}
@NavLink("/shell", "shell")
@@ -153,7 +161,7 @@ templ TerminalLayout(style Style, path string) {
<!DOCTYPE html>
<html lang="en" style={ styleToCss(style) }>
@HeadComponent(path, "My personal website")
- <body>
+ <body hx-boost="true">
<main class="flex flex-col w-[75rem] h-[40rem] p-8 border-[0.2rem] border-(--text) overflow-hidden text-[1.125rem]">
@Nav(path)
{ children... }
@@ -183,7 +191,7 @@ templ HomePage(style Style, latestBlog *Blog) {
@TerminalBorder("Profile", "", "[--border-py:0.875rem]") {
<div class="flex items-center gap-4 h-38">
<img src="/public/favicon.svg" alt="picture" class="h-full object-cover"/>
- @CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[normal]") {
+ @CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[1.32]") {
{ fingerprint }
}
</div>
@@ -247,19 +255,6 @@ func footerClass(connected bool) string {
return style
}
-templ InfoPage(style Style) {
- @TerminalLayout(style, "/home/kyren/info.md") {
- @TerminalStack(false, "") {
- @TerminalBorder("Info", "", "") {
- <span>
- $ fastfetch
- @Fastfetch(fetchRows)
- </span>
- }
- }
- }
-}
-
type Project struct {
Slug string
Title string
@@ -402,7 +397,7 @@ templ IconArchive(color string) {
}
templ IconLink(href string, label string, extra string) {
- <a href={ templ.SafeURL(href) } target="_blank" rel="noopener noreferrer" aria-label={ label } title={ label } class={ "text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra }>
+ <a href={ templ.SafeURL(href) } target="_blank" rel="noopener noreferrer" aria-label={ label } title={ label } class={ "text-[120%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra }>
{ children... }
</a>
}
@@ -416,6 +411,18 @@ templ IconGit(color string) {
}
}
+templ IconCheckmark(color string) {
+ @Icon(color) {
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check preview-icon"><path d="M20 6 9 17l-5-5"></path></svg>
+ }
+}
+
+templ IconCopy(color string) {
+ @Icon(color) {
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy preview-icon"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>
+ }
+}
+
templ IconGithub(color string) {
@Icon(color) {
<path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path>
@@ -432,7 +439,7 @@ templ IconExternal(color string) {
}
templ IconKrypton() {
- @Icon("text-[#00f1ff] scale-150") {
+ @Icon("text-[#00f1ff] scale-135") {
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="24" height="24" fill="none" stroke="currentColor">
<!-- Outer Circle -->
<circle cx="50" cy="50" r="42" stroke-width="6"></circle>
@@ -557,7 +564,7 @@ templ ScrollBox(extra string) {
}
templ BlogsPage(style Style, blogs []Blog) {
- @TerminalLayout(style, "blogs") {
+ @TerminalLayout(style, "/home/kyren/blogs") {
@TerminalBorder("Shell", "", "mb-[1rem]") {
$ ls -lh ~/blogs
}
@@ -751,7 +758,7 @@ templ Icon(color string) {
}
templ BlogPage(style Style, blog Blog, prev *Blog, next *Blog) {
- @TerminalLayout(style, blog.Title) {
+ @TerminalLayout(style, "/home/kyren/blogs/"+blog.Slug) {
@ScrollBox("") {
@BlogItem("", blog, "mb-[1rem]")
<article class="prose select-text font-(family-name:--font-normal) text-[17.6px] leading-[1.7]">
@@ -774,3 +781,50 @@ templ BlogNav(label string, blog *Blog, extra string) {
<div></div>
}
}
+
+templ ShellPage(style Style) {
+ @TerminalLayout(style, "/bin/bash") {
+ @ScrollBox("") {
+ <div data-shell class="flex flex-col gap-[1rem]">
+ <div id="shell-history" class="flex flex-col gap-[1rem]">
+ @ShellEntry("fastfetch", Fastfetch(fetchRows))
+ </div>
+ <div data-shell-prompt class="flex gap-[1ch]">
+ <span class="shrink-0 text-(--primary)">$</span>
+ <div class="relative flex-1">
+ <input data-shell-input type="text" class="block w-full bg-transparent outline-none caret-transparent" autocomplete="off" autocapitalize="off" spellcheck="false"/>
+ <span data-shell-caret class="absolute inset-y-0 w-[1ch] flex items-center whitespace-pre bg-(--text) text-(--background) pointer-events-none"></span>
+ </div>
+ </div>
+ </div>
+ }
+ }
+}
+
+templ ShellLines(lines []string) {
+ <div class="flex flex-col">
+ for _, line := range lines {
+ <span>{ line }</span>
+ }
+ </div>
+}
+
+templ ShellEntry(cmd string, output templ.Component) {
+ @TerminalBorder("$ "+cmd, "", "") {
+ <div class="min-w-0 w-full">
+ @output
+ </div>
+ }
+}
+
+templ ShellText(text string) {
+ <p>{ text }</p>
+}
+
+templ ShellHelp(names []string) {
+ <div class="flex flex-col">
+ for _, name := range names {
+ <span>{ name }</span>
+ }
+ </div>
+}
diff --git a/website_templ.go b/website_templ.go
index 0af20ab..9af46f7 100644
--- a/website_templ.go
+++ b/website_templ.go
@@ -81,7 +81,7 @@ func HeadComponent(title string, description string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\"><meta property=\"og:type\" content=\"website\"><meta property=\"og:url\" content=\"https://kyren.codes/\"><meta property=\"og:image\" content=\"https://kyren.codes/public/image.png\"><meta property=\"og:image:alt\" content=\"a cyan sphere with a dark background\"><meta property=\"og:site_name\" content=\"Kyren's Website\"><script src=\"/public/copy.js\" defer></script><script src=\"/public/theme.js\" defer></script><script src=\"/public/scrollbar.js\" defer></script><script src=\"/public/my_uptime.js\" defer></script><script src=\"/public/footnotes.js\" defer></script><link rel=\"stylesheet\" href=\"/public/styles/style.css\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\"><meta property=\"og:type\" content=\"website\"><meta property=\"og:url\" content=\"https://kyren.codes/\"><meta property=\"og:image\" content=\"https://kyren.codes/public/image.png\"><meta property=\"og:image:alt\" content=\"a cyan sphere with a dark background\"><meta property=\"og:site_name\" content=\"Kyren's Website\"><script src=\"/public/copy.js\" defer></script><script src=\"/public/theme.js\" defer></script><script src=\"/public/scrollbar.js\" defer></script><script src=\"/public/my_uptime.js\" defer></script><script src=\"/public/footnotes.js\" defer></script><script src=\"/public/shell.js\" defer></script><link rel=\"preload\" href=\"/public/styles/style.css\" as=\"style\"><link rel=\"stylesheet\" href=\"/public/styles/style.css\"><script src=\"https://unpkg.com/htmx.org@1.9.10\" defer></script>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -145,7 +145,7 @@ func BlogItem(header string, blog Blog, extra string) templ.Component {
var templ_7745c5c3_Var8 templ.SafeURL
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/blogs/" + blog.Slug))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 43, Col: 49}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 46, Col: 49}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
if templ_7745c5c3_Err != nil {
@@ -158,7 +158,7 @@ func BlogItem(header string, blog Blog, extra string) templ.Component {
var templ_7745c5c3_Var9 string
templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(blog.Title)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 45, Col: 17}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 48, Col: 17}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
if templ_7745c5c3_Err != nil {
@@ -171,7 +171,7 @@ func BlogItem(header string, blog Blog, extra string) templ.Component {
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(blog.Desc)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 47, Col: 45}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 50, Col: 45}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
if templ_7745c5c3_Err != nil {
@@ -219,7 +219,7 @@ func Link(href string, newTab bool) templ.Component {
var templ_7745c5c3_Var12 templ.SafeURL
templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 55, Col: 28}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 58, Col: 28}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
if templ_7745c5c3_Err != nil {
@@ -353,7 +353,7 @@ func TerminalBorderForBlog(header string, footer string, extra string, enable bo
var templ_7745c5c3_Var19 string
templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(header)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 74, Col: 132}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 77, Col: 132}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
if templ_7745c5c3_Err != nil {
@@ -366,7 +366,7 @@ func TerminalBorderForBlog(header string, footer string, extra string, enable bo
var templ_7745c5c3_Var20 string
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(footer)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 75, Col: 149}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 78, Col: 149}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
if templ_7745c5c3_Err != nil {
@@ -458,7 +458,7 @@ func TerminalBorder(header string, footer string, extra string) templ.Component
var templ_7745c5c3_Var25 string
templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(header)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 92, Col: 137}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 95, Col: 137}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
if templ_7745c5c3_Err != nil {
@@ -471,7 +471,7 @@ func TerminalBorder(header string, footer string, extra string) templ.Component
var templ_7745c5c3_Var26 string
templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(footer)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 93, Col: 140}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 96, Col: 140}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
if templ_7745c5c3_Err != nil {
@@ -514,7 +514,23 @@ func CopyIcon() templ.Component {
templ_7745c5c3_Var27 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy preview-icon\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<span class=\"block group-data-[copied]/copy:hidden\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = IconCopy("text-[#ffffff]").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</span> <span class=\"hidden group-data-[copied]/copy:block\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = IconCheckmark("text-[#46d46c]").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -555,25 +571,25 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<div data-copy-scope class=\"group/copy flex w-full items-center justify-between gap-4\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<div data-copy-scope class=\"group/copy flex w-full items-center justify-between gap-4\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if href != "" {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<a href=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<a href=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var30 templ.SafeURL
templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 106, Col: 33}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 114, Col: 33}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\" class=\"wrap-anywhere\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\" class=\"wrap-anywhere\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -581,25 +597,25 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</a> ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</a> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
} else {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<span data-copy=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<span data-copy=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var31 string
templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 110, Col: 26}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 118, Col: 26}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var31)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\" class=\"cursor-pointer wrap-anywhere\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\" class=\"cursor-pointer wrap-anywhere\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -607,35 +623,35 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</span> ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</span> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "<span class=\"relative shrink-0\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<span class=\"relative shrink-0\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if showLabel {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<span class=\"hidden group-data-copied/copy:block absolute right-full top-1/2 -translate-y-1/2 mr-2 px-[0.4rem] whitespace-nowrap bg-(--background) text-(--primary)\">copied</span> ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<span class=\"hidden group-data-copied/copy:block absolute right-full top-1/2 -translate-y-1/2 mr-2 px-[0.4rem] whitespace-nowrap bg-(--background) text-(--primary)\">copied</span> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<button type=\"button\" data-copy=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<button type=\"button\" data-copy=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var32 string
templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 118, Col: 42}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 126, Col: 42}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var32)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "\" aria-label=\"copy\" class=\"block p-[0.4rem] rounded-[0.4rem] cursor-pointer transition-colors hover:bg-(--alt)/25 group-data-copied/copy:bg-(--primary)/25!\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\" aria-label=\"copy\" class=\"block p-[0.4rem] rounded-[0.4rem] cursor-pointer transition-colors hover:bg-(--alt)/25 group-data-copied/copy:bg-(--primary)/25!\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -643,7 +659,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</button></span></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</button></span></div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -678,20 +694,20 @@ func CopyPre(text string, preClass string) templ.Component {
templ_7745c5c3_Var33 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<button type=\"button\" data-copy=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<button type=\"button\" data-copy=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var34 string
templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 127, Col: 39}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 135, Col: 39}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var34)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "\" class=\"group relative shrink-0 cursor-pointer text-left rounded-[0.4rem] p-[0.4rem] -m-[0.4rem] transition-colors hover:bg-(--alt)/25 data-copied:bg-(--primary)/25! data-copied:animate-[bump_0.25s]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\" class=\"group relative shrink-0 cursor-pointer text-left rounded-[0.4rem] p-[0.4rem] -m-[0.4rem] transition-colors hover:bg-(--alt)/25 data-copied:bg-(--primary)/25! data-copied:animate-[bump_0.25s]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -700,7 +716,7 @@ func CopyPre(text string, preClass string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<pre class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "<pre class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -713,7 +729,7 @@ func CopyPre(text string, preClass string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -721,7 +737,7 @@ func CopyPre(text string, preClass string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</pre><span class=\"hidden group-data-copied:block absolute right-[0.6rem] top-[0.6rem] px-[0.4rem] bg-(--background) text-(--primary) text-[0.8rem]\">copied</span></button>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</pre><span class=\"hidden group-data-copied:block absolute right-[0.6rem] top-[0.6rem] px-[0.4rem] bg-(--background) text-(--primary) text-[0.8rem]\">copied</span></button>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -750,33 +766,33 @@ func NavLink(href string, label string) templ.Component {
templ_7745c5c3_Var37 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<a href=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<a href=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var38 templ.SafeURL
templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 136, Col: 30}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 144, Col: 30}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\" class=\"text-(--primary) hover:text-(--accent)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "\" class=\"text-(--primary) hover:text-(--accent)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var39 string
templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 136, Col: 87}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 144, Col: 87}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</a>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -805,20 +821,20 @@ func Nav(path string) templ.Component {
templ_7745c5c3_Var40 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<nav class=\"flex justify-between gap-10 p-4 mb-6 border-[0.125rem] border-(--alt) text-[1.375rem]\"><span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<nav class=\"flex justify-between gap-10 p-4 mb-6 border-[0.125rem] border-(--alt) text-[1.375rem]\"><span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var41 string
templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(path)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 141, Col: 14}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 149, Col: 14}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</span> <span class=\"flex gap-[1ch]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</span> <span class=\"flex gap-[1ch]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -826,7 +842,7 @@ func Nav(path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- for _, dir := range []string{"projects", "info", "blogs"} {
+ for _, dir := range []string{"projects", "blogs"} {
templ_7745c5c3_Err = NavLink("/"+dir, dir).Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
@@ -836,7 +852,7 @@ func Nav(path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</span></nav>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "</span></nav>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -865,20 +881,20 @@ func TerminalLayout(style Style, path string) templ.Component {
templ_7745c5c3_Var42 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<!doctype html><html lang=\"en\" style=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<!doctype html><html lang=\"en\" style=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var43 string
templ_7745c5c3_Var43, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(styleToCss(style))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 154, Col: 42}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 162, Col: 42}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -886,7 +902,7 @@ func TerminalLayout(style Style, path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "<body><main class=\"flex flex-col w-[75rem] h-[40rem] p-8 border-[0.2rem] border-(--text) overflow-hidden text-[1.125rem]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<body hx-boost=\"true\"><main class=\"flex flex-col w-[75rem] h-[40rem] p-8 border-[0.2rem] border-(--text) overflow-hidden text-[1.125rem]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -898,7 +914,7 @@ func TerminalLayout(style Style, path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</main></body></html>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</main></body></html>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -957,7 +973,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<div class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<div class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -970,7 +986,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\"><div class=\"flex flex-col min-h-0 [--border-py:0.75rem]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\"><div class=\"flex flex-col min-h-0 [--border-py:0.75rem]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -998,7 +1014,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<div class=\"flex items-center gap-4 h-38\"><img src=\"/public/favicon.svg\" alt=\"picture\" class=\"h-full object-cover\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "<div class=\"flex items-center gap-4 h-38\"><img src=\"/public/favicon.svg\" alt=\"picture\" class=\"h-full object-cover\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1017,7 +1033,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
var templ_7745c5c3_Var51 string
templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(fingerprint)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 187, Col: 21}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 195, Col: 21}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
if templ_7745c5c3_Err != nil {
@@ -1025,11 +1041,11 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var50), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = CopyPre(sshKey, "shrink-0 text-[0.675rem] leading-[1.32]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var50), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1051,7 +1067,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "contact@kyren.codes")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "contact@kyren.codes")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1085,7 +1101,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "git.kyren.codes")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "git.kyren.codes")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1125,7 +1141,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "github.com/Kyren223")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "github.com/Kyren223")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1165,7 +1181,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "Kyren223")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "Kyren223")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1187,7 +1203,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</div><div class=\"flex flex-col gap-10 min-h-0 select-text\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</div><div class=\"flex flex-col gap-10 min-h-0 select-text\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1203,7 +1219,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "<div class=\"flex gap-[1ch] text-[1rem]\"><span>Working on</span> <span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<div class=\"flex gap-[1ch] text-[1rem]\"><span>Working on</span> <span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1219,7 +1235,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "Krypton")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "Krypton")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1229,7 +1245,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</span> <span>|</span> <span>Learning Langdev & Compiler Design</span> <span>|</span> <span>Available for hire</span></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</span> <span>|</span> <span>Learning Langdev & Compiler Design</span> <span>|</span> <span>Available for hire</span></div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1251,7 +1267,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "Hi! I'm Kyren, a softwarea engineer and game developer. I love working with low level languages and learning things deeply. I am also a terminal nerd and Linux enthusiast who uses NVIM btw. And when I am not coding, I am most likely playing video games, watching Anime, or solving Rubik's cubes fast.")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "Hi! I'm Kyren, a softwarea engineer and game developer. I love working with low level languages and learning things deeply. I am also a terminal nerd and Linux enthusiast who uses NVIM btw. And when I am not coding, I am most likely playing video games, watching Anime, or solving Rubik's cubes fast.")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1265,7 +1281,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1284,7 +1300,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
var templ_7745c5c3_Var63 string
templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(sshKey)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 236, Col: 12}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 244, Col: 12}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
if templ_7745c5c3_Err != nil {
@@ -1296,7 +1312,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1318,97 +1334,6 @@ func footerClass(connected bool) string {
return style
}
-func InfoPage(style Style) templ.Component {
- return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
- return templ_7745c5c3_CtxErr
- }
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var64 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var64 == nil {
- templ_7745c5c3_Var64 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var65 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var66 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var67 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<span>$ fastfetch")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = Fastfetch(fetchRows).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "</span>")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
- templ_7745c5c3_Err = TerminalBorder("Info", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var67), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
- templ_7745c5c3_Err = TerminalStack(false, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var66), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
- templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/info.md").Render(templ.WithChildren(ctx, templ_7745c5c3_Var65), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
-}
-
type Project struct {
Slug string
Title string
@@ -1470,12 +1395,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var68 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var68 == nil {
- templ_7745c5c3_Var68 = templ.NopComponent
+ templ_7745c5c3_Var64 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var64 == nil {
+ templ_7745c5c3_Var64 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var69 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var65 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1499,12 +1424,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var70 templ.SafeURL
- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/projects/" + project.Slug))
+ var templ_7745c5c3_Var66 templ.SafeURL
+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/projects/" + project.Slug))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 314, Col: 57}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 309, Col: 57}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1512,12 +1437,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var71 string
- templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
+ var templ_7745c5c3_Var67 string
+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 314, Col: 173}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 309, Col: 173}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1525,12 +1450,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var72 string
- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
+ var templ_7745c5c3_Var68 string
+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 315, Col: 65}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 310, Col: 65}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1539,8 +1464,8 @@ func FlagshipProject(project Project, extra string) templ.Component {
return templ_7745c5c3_Err
}
for _, tag := range project.Tags {
- var templ_7745c5c3_Var73 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var73...)
+ var templ_7745c5c3_Var69 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var69...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1548,12 +1473,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var74 string
- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var73).String())
+ var templ_7745c5c3_Var70 string
+ templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var69).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var74)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var70)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1561,12 +1486,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var75 string
- templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
+ var templ_7745c5c3_Var71 string
+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 317, Col: 136}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 312, Col: 136}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1580,7 +1505,7 @@ func FlagshipProject(project Project, extra string) templ.Component {
return templ_7745c5c3_Err
}
for _, link := range project.Links {
- templ_7745c5c3_Var76 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var72 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1598,7 +1523,7 @@ func FlagshipProject(project Project, extra string) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var76), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = IconLink(link.URL, link.Label, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var72), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1607,12 +1532,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var77 string
- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
+ var templ_7745c5c3_Var73 string
+ templ_7745c5c3_Var73, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 327, Col: 55}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 322, Col: 55}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var73))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1658,12 +1583,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var78 string
- templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Value)
+ var templ_7745c5c3_Var74 string
+ templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Value)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 345, Col: 61}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 340, Col: 61}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1671,12 +1596,12 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var79 string
- templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Label)
+ var templ_7745c5c3_Var75 string
+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.JoinStringErrs(stat.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 346, Col: 47}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 341, Col: 47}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var75))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1699,7 +1624,7 @@ func FlagshipProject(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Var80 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var76 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1711,18 +1636,18 @@ func FlagshipProject(project Project, extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- var templ_7745c5c3_Var81 string
- templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Snippet)
+ var templ_7745c5c3_Var77 string
+ templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Snippet)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 356, Col: 24}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 351, Col: 24}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = CopyPre(flagship.Snippet, "text-[80%] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var80), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = CopyPre(flagship.Snippet, "text-[80%] leading-[normal]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var76), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1737,7 +1662,7 @@ func FlagshipProject(project Project, extra string) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder("", "", flagshipClasses+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var69), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder("", "", flagshipClasses+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var65), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1761,9 +1686,9 @@ func VersionTag(project Project) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var82 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var82 == nil {
- templ_7745c5c3_Var82 = templ.NopComponent
+ templ_7745c5c3_Var78 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var78 == nil {
+ templ_7745c5c3_Var78 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
if flagship.Version != "" {
@@ -1771,12 +1696,12 @@ func VersionTag(project Project) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var83 string
- templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Version)
+ var templ_7745c5c3_Var79 string
+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(flagship.Version)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 367, Col: 50}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 362, Col: 50}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var83))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1805,16 +1730,16 @@ func DownloadButton(download Download) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var84 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var84 == nil {
- templ_7745c5c3_Var84 = templ.NopComponent
+ templ_7745c5c3_Var80 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var80 == nil {
+ templ_7745c5c3_Var80 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- var templ_7745c5c3_Var85 = []any{"no-underline inline-flex items-center gap-[1ch] px-[0.6rem] py-[0.1rem] rounded-[0.4rem] border-[0.1rem] border-solid text-[85%] transition-colors",
+ var templ_7745c5c3_Var81 = []any{"no-underline inline-flex items-center gap-[1ch] px-[0.6rem] py-[0.1rem] rounded-[0.4rem] border-[0.1rem] border-solid text-[85%] transition-colors",
templ.KV("border-(--secondary)/60 text-(--secondary) hover:bg-(--secondary)/15", download.Enabled),
templ.KV("border-(--alt)/30 text-(--alt)/80 bg-white/2", !download.Enabled),
}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var85...)
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var81...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1827,12 +1752,12 @@ func DownloadButton(download Download) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var86 templ.SafeURL
- templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(download.URL))
+ var templ_7745c5c3_Var82 templ.SafeURL
+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(download.URL))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 376, Col: 37}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 371, Col: 37}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var86))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1845,12 +1770,12 @@ func DownloadButton(download Download) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var87 string
- templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var85).String())
+ var templ_7745c5c3_Var83 string
+ templ_7745c5c3_Var83, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var81).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var83)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1873,12 +1798,12 @@ func DownloadButton(download Download) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var88 string
- templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.JoinStringErrs(download.Label)
+ var templ_7745c5c3_Var84 string
+ templ_7745c5c3_Var84, templ_7745c5c3_Err = templ.JoinStringErrs(download.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 389, Col: 24}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 384, Col: 24}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var88))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var84))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1891,12 +1816,12 @@ func DownloadButton(download Download) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var89 string
- templ_7745c5c3_Var89, templ_7745c5c3_Err = templ.JoinStringErrs(download.Size)
+ var templ_7745c5c3_Var85 string
+ templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinStringErrs(download.Size)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 391, Col: 45}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 386, Col: 45}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var89))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1929,12 +1854,12 @@ func IconArchive(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var90 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var90 == nil {
- templ_7745c5c3_Var90 = templ.NopComponent
+ templ_7745c5c3_Var86 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var86 == nil {
+ templ_7745c5c3_Var86 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var91 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var87 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1952,7 +1877,7 @@ func IconArchive(color string) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var91), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var87), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1976,13 +1901,13 @@ func IconLink(href string, label string, extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var92 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var92 == nil {
- templ_7745c5c3_Var92 = templ.NopComponent
+ templ_7745c5c3_Var88 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var88 == nil {
+ templ_7745c5c3_Var88 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- var templ_7745c5c3_Var93 = []any{"text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var93...)
+ var templ_7745c5c3_Var89 = []any{"text-[120%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var89...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1990,12 +1915,12 @@ func IconLink(href string, label string, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var94 templ.SafeURL
- templ_7745c5c3_Var94, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
+ var templ_7745c5c3_Var90 templ.SafeURL
+ templ_7745c5c3_Var90, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 405, Col: 30}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 400, Col: 30}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var94))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var90))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2003,12 +1928,12 @@ func IconLink(href string, label string, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var95 string
- templ_7745c5c3_Var95, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
+ var templ_7745c5c3_Var91 string
+ templ_7745c5c3_Var91, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 405, Col: 93}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 400, Col: 93}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var95)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var91)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2016,12 +1941,12 @@ func IconLink(href string, label string, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var96 string
- templ_7745c5c3_Var96, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
+ var templ_7745c5c3_Var92 string
+ templ_7745c5c3_Var92, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 405, Col: 109}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 400, Col: 109}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var96)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var92)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2029,12 +1954,12 @@ func IconLink(href string, label string, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var97 string
- templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var93).String())
+ var templ_7745c5c3_Var93 string
+ templ_7745c5c3_Var93, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var89).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var97)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var93)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2042,7 +1967,7 @@ func IconLink(href string, label string, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templ_7745c5c3_Var92.Render(ctx, templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = templ_7745c5c3_Var88.Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2070,6 +1995,100 @@ func IconGit(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var94 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var94 == nil {
+ templ_7745c5c3_Var94 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var95 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"></line> <circle cx=\"18\" cy=\"6\" r=\"3\"></circle> <circle cx=\"6\" cy=\"18\" r=\"3\"></circle> <path d=\"M18 9a9 9 0 0 1-9 9\"></path>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var95), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconCheckmark(color string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var96 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var96 == nil {
+ templ_7745c5c3_Var96 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var97 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check preview-icon\"><path d=\"M20 6 9 17l-5-5\"></path></svg>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var97), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconCopy(color string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Var98 := templ.GetChildren(ctx)
if templ_7745c5c3_Var98 == nil {
templ_7745c5c3_Var98 = templ.NopComponent
@@ -2087,7 +2106,7 @@ func IconGit(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "<line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"></line> <circle cx=\"18\" cy=\"6\" r=\"3\"></circle> <circle cx=\"6\" cy=\"18\" r=\"3\"></circle> <path d=\"M18 9a9 9 0 0 1-9 9\"></path>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy preview-icon\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2134,7 +2153,7 @@ func IconGithub(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "<path d=\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"></path> <path d=\"M9 18c-4.51 2-5-2-7-2\"></path>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<path d=\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"></path> <path d=\"M9 18c-4.51 2-5-2-7-2\"></path>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2181,7 +2200,7 @@ func IconExternal(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "<path d=\"M15 3h6v6\"></path> <path d=\"M10 14 21 3\"></path> <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<path d=\"M15 3h6v6\"></path> <path d=\"M10 14 21 3\"></path> <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2228,13 +2247,13 @@ func IconKrypton() templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"><!-- Outer Circle --><circle cx=\"50\" cy=\"50\" r=\"42\" stroke-width=\"6\"></circle><!-- Inner Dot --><circle cx=\"50\" cy=\"50\" r=\"16\" fill=\"currentColor\" stroke=\"none\"></circle></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"><!-- Outer Circle --><circle cx=\"50\" cy=\"50\" r=\"42\" stroke-width=\"6\"></circle><!-- Inner Dot --><circle cx=\"50\" cy=\"50\" r=\"16\" fill=\"currentColor\" stroke=\"none\"></circle></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon("text-[#00f1ff] scale-150").Render(templ.WithChildren(ctx, templ_7745c5c3_Var105), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon("text-[#00f1ff] scale-135").Render(templ.WithChildren(ctx, templ_7745c5c3_Var105), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2270,7 +2289,7 @@ func ProjectItem(project Project, extra string) templ.Component {
templ_7745c5c3_Var106 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "<div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "<div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2286,7 +2305,7 @@ func ProjectItem(project Project, extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<div class=\"flex flex-col gap-[0.0625rem] w-full\"><div class=\"flex flex-wrap items-baseline gap-x-[1ch] gap-y-[0.4rem]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "<div class=\"flex flex-col gap-[0.0625rem] w-full\"><div class=\"flex flex-wrap items-baseline gap-x-[1ch] gap-y-[0.4rem]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2294,56 +2313,56 @@ func ProjectItem(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "<a href=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "<a href=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var108 templ.SafeURL
templ_7745c5c3_Var108, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(projectURL(project)))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 460, Col: 47}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 467, Col: 47}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var108))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, "\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if project.Link != "" {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, " target=\"_blank\" rel=\"noopener noreferrer\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, " target=\"_blank\" rel=\"noopener noreferrer\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, " class=\"text-[130%] font-bold text-(--accent) after:absolute after:inset-0 after:z-0\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, " class=\"text-[130%] font-bold text-(--accent) after:absolute after:inset-0 after:z-0\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var109 string
templ_7745c5c3_Var109, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 466, Col: 21}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 473, Col: 21}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var109))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "</a> <span class=\"text-[80%] text-(--primary)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "</a> <span class=\"text-[80%] text-(--primary)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var110 string
templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 467, Col: 65}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 474, Col: 65}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var110))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</span> ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "</span> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2353,7 +2372,7 @@ func ProjectItem(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "<code class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "<code class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2366,25 +2385,25 @@ func ProjectItem(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var113 string
templ_7745c5c3_Var113, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 469, Col: 136}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 476, Col: 136}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var113))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</code>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</code>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "<span class=\"ml-auto flex items-center self-center relative z-10\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "<span class=\"ml-auto flex items-center self-center relative z-10\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2412,20 +2431,20 @@ func ProjectItem(project Project, extra string) templ.Component {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</span></div><p class=\"text-[95%]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</span></div><p class=\"text-[95%]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var115 string
templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 482, Col: 40}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 489, Col: 40}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</p></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "</p></div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2435,7 +2454,7 @@ func ProjectItem(project Project, extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2603,33 +2622,33 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "<span><p>$ cd ~")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "<span><p>$ cd ~")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var124 string
templ_7745c5c3_Var124, templ_7745c5c3_Err = templ.JoinStringErrs(path)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 517, Col: 20}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 524, Col: 20}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var124))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</p><p class=\"pt-3\">\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "</p><p class=\"pt-3\">\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var125 string
templ_7745c5c3_Var125, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:])
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 518, Col: 32}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 525, Col: 32}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var125))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "\": No such file or directory (os error 2) </p></span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "\": No such file or directory (os error 2) </p></span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2651,20 +2670,20 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "<span><div class=\"gap-[1ch]\"><span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<span><div class=\"gap-[1ch]\"><span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var127 string
templ_7745c5c3_Var127, templ_7745c5c3_Err = templ.JoinStringErrs(">")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 524, Col: 17}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 531, Col: 17}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var127))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "</span> <span class=\"text-(--secondary)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</span> <span class=\"text-(--secondary)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2683,7 +2702,7 @@ func NotFoundPage(style Style, path string) templ.Component {
var templ_7745c5c3_Var129 string
templ_7745c5c3_Var129, templ_7745c5c3_Err = templ.JoinStringErrs("cd -")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 527, Col: 16}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 534, Col: 16}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var129))
if templ_7745c5c3_Err != nil {
@@ -2695,20 +2714,20 @@ func NotFoundPage(style Style, path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "</span> <span class=\"text-(--alt)\"># Previous page</span></div><div class=\"gap-[1ch]\"><span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</span> <span class=\"text-(--alt)\"># Previous page</span></div><div class=\"gap-[1ch]\"><span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var130 string
templ_7745c5c3_Var130, templ_7745c5c3_Err = templ.JoinStringErrs(">")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 535, Col: 17}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 542, Col: 17}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var130))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "</span> <span class=\"text-(--secondary)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "</span> <span class=\"text-(--secondary)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2727,7 +2746,7 @@ func NotFoundPage(style Style, path string) templ.Component {
var templ_7745c5c3_Var132 string
templ_7745c5c3_Var132, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 538, Col: 20}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 545, Col: 20}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var132))
if templ_7745c5c3_Err != nil {
@@ -2739,7 +2758,7 @@ func NotFoundPage(style Style, path string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "</span></div></span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "</span></div></span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2791,7 +2810,7 @@ func ScrollBox(extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<div data-scrollbox class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<div data-scrollbox class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2804,7 +2823,7 @@ func ScrollBox(extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "\"><div data-scroll-area class=\"flex-1 min-w-0 overflow-y-auto border-[0.1rem] border-solid border-(--alt) p-[1rem] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "\"><div data-scroll-area class=\"flex-1 min-w-0 overflow-y-auto border-[0.1rem] border-solid border-(--alt) p-[1rem] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2812,7 +2831,7 @@ func ScrollBox(extra string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "</div><div data-scroll-track class=\"relative w-8 -ml-[0.1rem] border-[0.1rem] border-solid border-(--alt)\"><div data-scroll-thumb class=\"absolute inset-x-[0.3rem] bg-(--secondary) cursor-grab touch-none\"></div></div></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "</div><div data-scroll-track class=\"relative w-8 -ml-[0.1rem] border-[0.1rem] border-solid border-(--alt)\"><div data-scroll-thumb class=\"absolute inset-x-[0.3rem] bg-(--secondary) cursor-grab touch-none\"></div></div></div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2865,7 +2884,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "$ ls -lh ~/blogs")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "$ ls -lh ~/blogs")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2921,7 +2940,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var137), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var137), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2969,7 +2988,7 @@ func IconMonitor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect> <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line> <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect> <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line> <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3016,7 +3035,7 @@ func IconTerminal(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<polyline points=\"4 17 10 11 4 5\"></polyline> <line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"></line>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<polyline points=\"4 17 10 11 4 5\"></polyline> <line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"></line>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3063,7 +3082,7 @@ func IconCode(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "<polyline points=\"16 18 22 12 16 6\"></polyline> <polyline points=\"8 6 2 12 8 18\"></polyline>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "<polyline points=\"16 18 22 12 16 6\"></polyline> <polyline points=\"8 6 2 12 8 18\"></polyline>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3110,7 +3129,7 @@ func IconCpu(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<rect width=\"16\" height=\"16\" x=\"4\" y=\"4\" rx=\"2\"></rect> <rect width=\"6\" height=\"6\" x=\"9\" y=\"9\" rx=\"1\"></rect> <path d=\"M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2\"></path>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<rect width=\"16\" height=\"16\" x=\"4\" y=\"4\" rx=\"2\"></rect> <rect width=\"6\" height=\"6\" x=\"9\" y=\"9\" rx=\"1\"></rect> <path d=\"M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2\"></path>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3157,7 +3176,7 @@ func IconScriptLang(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-file-terminal preview-icon\"><path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"></path><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"></path><path d=\"m8 16 2-2-2-2\"></path><path d=\"M12 18h4\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-file-terminal preview-icon\"><path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"></path><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"></path><path d=\"m8 16 2-2-2-2\"></path><path d=\"M12 18h4\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3204,7 +3223,7 @@ func IconEditor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-pen preview-icon\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-pen preview-icon\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3251,7 +3270,7 @@ func IconDebugger(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-off preview-icon\"><path d=\"M12 20v-8\"></path><path d=\"M12.656 7H14a4 4 0 0 1 4 4v1.344\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M17.123 17.123A6 6 0 0 1 6 14v-3a4 4 0 0 1 1.72-3.287\"></path><path d=\"m2 2 20 20\"></path><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"></path><path d=\"M22 13h-3.344\"></path><path d=\"M3 21a4 4 0 0 1 3.81-4\"></path><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"></path><path d=\"M6 13H2\"></path><path d=\"m8 2 1.88 1.88\"></path><path d=\"M9.712 4.06A3 3 0 0 1 15 6v1.13\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-off preview-icon\"><path d=\"M12 20v-8\"></path><path d=\"M12.656 7H14a4 4 0 0 1 4 4v1.344\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M17.123 17.123A6 6 0 0 1 6 14v-3a4 4 0 0 1 1.72-3.287\"></path><path d=\"m2 2 20 20\"></path><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"></path><path d=\"M22 13h-3.344\"></path><path d=\"M3 21a4 4 0 0 1 3.81-4\"></path><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"></path><path d=\"M6 13H2\"></path><path d=\"m8 2 1.88 1.88\"></path><path d=\"M9.712 4.06A3 3 0 0 1 15 6v1.13\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3298,7 +3317,7 @@ func IconKeyboard(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-keyboard preview-icon\"><path d=\"M10 8h.01\"></path><path d=\"M12 12h.01\"></path><path d=\"M14 8h.01\"></path><path d=\"M16 12h.01\"></path><path d=\"M18 8h.01\"></path><path d=\"M6 8h.01\"></path><path d=\"M7 16h10\"></path><path d=\"M8 12h.01\"></path><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"></rect></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-keyboard preview-icon\"><path d=\"M10 8h.01\"></path><path d=\"M12 12h.01\"></path><path d=\"M14 8h.01\"></path><path d=\"M16 12h.01\"></path><path d=\"M18 8h.01\"></path><path d=\"M6 8h.01\"></path><path d=\"M7 16h10\"></path><path d=\"M8 12h.01\"></path><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"></rect></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3345,7 +3364,7 @@ func IconUptime(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clock preview-icon\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6l4 2\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clock preview-icon\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6l4 2\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3392,7 +3411,7 @@ func IconEko(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-wifi preview-icon\"><path d=\"M12 20h.01\"></path><path d=\"M2 8.82a15 15 0 0 1 20 0\"></path><path d=\"M5 12.859a10 10 0 0 1 14 0\"></path><path d=\"M8.5 16.429a5 5 0 0 1 7 0\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-wifi preview-icon\"><path d=\"M12 20h.01\"></path><path d=\"M2 8.82a15 15 0 0 1 20 0\"></path><path d=\"M5 12.859a10 10 0 0 1 14 0\"></path><path d=\"M8.5 16.429a5 5 0 0 1 7 0\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3439,7 +3458,7 @@ func IconTrident(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide preview-icon\"><path d=\"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8\"></path> <path d=\"M19 5 2.1 21.9\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide preview-icon\"><path d=\"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8\"></path> <path d=\"M19 5 2.1 21.9\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3486,7 +3505,7 @@ func IconDotfiles(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-settings preview-icon\"><path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-settings preview-icon\"><path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3533,7 +3552,7 @@ func IconVideo(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 158, " <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-monitor-play preview-icon\"><path d=\"M15.033 9.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56V7.648a.645.645 0 0 1 .967-.56z\"></path><path d=\"M12 17v4\"></path><path d=\"M8 21h8\"></path><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"></rect></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, " <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-monitor-play preview-icon\"><path d=\"M15.033 9.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56V7.648a.645.645 0 0 1 .967-.56z\"></path><path d=\"M12 17v4\"></path><path d=\"M8 21h8\"></path><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"></rect></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3580,7 +3599,7 @@ func IconJetbrains(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 159, "<svg fill=\"none\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\"><defs><linearGradient id=\"_R_34j5_\" x1=\"0.85\" x2=\"62.62\" y1=\"62.72\" y2=\"1.81\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FF9419\"></stop> <stop offset=\"0.43\" stop-color=\"#FF021D\"></stop> <stop offset=\"0.99\" stop-color=\"#E600FF\"></stop></linearGradient></defs> <path fill=\"url(#_R_34j5_)\" d=\"M20.34 3.66 3.66 20.34A12.5 12.5 0 0 0 0 29.18V59c0 2.76 2.24 5 5 5h29.82c3.32 0 6.49-1.32 8.84-3.66l16.68-16.68c2.34-2.34 3.66-5.52 3.66-8.84V5c0-2.76-2.24-5-5-5H29.18c-3.32 0-6.49 1.32-8.84 3.66\"></path> <path fill=\"#000\" d=\"M48 16H8v40h40z\"></path> <path fill=\"#fff\" d=\"M30 47H13v4h17z\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "<svg fill=\"none\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\"><defs><linearGradient id=\"_R_34j5_\" x1=\"0.85\" x2=\"62.62\" y1=\"62.72\" y2=\"1.81\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#FF9419\"></stop> <stop offset=\"0.43\" stop-color=\"#FF021D\"></stop> <stop offset=\"0.99\" stop-color=\"#E600FF\"></stop></linearGradient></defs> <path fill=\"url(#_R_34j5_)\" d=\"M20.34 3.66 3.66 20.34A12.5 12.5 0 0 0 0 29.18V59c0 2.76 2.24 5 5 5h29.82c3.32 0 6.49-1.32 8.84-3.66l16.68-16.68c2.34-2.34 3.66-5.52 3.66-8.84V5c0-2.76-2.24-5-5-5H29.18c-3.32 0-6.49 1.32-8.84 3.66\"></path> <path fill=\"#000\" d=\"M48 16H8v40h40z\"></path> <path fill=\"#fff\" d=\"M30 47H13v4h17z\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3627,7 +3646,7 @@ func IconDocs(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 160, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-open preview-icon\"><path d=\"M12 5v16\"></path><path d=\"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-book-open preview-icon\"><path d=\"M12 5v16\"></path><path d=\"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3674,7 +3693,7 @@ func IconReleases(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 161, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-tags preview-icon\"><path d=\"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z\"></path><path d=\"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193\"></path><circle cx=\"10.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\"></circle></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-tags preview-icon\"><path d=\"M13.172 2a2 2 0 0 1 1.414.586l6.71 6.71a2.4 2.4 0 0 1 0 3.408l-4.592 4.592a2.4 2.4 0 0 1-3.408 0l-6.71-6.71A2 2 0 0 1 6 9.172V3a1 1 0 0 1 1-1z\"></path><path d=\"M2 7v6.172a2 2 0 0 0 .586 1.414l6.71 6.71a2.4 2.4 0 0 0 3.191.193\"></path><circle cx=\"10.5\" cy=\"6.5\" r=\".5\" fill=\"currentColor\"></circle></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3737,25 +3756,25 @@ func Fastfetch(rows []FetchRow) templ.Component {
templ_7745c5c3_Var173 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 162, "<div style=\"\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto auto auto 1fr;\n\t\talign-items: center;\n\t\tcolumn-gap: 1ch;\n\t\tline-height: normal;\n\t\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "<div style=\"\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto auto auto 1fr;\n\t\talign-items: center;\n\t\tcolumn-gap: 1ch;\n\t\tline-height: normal;\n\t\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for i, row := range rows {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 163, "<span class=\"text-(--alt)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "<span class=\"text-(--alt)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var174 string
templ_7745c5c3_Var174, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows)))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 739, Col: 52}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 746, Col: 52}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var174))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 164, "</span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "</span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3768,7 +3787,7 @@ func Fastfetch(rows []FetchRow) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 165, "<span class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "<span class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3781,51 +3800,51 @@ func Fastfetch(rows []FetchRow) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 166, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var177 string
templ_7745c5c3_Var177, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 741, Col: 53}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 748, Col: 53}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var177))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 167, "</span> <span id=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "</span> <span id=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var178 string
templ_7745c5c3_Var178, templ_7745c5c3_Err = templ.ResolveAttributeValue(row.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 742, Col: 23}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 749, Col: 23}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var178)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 168, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var179 string
templ_7745c5c3_Var179, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 742, Col: 37}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 749, Col: 37}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var179))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 169, "</span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "</span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 170, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3859,7 +3878,7 @@ func Icon(color string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 171, "<svg width=\"1.1em\" height=\"1.1em\" class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "<svg width=\"1.1em\" height=\"1.1em\" class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3872,7 +3891,7 @@ func Icon(color string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 172, "\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3880,7 +3899,7 @@ func Icon(color string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 173, "</svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3937,7 +3956,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 174, "<article class=\"prose select-text font-(family-name:--font-normal) text-[17.6px] leading-[1.7]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "<article class=\"prose select-text font-(family-name:--font-normal) text-[17.6px] leading-[1.7]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3945,7 +3964,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 175, "</article><div class=\"grid grid-cols-2 gap-x-[1rem] mt-[1rem]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "</article><div class=\"grid grid-cols-2 gap-x-[1rem] mt-[1rem]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3957,7 +3976,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 176, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -3969,7 +3988,7 @@ func BlogPage(style Style, blog Blog, prev *Blog, next *Blog) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalLayout(style, blog.Title).Render(templ.WithChildren(ctx, templ_7745c5c3_Var184), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/blogs/"+blog.Slug).Render(templ.WithChildren(ctx, templ_7745c5c3_Var184), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -4011,33 +4030,33 @@ func BlogNav(label string, blog *Blog, extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 177, "<a href=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "<a href=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var188 templ.SafeURL
templ_7745c5c3_Var188, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/blogs/" + blog.Slug))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 771, Col: 49}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 778, Col: 49}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var188))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 178, "\" class=\"block min-w-0 truncate\">vim ~/blogs/")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "\" class=\"block min-w-0 truncate\">vim ~/blogs/")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var189 string
templ_7745c5c3_Var189, templ_7745c5c3_Err = templ.JoinStringErrs(blog.Slug)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 771, Col: 106}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 778, Col: 106}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var189))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 179, "</a>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 181, "</a>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -4048,10 +4067,284 @@ func BlogNav(label string, blog *Blog, extra string) templ.Component {
return templ_7745c5c3_Err
}
} else {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 180, "<div></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 182, "<div></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ return nil
+ })
+}
+
+func ShellPage(style Style) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var190 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var190 == nil {
+ templ_7745c5c3_Var190 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var191 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var192 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 183, "<div data-shell class=\"flex flex-col gap-[1rem]\"><div id=\"shell-history\" class=\"flex flex-col gap-[1rem]\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = ShellEntry("fastfetch", Fastfetch(fetchRows)).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 184, "</div><div data-shell-prompt class=\"flex gap-[1ch]\"><span class=\"shrink-0 text-(--primary)\">$</span><div class=\"relative flex-1\"><input data-shell-input type=\"text\" class=\"block w-full bg-transparent outline-none caret-transparent\" autocomplete=\"off\" autocapitalize=\"off\" spellcheck=\"false\"> <span data-shell-caret class=\"absolute inset-y-0 w-[1ch] flex items-center whitespace-pre bg-(--text) text-(--background) pointer-events-none\"></span></div></div></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var192), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = TerminalLayout(style, "/bin/bash").Render(templ.WithChildren(ctx, templ_7745c5c3_Var191), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ShellLines(lines []string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var193 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var193 == nil {
+ templ_7745c5c3_Var193 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 185, "<div class=\"flex flex-col\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, line := range lines {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 186, "<span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var194 string
+ templ_7745c5c3_Var194, templ_7745c5c3_Err = templ.JoinStringErrs(line)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 807, Col: 15}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var194))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 187, "</span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 188, "</div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ShellEntry(cmd string, output templ.Component) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var195 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var195 == nil {
+ templ_7745c5c3_Var195 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var196 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 189, "<div class=\"min-w-0 w-full\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = output.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 190, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
+ return nil
+ })
+ templ_7745c5c3_Err = TerminalBorder("$ "+cmd, "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var196), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ShellText(text string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var197 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var197 == nil {
+ templ_7745c5c3_Var197 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 191, "<p>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var198 string
+ templ_7745c5c3_Var198, templ_7745c5c3_Err = templ.JoinStringErrs(text)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 821, Col: 10}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var198))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 192, "</p>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ShellHelp(names []string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var199 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var199 == nil {
+ templ_7745c5c3_Var199 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 193, "<div class=\"flex flex-col\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, name := range names {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 194, "<span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var200 string
+ templ_7745c5c3_Var200, templ_7745c5c3_Err = templ.JoinStringErrs(name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 827, Col: 15}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var200))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 195, "</span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 196, "</div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
}
return nil
})