From d3aa8982bfb70cda8d04130347e2a870aebd2d19 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Fri, 9 Oct 2026 03:40:03 +0300 Subject: New blog post and a bunch of unrelated website changes --- blogs/2026-10-09-simple-made-easy.md | 70 ++ public/my_uptime.js | 7 +- public/style.css | 952 ++++++++++++++++++++++++ website.go | 110 +-- website.templ | 286 +++++++- website_templ.go | 1339 +++++++++++++++++++++++++++++----- 6 files changed, 2493 insertions(+), 271 deletions(-) create mode 100644 blogs/2026-10-09-simple-made-easy.md diff --git a/blogs/2026-10-09-simple-made-easy.md b/blogs/2026-10-09-simple-made-easy.md new file mode 100644 index 0000000..9399da0 --- /dev/null +++ b/blogs/2026-10-09-simple-made-easy.md @@ -0,0 +1,70 @@ +--- +title: "Simple Made Easy" +description: "" +date: 2026-10-09 +--- + +Due to a recent conversation I had, I remembered a talk I watched a while ago that was really +influetial to how I view software develop and life in general, so I thought it'd be valuable +to write this short blog to hopefully make more people aware of it. + +The original talk: https://www.youtube.com/watch?v=SxdOUGdseq4 + +How I discovered the talk: https://www.youtube.com/watch?v=8eXiWkPSb50 + +## Simple Made Easy + +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 +Easy <-> Hard + +Simple and Complex come from Latin, where Complex used to mean braid, as in many interleaved things +while Simple used to mean 0 braiding (no braid, no interleaving)[^1] + +Whether there is interleaving, and how much interleaving there is, is a completely objective +question, and so is Simple and Complex, they are objective. + +Easy and Hard on the other hand, are subjective, for example, German is very Easy to Germans, or +languages that are similar to it, and Japanese is Easy for a Japanese person, yet a German person +finds Japanese Hard, and a Japanese finds German Hard, hence it's subjective. +While kids learning language learn it all at about the same age, showing the Complexity of the +languages themselves is indistinguishably similar[^2] + +When we say a codebase is Complex or a programming language is Simple, we specificaly don't mean +how Easy or Hard is it to learn or understand, we specifically mean _how much interleaving there is_. +And in a programming context, 2 concepts are considered interleaved if it's impossible to understand +them separately, they must be looked at together to understand them. + +Assembly language is generally very Simple[^3] -- there are a few main instructions, which can be +looked at separately, which do very basic operations that are Easy to reason about, yet, assembly +is notoriously difficult to read and write, while a language such as python is way more Complex, +there there is a lot more going on even in a single `a + b` expression, it is a very common +"beginner language" due to how Easy it is to learn. + +"Coupling" is the act of _interleaving_ things, making them intertwined, having to consider them +together to understand them, while "Decoupling" is the opposite, taking things that used to be +interleaved and separating them so they can be looked at independently, "Separation of Concerns". + +I'd like to introduce a new concept, "Unnecessary Complexity" and "Inherent Complexity", to quote Terry Davis - +"An idiot admires Complexity, a genius admires Simplicity". +As the name suggest, Unnecessary Complexity is unnecessary, it is additional complexity layered +on top, while Inherent Complexity is instrinc to the problem at hand, it cannot be avoided. +While real languages developed naturally, they have obtained a bunch of unnecessary complexity +while something such as the Quadratic formula is entirely filled with Inherent Complexity, or in +other words, it's impossible to simplify it, it cannot be made more simple. + +To end it on a programming related note, I'd leave you with this quote: + +> (Unnecessary) Complexity is the root of all evil + +[^1]: this is from memory, I might have butchered the explanation a bit, watch the original talk. + +[^2]: + All languages... except Danish, which shows slower development in children compared to other + languages, likely due to the difficulty identifying word boundaries. + +[^3]: + The basic instruction set needed for turing complete programs (move, jump, load, store, etc), + I, of course, don't mean the entirety of, say, x86_64 is simple. diff --git a/public/my_uptime.js b/public/my_uptime.js index 25f549a..1fdb457 100644 --- a/public/my_uptime.js +++ b/public/my_uptime.js @@ -13,6 +13,7 @@ async function updateUptime() { } // Run on page load after all DOM elements loaded -DOMContentLoaded(updateUptime()); - -setInterval(updateUptime, 5 * 1000); // in ms +document.addEventListener("DOMContentLoaded", () => { + updateUptime(); + setInterval(updateUptime, 5 * 1000); // in ms +}); diff --git a/public/style.css b/public/style.css index c555b7d..d972f06 100644 --- a/public/style.css +++ b/public/style.css @@ -7,12 +7,34 @@ sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + --color-red-400: oklch(70.4% 0.191 22.216); + --color-red-800: oklch(44.4% 0.177 26.899); + --color-red-950: oklch(25.8% 0.092 26.042); + --color-emerald-400: oklch(76.5% 0.177 163.223); + --color-emerald-800: oklch(43.2% 0.095 166.913); + --color-emerald-950: oklch(26.2% 0.051 172.552); --color-gray-700: oklch(37.3% 0.034 259.733); + --color-zinc-200: oklch(92% 0.004 286.32); + --color-zinc-300: oklch(87.1% 0.006 286.286); + --color-zinc-400: oklch(70.5% 0.015 286.067); + --color-zinc-500: oklch(55.2% 0.016 285.938); + --color-black: #000; + --color-white: #fff; --spacing: 0.25rem; + --container-3xl: 48rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); --text-3xl: 1.875rem; --text-3xl--line-height: calc(2.25 / 1.875); --font-weight-normal: 400; --font-weight-bold: 700; + --tracking-wider: 0.05em; + --leading-relaxed: 1.625; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; --default-transition-duration: 150ms; --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); --default-font-family: var(--font-sans); @@ -225,6 +247,9 @@ .col-span-2 { grid-column: span 2 / span 2; } + .col-span-3 { + grid-column: span 3 / span 3; + } .-m-\[0\.4rem\] { margin: calc(0.4rem * -1); } @@ -243,6 +268,39 @@ .mx-\[1vw\] { margin-inline: 1vw; } + .my-0 { + margin-block: 0px; + } + .my-\[-0\.5rem\] { + margin-block: -0.5rem; + } + .my-\[-0\.10rem\] { + margin-block: -0.10rem; + } + .my-\[-0\.15rem\] { + margin-block: -0.15rem; + } + .my-\[-0\.20rem\] { + margin-block: -0.20rem; + } + .my-\[-0\.25\] { + margin-block: -0.25; + } + .my-\[-0\.25rem\] { + margin-block: -0.25rem; + } + .my-\[-0\.30rem\] { + margin-block: -0.30rem; + } + .my-\[-0\.50rem\] { + margin-block: -0.50rem; + } + .my-\[-0\.rem\] { + margin-block: -0.rem; + } + .my-\[0\.0rem\] { + margin-block: 0.0rem; + } .my-\[0\.625vw\] { margin-block: 0.625vw; } @@ -255,12 +313,21 @@ .my-\[5vw\] { margin-block: 5vw; } + .mt-0 { + margin-top: 0px; + } + .mt-\[0\.0rem\] { + margin-top: 0.0rem; + } .mt-\[0\.5rem\] { margin-top: 0.5rem; } .mt-\[0\.625vw\] { margin-top: 0.625vw; } + .mt-\[0\.rem\] { + margin-top: 0.rem; + } .mt-\[1vw\] { margin-top: 1vw; } @@ -282,9 +349,30 @@ .mb-0 { margin-bottom: 0px; } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } .mb-6 { margin-bottom: calc(var(--spacing) * 6); } + .mb-10 { + margin-bottom: calc(var(--spacing) * 10); + } + .mb-12 { + margin-bottom: calc(var(--spacing) * 12); + } + .mb-\[0\.0rem\] { + margin-bottom: 0.0rem; + } + .mb-\[0\.1rem\] { + margin-bottom: 0.1rem; + } + .mb-\[0\.5rem\] { + margin-bottom: 0.5rem; + } .mb-\[0\.30rem\] { margin-bottom: 0.30rem; } @@ -306,6 +394,15 @@ .ml-\[-4vw\] { margin-left: -4vw; } + .ml-auto { + margin-left: auto; + } + .line-clamp-2 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } .block { display: block; } @@ -321,15 +418,24 @@ .inline-block { display: inline-block; } + .inline-flex { + display: inline-flex; + } .table { display: table; } .h-0 { height: 0px; } + .h-2 { + height: calc(var(--spacing) * 2); + } .h-38 { height: calc(var(--spacing) * 38); } + .h-\[0\.1rem\] { + height: 0.1rem; + } .h-\[9\.5vw\] { height: 9.5vw; } @@ -339,6 +445,9 @@ .h-\[62\%\] { height: 62%; } + .h-\[80\%\] { + height: 80%; + } .h-\[80svh\] { height: 80svh; } @@ -363,12 +472,27 @@ .w-0 { width: 0px; } + .w-2 { + width: calc(var(--spacing) * 2); + } .w-8 { width: calc(var(--spacing) * 8); } + .w-\[\%\] { + width: %; + } + .w-\[0\%\] { + width: 0%; + } + .w-\[0\.625rem\] { + width: 0.625rem; + } .w-\[30\%\] { width: 30%; } + .w-\[50\%\] { + width: 50%; + } .w-\[67\%\] { width: 67%; } @@ -378,6 +502,9 @@ .w-\[75rem\] { width: 75rem; } + .w-\[80\%\] { + width: 80%; + } .w-\[95vw\] { width: 95vw; } @@ -390,9 +517,15 @@ .w-full { width: 100%; } + .max-w-3xl { + max-width: var(--container-3xl); + } .min-w-0 { min-width: 0px; } + .min-w-\[260px\] { + min-width: 260px; + } .flex-1 { flex: 1; } @@ -416,6 +549,9 @@ .transform { transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); } + .animate-pulse { + animation: var(--animate-pulse); + } .cursor-grab { cursor: grab; } @@ -431,6 +567,9 @@ .\[scrollbar-width\:none\] { scrollbar-width: none; } + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -446,12 +585,30 @@ .flex-col { flex-direction: column; } + .flex-wrap { + flex-wrap: wrap; + } + .items-baseline { + align-items: baseline; + } .items-center { align-items: center; } + .items-end { + align-items: flex-end; + } .justify-between { justify-content: space-between; } + .gap-1 { + gap: var(--spacing); + } + .gap-2 { + gap: calc(var(--spacing) * 2); + } + .gap-3 { + gap: calc(var(--spacing) * 3); + } .gap-4 { gap: calc(var(--spacing) * 4); } @@ -461,6 +618,15 @@ .gap-16 { gap: calc(var(--spacing) * 16); } + .gap-\[0\.5rem\] { + gap: 0.5rem; + } + .gap-\[0\.25rem\] { + gap: 0.25rem; + } + .gap-\[0\.0625rem\] { + gap: 0.0625rem; + } .gap-\[1\.25vw\] { gap: 1.25vw; } @@ -470,6 +636,9 @@ .gap-x-8 { column-gap: calc(var(--spacing) * 8); } + .gap-x-\[1ch\] { + column-gap: 1ch; + } .gap-x-\[5vw\] { column-gap: 5vw; } @@ -481,6 +650,28 @@ .gap-y-4 { row-gap: calc(var(--spacing) * 4); } + .gap-y-\[0\.4rem\] { + row-gap: 0.4rem; + } + :where(.divide-y > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + } + :where(.divide-white > :not(:last-child)) { + border-color: var(--color-white); + } + :where(.divide-white\/5 > :not(:last-child)) { + border-color: color-mix(in srgb, #fff 5%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } + .self-center { + align-self: center; + } .truncate { overflow: hidden; text-overflow: ellipsis; @@ -498,13 +689,33 @@ .overflow-y-auto { overflow-y: auto; } + .rounded { + border-radius: 0.25rem; + } + .rounded-\[0\.2rem\] { + border-radius: 0.2rem; + } + .rounded-\[0\.3rem\] { + border-radius: 0.3rem; + } .rounded-\[0\.4rem\] { border-radius: 0.4rem; } + .rounded-full { + border-radius: calc(infinity * 1px); + } .border { border-style: var(--tw-border-style); border-width: 1px; } + .border-1 { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-\[0\.01rem\] { + border-style: var(--tw-border-style); + border-width: 0.01rem; + } .border-\[0\.1rem\] { border-style: var(--tw-border-style); border-width: 0.1rem; @@ -517,6 +728,26 @@ border-style: var(--tw-border-style); border-width: 0.2rem; } + .border-\[0\.03rem\] { + border-style: var(--tw-border-style); + border-width: 0.03rem; + } + .border-\[0\.06rem\] { + border-style: var(--tw-border-style); + border-width: 0.06rem; + } + .border-\[0\.13rem\] { + border-style: var(--tw-border-style); + border-width: 0.13rem; + } + .border-\[0\.16rem\] { + border-style: var(--tw-border-style); + border-width: 0.16rem; + } + .border-\[0\.25rem\] { + border-style: var(--tw-border-style); + border-width: 0.25rem; + } .border-\[0\.25vh\] { border-style: var(--tw-border-style); border-width: 0.25vh; @@ -525,6 +756,26 @@ border-style: var(--tw-border-style); border-width: 0.125rem; } + .border-\[0\.0625rem\] { + border-style: var(--tw-border-style); + border-width: 0.0625rem; + } + .border-\[0\.03125rem\] { + border-style: var(--tw-border-style); + border-width: 0.03125rem; + } + .border-x-\[0\.1rem\] { + border-inline-style: var(--tw-border-style); + border-inline-width: 0.1rem; + } + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } .border-solid { --tw-border-style: solid; border-style: solid; @@ -541,15 +792,189 @@ .border-\[var\(--alt\)\] { border-color: var(--alt); } + .border-\[var\(--primary\)\]\/40 { + border-color: var(--primary); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--primary) 40%, transparent); + } + } + .border-emerald-800 { + border-color: var(--color-emerald-800); + } + .border-emerald-800\/30 { + border-color: color-mix(in srgb, oklch(43.2% 0.095 166.913) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-emerald-800) 30%, transparent); + } + } + .border-red-800 { + border-color: var(--color-red-800); + } + .border-red-800\/30 { + border-color: color-mix(in srgb, oklch(44.4% 0.177 26.899) 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-red-800) 30%, transparent); + } + } + .border-white { + border-color: var(--color-white); + } + .border-white\/5 { + border-color: color-mix(in srgb, #fff 5%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } + .border-white\/10 { + border-color: color-mix(in srgb, #fff 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + border-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + .bg-\(--alt\)\/25 { + background-color: var(--alt); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--alt) 25%, transparent); + } + } .bg-\(--background\) { background-color: var(--background); } + .bg-\(--extra\)\/0 { + background-color: var(--extra); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--extra) 0%, transparent); + } + } + .bg-\(--extra\)\/25 { + background-color: var(--extra); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--extra) 25%, transparent); + } + } + .bg-\(--extra\)\/50 { + background-color: var(--extra); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--extra) 50%, transparent); + } + } + .bg-\(--extra\)\/70 { + background-color: var(--extra); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--extra) 70%, transparent); + } + } .bg-\(--secondary\) { background-color: var(--secondary); } + .bg-\[color\:var\(--alt\)\] { + background-color: var(--alt); + } .bg-\[var\(--background\)\] { background-color: var(--background); } + .bg-black { + background-color: var(--color-black); + } + .bg-black\/20 { + background-color: color-mix(in srgb, #000 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent); + } + } + .bg-black\/30 { + background-color: color-mix(in srgb, #000 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 30%, transparent); + } + } + .bg-emerald-400 { + background-color: var(--color-emerald-400); + } + .bg-emerald-950 { + background-color: var(--color-emerald-950); + } + .bg-emerald-950\/40 { + background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-emerald-950) 40%, transparent); + } + } + .bg-red-950 { + background-color: var(--color-red-950); + } + .bg-red-950\/40 { + background-color: color-mix(in srgb, oklch(25.8% 0.092 26.042) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-950) 40%, transparent); + } + } + .bg-transparent { + background-color: transparent; + } + .bg-white { + background-color: var(--color-white); + } + .bg-white\/5 { + background-color: color-mix(in srgb, #fff 5%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } + .bg-white\/\[0\.01\] { + background-color: color-mix(in srgb, #fff 1%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 1%, transparent); + } + } + .bg-white\/\[0\.02\] { + background-color: color-mix(in srgb, #fff 2%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 2%, transparent); + } + } + .bg-white\/\[0\.03\] { + background-color: color-mix(in srgb, #fff 3%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 3%, transparent); + } + } + .bg-\[linear-gradient\(to_bottom\,\#181825\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,#181825,var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,,var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--backgrou\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--backgrou),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--background\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--background),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--background\)\,var\(--cmp-bg\,transparent\)\)\] { + background-image: linear-gradient(to bottom,var(--background),var(--cmp-bg,transparent)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--cmp-bg,),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,black\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--cmp-bg,black),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,transparent\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--cmp-bg,transparent),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,white\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--cmp-bg,white),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(--text\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(--text),var(--background)); + } + .bg-\[linear-gradient\(to_bottom\,var\(white\)\,var\(--background\)\)\] { + background-image: linear-gradient(to bottom,var(white),var(--background)); + } .fill-\[\#7ed4fb\]\/50 { fill: color-mix(in oklab, #7ed4fb 50%, transparent); } @@ -565,12 +990,27 @@ .p-0 { padding: 0px; } + .p-3 { + padding: calc(var(--spacing) * 3); + } + .p-3\.5 { + padding: calc(var(--spacing) * 3.5); + } .p-4 { padding: calc(var(--spacing) * 4); } + .p-5 { + padding: calc(var(--spacing) * 5); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } .p-8 { padding: calc(var(--spacing) * 8); } + .p-\[0\.2rem\] { + padding: 0.2rem; + } .p-\[0\.4rem\] { padding: 0.4rem; } @@ -586,6 +1026,15 @@ .p-\[3vw\] { padding: 3vw; } + .px-1 { + padding-inline: var(--spacing); + } + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } .px-3 { padding-inline: calc(var(--spacing) * 3); } @@ -595,6 +1044,9 @@ .px-\[0\.1vw\] { padding-inline: 0.1vw; } + .px-\[0\.2rem\] { + padding-inline: 0.2rem; + } .px-\[0\.4rem\] { padding-inline: 0.4rem; } @@ -607,15 +1059,36 @@ .py-\(--ypad\) { padding-block: var(--ypad); } + .py-0 { + padding-block: 0px; + } + .py-0\.5 { + padding-block: calc(var(--spacing) * 0.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } .py-16 { padding-block: calc(var(--spacing) * 16); } + .py-\[0\.1rem\] { + padding-block: 0.1rem; + } + .py-\[0\.25rem\] { + padding-block: 0.25rem; + } .py-\[0\.625vw\] { padding-block: 0.625vw; } + .py-\[var\(--border-py\,0\.875rem\)\] { + padding-block: var(--border-py,0.875rem); + } .pt-3 { padding-top: calc(var(--spacing) * 3); } + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } .pt-\[1\.0625em\] { padding-top: 1.0625em; } @@ -631,6 +1104,15 @@ .pr-\[1\.25vw\] { padding-right: 1.25vw; } + .pb-2 { + padding-bottom: calc(var(--spacing) * 2); + } + .pb-3 { + padding-bottom: calc(var(--spacing) * 3); + } + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } .text-left { text-align: left; } @@ -643,6 +1125,21 @@ .font-mono { font-family: var(--font-mono); } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .text-\[0\%\] { + font-size: 0%; + } .text-\[0\.8rem\] { font-size: 0.8rem; } @@ -670,22 +1167,69 @@ .text-\[3vw\] { font-size: 3vw; } + .text-\[5\%\] { + font-size: 5%; + } .text-\[5vw\] { font-size: 5vw; } + .text-\[7\%\] { + font-size: 7%; + } + .text-\[10px\] { + font-size: 10px; + } + .text-\[11px\] { + font-size: 11px; + } + .text-\[50\%\] { + font-size: 50%; + } .text-\[60\%\] { font-size: 60%; } + .text-\[70\%\] { + font-size: 70%; + } + .text-\[75\%\] { + font-size: 75%; + } + .text-\[80\%\] { + font-size: 80%; + } + .text-\[85\%\] { + font-size: 85%; + } + .text-\[90\%\] { + font-size: 90%; + } + .text-\[95\%\] { + font-size: 95%; + } + .text-\[100\%\] { + font-size: 100%; + } .text-\[110\%\] { font-size: 110%; } .text-\[130\%\] { font-size: 130%; } + .text-\[150\%\] { + font-size: 150%; + } .leading-\[normal\] { --tw-leading: normal; line-height: normal; } + .leading-none { + --tw-leading: 1; + line-height: 1; + } + .leading-relaxed { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } .font-\[150\%\] { --tw-font-weight: 150%; font-weight: 150%; @@ -698,6 +1242,10 @@ --tw-font-weight: var(--font-weight-normal); font-weight: var(--font-weight-normal); } + .tracking-wider { + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } .wrap-anywhere { overflow-wrap: anywhere; } @@ -710,6 +1258,12 @@ .text-\(--alt\) { color: var(--alt); } + .text-\(--background\) { + color: var(--background); + } + .text-\(--bg\) { + color: var(--bg); + } .text-\(--extra\) { color: var(--extra); } @@ -719,15 +1273,39 @@ .text-\(--secondary\) { color: var(--secondary); } + .text-\(--text\) { + color: var(--text); + } .text-\[\#54D7A9\] { color: #54D7A9; } + .text-\[\#5874FF\] { + color: #5874FF; + } .text-\[\#D8C44B\] { color: #D8C44B; } + .text-\[\#F5A670\] { + color: #F5A670; + } .text-\[\#F16265\] { color: #F16265; } + .text-\[\#FF0000\] { + color: #FF0000; + } + .text-\[\#FFFFFF\] { + color: #FFFFFF; + } + .text-\[\#\] { + color: #; + } + .text-\[\#ffffff\] { + color: #ffffff; + } + .text-\[\%v\] { + color: %v; + } .text-\[--\] { color: --; } @@ -746,9 +1324,33 @@ .text-\[var\(--accent\)\] { color: var(--accent); } + .text-\[var\(--primary\)\] { + color: var(--primary); + } .text-\[var\(--secondary\)\] { color: var(--secondary); } + .text-emerald-400 { + color: var(--color-emerald-400); + } + .text-red-400 { + color: var(--color-red-400); + } + .text-zinc-200 { + color: var(--color-zinc-200); + } + .text-zinc-300 { + color: var(--color-zinc-300); + } + .text-zinc-400 { + color: var(--color-zinc-400); + } + .text-zinc-500 { + color: var(--color-zinc-500); + } + .uppercase { + text-transform: uppercase; + } .no-underline { text-decoration-line: none; } @@ -758,32 +1360,71 @@ .opacity-0 { opacity: 0%; } + .shadow-\[0_0_15px_rgba\(0\,0\,0\,0\.3\)\] { + --tw-shadow: 0 0 15px var(--tw-shadow-color, rgba(0,0,0,0.3)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } .outline { outline-style: var(--tw-outline-style); outline-width: 1px; } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } .transition-colors { transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); transition-duration: var(--tw-duration, var(--default-transition-duration)); } + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-150 { + --tw-duration: 150ms; + transition-duration: 150ms; + } .select-text { -webkit-user-select: text; user-select: text; } + .\[--border-py\:0\.0rem\] { + --border-py: 0.0rem; + } + .\[--border-py\:0\.2rem\] { + --border-py: 0.2rem; + } + .\[--border-py\:0\.3rem\] { + --border-py: 0.3rem; + } .\[--border-py\:0\.5rem\] { --border-py: 0.5rem; } + .\[--border-py\:0\.25rem\] { + --border-py: 0.25rem; + } .\[--border-py\:0\.75rem\] { --border-py: 0.75rem; } .\[--border-py\:0\.875rem\] { --border-py: 0.875rem; } + .\[--border-py\:0\.rem\] { + --border-py: 0.rem; + } .\[--ypad\:var\(--border-py\,0\.875rem\)\] { --ypad: var(--border-py,0.875rem); } @media (hover: hover) { + .group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *) { + color: var(--accent); + } .group-hover\:text-\[var\(--alt\)\]:is(:where(.group):hover *) { color: var(--alt); } @@ -807,6 +1448,18 @@ } } @media (hover: hover) { + .hover\:translate-x-1:hover { + --tw-translate-x: var(--spacing); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .hover\:border-white\/20:hover { + border-color: color-mix(in srgb, #fff 20%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:border-white\/20:hover { + border-color: color-mix(in oklab, var(--color-white) 20%, transparent); + } + } .hover\:bg-\(--alt\)\/25:hover { background-color: var(--alt); } @@ -815,21 +1468,134 @@ background-color: color-mix(in oklab, var(--alt) 25%, transparent); } } + .hover\:bg-black\/0:hover { + background-color: color-mix(in srgb, #000 0%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-black\/0:hover { + background-color: color-mix(in oklab, var(--color-black) 0%, transparent); + } + } + .hover\:bg-black\/20:hover { + background-color: color-mix(in srgb, #000 20%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-black\/20:hover { + background-color: color-mix(in oklab, var(--color-black) 20%, transparent); + } + } + .hover\:bg-black\/50:hover { + background-color: color-mix(in srgb, #000 50%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-black\/50:hover { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + } + .hover\:bg-white\/0:hover { + background-color: color-mix(in srgb, #fff 0%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/0:hover { + background-color: color-mix(in oklab, var(--color-white) 0%, transparent); + } + } + .hover\:bg-white\/1:hover { + background-color: color-mix(in srgb, #fff 1%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/1:hover { + background-color: color-mix(in oklab, var(--color-white) 1%, transparent); + } + } + .hover\:bg-white\/2:hover { + background-color: color-mix(in srgb, #fff 2%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/2:hover { + background-color: color-mix(in oklab, var(--color-white) 2%, transparent); + } + } + .hover\:bg-white\/5:hover { + background-color: color-mix(in srgb, #fff 5%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/5:hover { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } + .hover\:bg-white\/10:hover { + background-color: color-mix(in srgb, #fff 10%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/10:hover { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + .hover\:bg-white\/20:hover { + background-color: color-mix(in srgb, #fff 20%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/20:hover { + background-color: color-mix(in oklab, var(--color-white) 20%, transparent); + } + } + .hover\:bg-white\/50:hover { + background-color: color-mix(in srgb, #fff 50%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/50:hover { + background-color: color-mix(in oklab, var(--color-white) 50%, transparent); + } + } + .hover\:bg-white\/\[0\.04\]:hover { + background-color: color-mix(in srgb, #fff 4%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/\[0\.04\]:hover { + background-color: color-mix(in oklab, var(--color-white) 4%, transparent); + } + } + .hover\:bg-white\/\[0\.05\]:hover { + background-color: color-mix(in srgb, #fff 5%, transparent); + } + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-white\/\[0\.05\]:hover { + background-color: color-mix(in oklab, var(--color-white) 5%, transparent); + } + } .hover\:text-\(--accent\):hover { color: var(--accent); } .hover\:text-\[var\(--alt\)\]:hover { color: var(--alt); } + .hover\:text-\[var\(--primary\)\]:hover { + color: var(--primary); + } .hover\:text-\[var\(--secondary\)\]:hover { color: var(--secondary); } .hover\:text-gray-700:hover { color: var(--color-gray-700); } + .hover\:text-white:hover { + color: var(--color-white); + } .hover\:no-underline:hover { text-decoration-line: none; } + .hover\:underline:hover { + text-decoration-line: underline; + } + .hover\:brightness-100:hover { + --tw-brightness: brightness(100%); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .hover\:brightness-200:hover { + --tw-brightness: brightness(200%); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } } .data-copied\:animate-\[bump_0\.25s\][data-copied] { animation: bump 0.25s; @@ -997,9 +1763,29 @@ } } @media (width >= 48rem) { + .md\:col-span-2 { + grid-column: span 2 / span 2; + } + .md\:col-span-3 { + grid-column: span 3 / span 3; + } .md\:grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } + .md\:grid-cols-6 { + grid-template-columns: repeat(6, minmax(0, 1fr)); + } + .md\:flex-row { + flex-direction: row; + } + .md\:items-center { + align-items: center; + } + } + @media (width >= 64rem) { + .lg\:flex { + display: flex; + } } .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar { display: none; @@ -1061,6 +1847,11 @@ inherits: false; initial-value: 0; } +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} @property --tw-border-style { syntax: "*"; inherits: false; @@ -1074,11 +1865,142 @@ syntax: "*"; inherits: false; } +@property --tw-tracking { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} @property --tw-outline-style { syntax: "*"; inherits: false; initial-value: solid; } +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@keyframes pulse { + 50% { + opacity: 0.5; + } +} @layer properties { @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { *, ::before, ::after, ::backdrop { @@ -1091,10 +2013,40 @@ --tw-skew-x: initial; --tw-skew-y: initial; --tw-space-x-reverse: 0; + --tw-divide-y-reverse: 0; --tw-border-style: solid; --tw-leading: initial; --tw-font-weight: initial; + --tw-tracking: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-duration: initial; } } } diff --git a/website.go b/website.go index b8c0e76..fce6efc 100644 --- a/website.go +++ b/website.go @@ -23,6 +23,18 @@ import ( //go:embed public blogs var embedded embed.FS +func Color(color string) string { + var result string + if strings.HasPrefix(color, "#") { + result = fmt.Sprintf("text-[%v]", color) + } else if strings.HasPrefix(color, "--") { + result = fmt.Sprintf("text-(%v)", color) + } else { + result = color + } + return result +} + func Assert(ok bool) { if !ok { panic("assertion failure") @@ -252,53 +264,53 @@ func latestBlog(blogs []Blog) *Blog { return &blogs[0] } -type Project struct { - Name string - Type string - Desc []string - Cmd string - Link string -} - -var projects = []Project{ - { - Name: "CPU vs AI", - Type: "Game (made with Zig)", - Desc: []string{ - "A tower defense game where an AI chip on your motherboard", - "generates bugs! Place CPUs to destroy the bugs!", - "Don't let them corrupt your RAM!", - }, - }, - { - Name: "Eko", - Type: "Social Media Platform", - Desc: []string{ - "A terminal-native alternative", - "to Discord for Terminal", - "nerds!", - }, - }, - { - Name: "Trident", - Type: "IntelliJ Plugin", - Desc: []string{ - "A blazingly fast way to", - "Navigate to your mosta used", - "files. Minimize keystrokes", - "and maximize productivity!", - }, - }, - { - Name: "Dotfiles", - Type: "Configuration", - Desc: []string{ - "My Linux configuration,", - "includes Neovim, tmux and", - "other programs.", - }, - }, -} +// type Project struct { +// Name string +// Type string +// Desc []string +// Cmd string +// Link string +// } +// +// var projects = []Project{ +// { +// Name: "CPU vs AI", +// Type: "Game (made with Zig)", +// Desc: []string{ +// "A tower defense game where an AI chip on your motherboard", +// "generates bugs! Place CPUs to destroy the bugs!", +// "Don't let them corrupt your RAM!", +// }, +// }, +// { +// Name: "Eko", +// Type: "Social Media Platform", +// Desc: []string{ +// "A terminal-native alternative", +// "to Discord for Terminal", +// "nerds!", +// }, +// }, +// { +// Name: "Trident", +// Type: "IntelliJ Plugin", +// Desc: []string{ +// "A blazingly fast way to", +// "Navigate to your mosta used", +// "files. Minimize keystrokes", +// "and maximize productivity!", +// }, +// }, +// { +// Name: "Dotfiles", +// Type: "Configuration", +// Desc: []string{ +// "My Linux configuration,", +// "includes Neovim, tmux and", +// "other programs.", +// }, +// }, +// } func styleHandler(cookie string, lookup func(string) (map[string]string, bool)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { @@ -384,8 +396,9 @@ func handleUptimePing(w http.ResponseWriter, r *http.Request) { func main() { carbonightCat := Theme{ - primary: "#94e2d5", + // primary: "#94e2d5", // secondary: "#b4befe", + primary: "#54D7A9", secondary: "#BB91F0", accent: "#74c7ec", extra: "#a6e3a1", @@ -474,6 +487,7 @@ func main() { }) mux.HandleFunc("GET /projects", func(w http.ResponseWriter, r *http.Request) { + projects := []Project{p, p, p, p, p, p, p, p} ProjectsPage(currentStyle(r), projects).Render(r.Context(), w) }) diff --git a/website.templ b/website.templ index 1f4f636..88b8c40 100644 --- a/website.templ +++ b/website.templ @@ -5,7 +5,7 @@ templ HeadComponent(title string, description string) { - + @@ -16,7 +16,7 @@ templ HeadComponent(title string, description string) { - + @@ -29,7 +29,7 @@ templ HeadComponent(title string, description string) { } templ BlogItem(header string, blog Blog, extra string) { - @TerminalBorder(header, blog.Date.Format("January 2, 2006"), extra) { + @TerminalBorder(header, blog.Date.Format("January 2, 2006"), "bg-black/20 hover:bg-white/5 transition-colors duration-150 "+extra) {

@@ -61,10 +61,15 @@ templ TerminalStack(joined bool, extra string) { templ TerminalBorder(header string, footer string, extra string) {
- { header } - { footer } + { header } + { footer } { children... }
+ //
+ // { header } + // { footer } + // { children... } + //
} templ CopyIcon() { @@ -224,7 +229,7 @@ func footerClass(connected bool) string { templ SkillsPage(style Style) { @TerminalLayout(style, "/home/kyren/skills.md") { @TerminalStack(false, "") { - @TerminalBorder("Setup", "", "") { + @TerminalBorder("Info", "", "") { $ fastfetch @Fastfetch(fetchRows) @@ -234,17 +239,223 @@ templ SkillsPage(style Style) { } } +type Project struct { + Slug string // e.g. "my-game" + Title string // e.g. "MyGame" + Category string // e.g. "Game written in Zig" + Desc string // 1-2 line description/pitch + Tags []ProjectTag // ["Zig", "OpenGL", "Linux"] + Status string + Icon templ.Component + CgitURL string // e.g. "https://cgit.yourdomain.com/my-game" + GithubURL string // Fallback mirror link + IsFlagship bool + IsPinned bool +} + +type ProjectTag struct { + Name string + Color string +} + +type ProjectFLink struct { + URL string + Icon templ.Component +} + +var p Project = Project{ + Slug: "krypton", + Title: "Krypton", + Category: "Programming Language Compiler", + Desc: "A modern Minecraft creator event. As a developer, I helped with minor improvements to the cosmetics system. ", + Icon: IconCpu("text-[#F5A670] self-center"), + Status: "ON", + Tags: []ProjectTag{ + // {"Programming Language", Color("--extra")}, + // {"Compiler", Color("--extra")}, + {"C", Color("text-[#5874FF]")}, + {"LLVM", Color("text-[#FFFFFF]")}, + // {"Java", Color("#F5A670")}, + }, + CgitURL: "https://whatever", + GithubURL: "", + IsFlagship: true, + IsPinned: false, +} + +templ FlagshipProject(project Project) { +
+ + + +
+

+ { project.Title } +

+ { project.Category } +
+ +

{ project.Desc }

+ +
+
+ for _, tag := range project.Tags { + { tag.Name } + } +
+ + View Project Details → + +
+
+} + +templ PinnedGrid(projects []Project) { +
+
+ // Notable Projects
+
+ for i, project := range projects { + +
= 2) } + > +
+ +
+

+ { project.Title } +

+ { project.Category } +
+ +

{ project.Desc }

+
+ +
+
+ for _, tag := range project.Tags { + { tag.Name } + } +
+
+ if project.CgitURL != "" { + [cgit] + } + if project.GithubURL != "" { + [gh] + } +
+
+
+ } +
+
+ +} + +templ IconLink(href string, label string, extra string) { + + { children... } + +} + +templ IconGit(color string) { + @Icon(color) { + + + + + } +} + +templ IconGithub(color string) { + @Icon(color) { + + + } +} + +templ IconExternal(color string) { + @Icon(color) { + + + + } +} + +templ ProjectItem(project Project, extra string) { +
+ @TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra) { +
+
+ @project.Icon + { project.Title } + { project.Category } + for _, tag := range project.Tags { + { tag.Name } + } + // for _, tag := range project.Tags { + // { tag } + // } + + @IconLink("https://git.example.com/foo", "git", "") { + @IconGit("text-(--primary)") + } + @IconLink("https://github.com/foo", "github", "") { + @IconGithub("text-(--secondary)") + } + @IconLink("https://example.com", "website", "") { + @IconExternal("text-(--accent)") + } + +
+

{ project.Desc }

+
+ } +
+} + +func DoubleProject(project Project) Project { + project.Desc += project.Desc + return project +} + templ ProjectsPage(style Style, projects []Project) { @TerminalLayout(style, "/home/kyren/projects") { -

Items

-
-
    -
  • - foo - [ACTIVE] -
  • -
-
+ @FlagshipProject(p) + // @PinnedGrid(projects) + // All projects + @ScrollBox("") { + @TerminalStack(false, "mt-[0.5rem]") { + for i := 0; i < 1; i++ { + for i, project := range projects { + if i % 2 == 0 { + @ProjectItem(DoubleProject(project), "my-[-0.15rem]") + } else { + @ProjectItem(project, "my-[-0.15rem]") + } + } + } + } + } } } @@ -258,14 +469,27 @@ templ NotFoundPage(style Style, path string) {
} @TerminalBorder("", "", "") { -
- { ">" } - - @Link("/", false) { - { "cd $HOME" } - } - -
+ +
+ { ">" } + + @Link("javascript:history.back()", false) { + { "cd -" } + } + + + # Previous page + +
+
+ { ">" } + + @Link("/", false) { + { "cd $HOME" } + } + +
+
} } } @@ -372,13 +596,13 @@ func row(icon func(color string) templ.Component, color, label, value string) Fe var fetchRows = []FetchRow{ // row(IconTerminal, "text-(--secondary)", "Terminal", "Ghostty & Zsh"), - row(IconCode, "text-(--accent)", "Main Language", "C"), - row(IconScriptLang, "text-(--accent)", "Scripting Langs", "Go and Python"), - row(IconDebugger, "text-[#F16265]", "Debugger", "Raddebugger"), - row(IconMonitor, "text-[#54D7A9]", "Operating System", "Fedora KDE Linux"), - row(IconEditor, "text-[#54D7A9]", "Text Editor", "Neovim"), - row(IconUptime, "text-[#D8C44B]", "Uptime", GetMyUptime()), - // row(IconCpu, "text-(--extra)", "Hardware", "..."), + row(IconCode, "--accent", "Main Language", "C"), + row(IconScriptLang, "--accent", "Scripting Langs", "Go and Python"), + row(IconDebugger, "#F16265", "Debugger", "Raddebugger"), + row(IconMonitor, "#54D7A9", "Operating System", "Fedora KDE Linux"), + row(IconEditor, "#54D7A9", "Text Editor", "Neovim"), + row(IconUptime, "#D8C44B", "Uptime", "Asleep"), + // row(IconCpu, "--extra", "Hardware", "..."), } func branch(i, n int) string { @@ -414,7 +638,7 @@ templ Fastfetch(rows []FetchRow) { } templ Icon(color string) { - ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -175,7 +175,7 @@ func BlogItem(header string, blog Blog, extra string) templ.Component { } return nil }) - templ_7745c5c3_Err = TerminalBorder(header, blog.Date.Format("January 2, 2006"), extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder(header, blog.Date.Format("January 2, 2006"), "bg-black/20 hover:bg-white/5 transition-colors duration-150 "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -337,27 +337,27 @@ func TerminalBorder(header string, footer string, extra string) templ.Component if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } 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: 64, Col: 137} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 64, Col: 190} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } 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: 65, Col: 140} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 65, Col: 175} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20)) if templ_7745c5c3_Err != nil { @@ -453,7 +453,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str var templ_7745c5c3_Var24 templ.SafeURL templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 78, Col: 33} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 83, Col: 33} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24)) if templ_7745c5c3_Err != nil { @@ -479,7 +479,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str var templ_7745c5c3_Var25 string templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.ResolveAttributeValue(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 82, Col: 26} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 87, Col: 26} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var25) if templ_7745c5c3_Err != nil { @@ -515,7 +515,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str var templ_7745c5c3_Var26 string templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.ResolveAttributeValue(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 90, Col: 42} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 95, Col: 42} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var26) if templ_7745c5c3_Err != nil { @@ -571,7 +571,7 @@ func CopyPre(text string, preClass string) templ.Component { var templ_7745c5c3_Var28 string templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 99, Col: 39} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 104, Col: 39} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28) if templ_7745c5c3_Err != nil { @@ -643,7 +643,7 @@ func NavLink(href string, label string) templ.Component { var templ_7745c5c3_Var32 templ.SafeURL templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 108, Col: 30} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 30} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32)) if templ_7745c5c3_Err != nil { @@ -656,7 +656,7 @@ func NavLink(href string, label string) templ.Component { var templ_7745c5c3_Var33 string templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 108, Col: 87} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 87} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33)) if templ_7745c5c3_Err != nil { @@ -698,7 +698,7 @@ func Nav(path string) templ.Component { var templ_7745c5c3_Var35 string templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(path) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 14} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 118, Col: 14} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35)) if templ_7745c5c3_Err != nil { @@ -758,7 +758,7 @@ func TerminalLayout(style Style, path string) templ.Component { var templ_7745c5c3_Var37 string templ_7745c5c3_Var37, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(styleToCss(style)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 126, Col: 42} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 131, Col: 42} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37)) if templ_7745c5c3_Err != nil { @@ -921,7 +921,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { var templ_7745c5c3_Var46 string templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(fingerprint) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 161, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 166, Col: 21} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46)) if templ_7745c5c3_Err != nil { @@ -1188,7 +1188,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component { var templ_7745c5c3_Var58 string templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(sshKey) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 210, Col: 12} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 215, Col: 12} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58)) if templ_7745c5c3_Err != nil { @@ -1293,7 +1293,7 @@ func SkillsPage(style Style) templ.Component { } return nil }) - templ_7745c5c3_Err = TerminalBorder("Setup", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Info", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1313,6 +1313,868 @@ func SkillsPage(style Style) templ.Component { }) } +type Project struct { + Slug string // e.g. "my-game" + Title string // e.g. "MyGame" + Category string // e.g. "Game written in Zig" + Desc string // 1-2 line description/pitch + Tags []ProjectTag // ["Zig", "OpenGL", "Linux"] + Status string + Icon templ.Component + CgitURL string // e.g. "https://cgit.yourdomain.com/my-game" + GithubURL string // Fallback mirror link + IsFlagship bool + IsPinned bool +} + +type ProjectTag struct { + Name string + Color string +} + +type ProjectFLink struct { + URL string + Icon templ.Component +} + +var p Project = Project{ + Slug: "krypton", + Title: "Krypton", + Category: "Programming Language Compiler", + Desc: "A modern Minecraft creator event. As a developer, I helped with minor improvements to the cosmetics system. ", + Icon: IconCpu("text-[#F5A670] self-center"), + Status: "ON", + Tags: []ProjectTag{ + // {"Programming Language", Color("--extra")}, + // {"Compiler", Color("--extra")}, + {"C", Color("text-[#5874FF]")}, + {"LLVM", Color("text-[#FFFFFF]")}, + // {"Java", Color("#F5A670")}, + }, + CgitURL: "https://whatever", + GithubURL: "", + IsFlagship: true, + IsPinned: false, +} + +func FlagshipProject(project Project) 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_Var63 := templ.GetChildren(ctx) + if templ_7745c5c3_Var63 == nil { + templ_7745c5c3_Var63 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "
FLAGSHIP BUILD | ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var64 string + templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(project.Status) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 294, Col: 48} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if project.CgitURL != "" { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "[cgit] ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + if project.GithubURL != "" { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "[github]") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var68 string + templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 308, Col: 94} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var69 string + templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 310, Col: 67} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var70 string + templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 313, Col: 80} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for _, tag := range project.Tags { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + 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: 318, Col: 97} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "
View Project Details →
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func PinnedGrid(projects []Project) 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_Var73 := templ.GetChildren(ctx) + if templ_7745c5c3_Var73 == nil { + templ_7745c5c3_Var73 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for i, project := range projects { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var74 = []any{"group border border-white/10 rounded bg-white/[0.02] hover:bg-white/[0.05] hover:border-white/20 transition-all p-5 flex flex-col justify-between", + templ.KV("md:col-span-3", i < 2), + templ.KV("md:col-span-2", i >= 2)} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var74...) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var77 string + templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 344, Col: 99} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var78 string + templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 346, Col: 81} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var79 string + templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 349, Col: 88} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for _, tag := range project.Tags { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var80 string + templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 355, Col: 102} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if project.CgitURL != "" { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "[cgit] ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + if project.GithubURL != "" { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "[gh]") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func IconLink(href string, label string, extra 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_Var83 := templ.GetChildren(ctx) + if templ_7745c5c3_Var83 == nil { + templ_7745c5c3_Var83 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + var templ_7745c5c3_Var84 = []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_Var84...) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var83.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func IconGit(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_Var89 := templ.GetChildren(ctx) + if templ_7745c5c3_Var89 == nil { + templ_7745c5c3_Var89 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Var90 := 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, 108, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var90), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func IconGithub(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_Var91 := templ.GetChildren(ctx) + if templ_7745c5c3_Var91 == nil { + templ_7745c5c3_Var91 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Var92 := 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, 109, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var92), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func IconExternal(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_Var93 := templ.GetChildren(ctx) + if templ_7745c5c3_Var93 == nil { + templ_7745c5c3_Var93 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Var94 := 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, 110, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var94), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func ProjectItem(project Project, extra 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_Var95 := templ.GetChildren(ctx) + if templ_7745c5c3_Var95 == nil { + templ_7745c5c3_Var95 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var96 := 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, 112, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = project.Icon.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var98 string + templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 410, Col: 121} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var99 string + templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 411, Col: 65} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for _, tag := range project.Tags { + var templ_7745c5c3_Var100 = []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_Var100...) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var102 string + templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 413, Col: 136} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var103 := 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 = IconGit("text-(--primary)").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = IconLink("https://git.example.com/foo", "git", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var103), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var104 := 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 = IconGithub("text-(--secondary)").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = IconLink("https://github.com/foo", "github", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var104), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var105 := 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 = IconExternal("text-(--accent)").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = IconLink("https://example.com", "website", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var105), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var106 string + templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 430, Col: 40} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var96), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func DoubleProject(project Project) Project { + project.Desc += project.Desc + return project +} + func ProjectsPage(style Style, projects []Project) 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 @@ -1329,12 +2191,12 @@ func ProjectsPage(style Style, projects []Project) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var63 := templ.GetChildren(ctx) - if templ_7745c5c3_Var63 == nil { - templ_7745c5c3_Var63 = templ.NopComponent + templ_7745c5c3_Var107 := templ.GetChildren(ctx) + if templ_7745c5c3_Var107 == nil { + templ_7745c5c3_Var107 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var64 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var108 := 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 { @@ -1346,13 +2208,68 @@ func ProjectsPage(style Style, projects []Project) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "

Items

  • foo [ACTIVE]
") + templ_7745c5c3_Err = FlagshipProject(p).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var109 := 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_Var110 := 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) + for i := 0; i < 1; i++ { + for i, project := range projects { + if i%2 == 0 { + templ_7745c5c3_Err = ProjectItem(DoubleProject(project), "my-[-0.15rem]").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + templ_7745c5c3_Err = ProjectItem(project, "my-[-0.15rem]").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + } + } + return nil + }) + templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var110), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var109), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var64), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var108), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1376,12 +2293,12 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var65 := templ.GetChildren(ctx) - if templ_7745c5c3_Var65 == nil { - templ_7745c5c3_Var65 = templ.NopComponent + templ_7745c5c3_Var111 := templ.GetChildren(ctx) + if templ_7745c5c3_Var111 == nil { + templ_7745c5c3_Var111 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var66 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var112 := 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 { @@ -1393,7 +2310,7 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var67 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var113 := 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 { @@ -1405,7 +2322,7 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var68 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var114 := 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 { @@ -1417,43 +2334,43 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "

$ cd ~") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "

$ cd ~") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var69 string - templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(path) + var templ_7745c5c3_Var115 string + templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(path) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 256, Col: 20} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 467, Col: 20} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69)) + _, 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, 72, "

\"") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "

\"") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var70 string - templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:]) + var templ_7745c5c3_Var116 string + templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:]) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 257, Col: 32} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 468, Col: 32} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\": No such file or directory (os error 2)

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "\": No such file or directory (os error 2)

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var68), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var114), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var71 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var117 := 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 { @@ -1465,24 +2382,68 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var118 string + templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinStringErrs(">") + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 474, Col: 17} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Var119 := 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) + var templ_7745c5c3_Var120 string + templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinStringErrs("cd -") + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 477, Col: 16} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = Link("javascript:history.back()", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var119), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, " # Previous page
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var72 string - templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(">") + var templ_7745c5c3_Var121 string + templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(">") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 262, Col: 16} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 485, Col: 17} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var73 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var122 := 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 { @@ -1494,40 +2455,40 @@ func NotFoundPage(style Style, path string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - var templ_7745c5c3_Var74 string - templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME") + var templ_7745c5c3_Var123 string + templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 265, Col: 19} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 488, Col: 20} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var73), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var122), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var71), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var117), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var67), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var113), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "404").Render(templ.WithChildren(ctx, templ_7745c5c3_Var66), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "404").Render(templ.WithChildren(ctx, templ_7745c5c3_Var112), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1551,38 +2512,38 @@ func ScrollBox(extra string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var75 := templ.GetChildren(ctx) - if templ_7745c5c3_Var75 == nil { - templ_7745c5c3_Var75 = templ.NopComponent + templ_7745c5c3_Var124 := templ.GetChildren(ctx) + if templ_7745c5c3_Var124 == nil { + templ_7745c5c3_Var124 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var76 = []any{"flex flex-1 min-h-0", extra} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var76...) + var templ_7745c5c3_Var125 = []any{"flex flex-1 min-h-0", extra} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var125...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "\">
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var75.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templ_7745c5c3_Var124.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1606,12 +2567,12 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var78 := templ.GetChildren(ctx) - if templ_7745c5c3_Var78 == nil { - templ_7745c5c3_Var78 = templ.NopComponent + templ_7745c5c3_Var127 := templ.GetChildren(ctx) + if templ_7745c5c3_Var127 == nil { + templ_7745c5c3_Var127 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var79 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var128 := 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 { @@ -1623,7 +2584,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var80 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var129 := 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 { @@ -1635,17 +2596,17 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "$ ls -lh ~/blogs") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "$ ls -lh ~/blogs") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var80), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var129), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Var81 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var130 := 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 { @@ -1657,7 +2618,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var82 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var131 := 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 { @@ -1679,19 +2640,19 @@ func BlogsPage(style Style, blogs []Blog) templ.Component { } return nil }) - templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var82), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var131), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var81), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var130), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var79), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var128), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1722,12 +2683,12 @@ func IconMonitor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var83 := templ.GetChildren(ctx) - if templ_7745c5c3_Var83 == nil { - templ_7745c5c3_Var83 = templ.NopComponent + templ_7745c5c3_Var132 := templ.GetChildren(ctx) + if templ_7745c5c3_Var132 == nil { + templ_7745c5c3_Var132 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var84 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var133 := 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 { @@ -1739,13 +2700,13 @@ func IconMonitor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var84), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var133), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1769,12 +2730,12 @@ func IconTerminal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var85 := templ.GetChildren(ctx) - if templ_7745c5c3_Var85 == nil { - templ_7745c5c3_Var85 = templ.NopComponent + templ_7745c5c3_Var134 := templ.GetChildren(ctx) + if templ_7745c5c3_Var134 == nil { + templ_7745c5c3_Var134 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var86 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var135 := 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 { @@ -1786,13 +2747,13 @@ func IconTerminal(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var86), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var135), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1816,12 +2777,12 @@ func IconCode(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var87 := templ.GetChildren(ctx) - if templ_7745c5c3_Var87 == nil { - templ_7745c5c3_Var87 = templ.NopComponent + templ_7745c5c3_Var136 := templ.GetChildren(ctx) + if templ_7745c5c3_Var136 == nil { + templ_7745c5c3_Var136 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var88 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var137 := 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 { @@ -1833,13 +2794,13 @@ func IconCode(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var88), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var137), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1863,12 +2824,12 @@ func IconCpu(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var89 := templ.GetChildren(ctx) - if templ_7745c5c3_Var89 == nil { - templ_7745c5c3_Var89 = templ.NopComponent + templ_7745c5c3_Var138 := templ.GetChildren(ctx) + if templ_7745c5c3_Var138 == nil { + templ_7745c5c3_Var138 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var90 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var139 := 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 { @@ -1880,13 +2841,13 @@ func IconCpu(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var90), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var139), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1910,12 +2871,12 @@ func IconScriptLang(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var91 := templ.GetChildren(ctx) - if templ_7745c5c3_Var91 == nil { - templ_7745c5c3_Var91 = templ.NopComponent + templ_7745c5c3_Var140 := templ.GetChildren(ctx) + if templ_7745c5c3_Var140 == nil { + templ_7745c5c3_Var140 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var92 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var141 := 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 { @@ -1927,13 +2888,13 @@ func IconScriptLang(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var92), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var141), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -1957,12 +2918,12 @@ func IconEditor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var93 := templ.GetChildren(ctx) - if templ_7745c5c3_Var93 == nil { - templ_7745c5c3_Var93 = templ.NopComponent + templ_7745c5c3_Var142 := templ.GetChildren(ctx) + if templ_7745c5c3_Var142 == nil { + templ_7745c5c3_Var142 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var94 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var143 := 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 { @@ -1974,13 +2935,13 @@ func IconEditor(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var94), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var143), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2004,12 +2965,12 @@ func IconDebugger(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var95 := templ.GetChildren(ctx) - if templ_7745c5c3_Var95 == nil { - templ_7745c5c3_Var95 = templ.NopComponent + templ_7745c5c3_Var144 := templ.GetChildren(ctx) + if templ_7745c5c3_Var144 == nil { + templ_7745c5c3_Var144 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var96 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var145 := 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 { @@ -2021,13 +2982,13 @@ func IconDebugger(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var96), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var145), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2051,12 +3012,12 @@ func IconKeyboard(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var97 := templ.GetChildren(ctx) - if templ_7745c5c3_Var97 == nil { - templ_7745c5c3_Var97 = templ.NopComponent + templ_7745c5c3_Var146 := templ.GetChildren(ctx) + if templ_7745c5c3_Var146 == nil { + templ_7745c5c3_Var146 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var98 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var147 := 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 { @@ -2068,13 +3029,13 @@ func IconKeyboard(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var98), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var147), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2098,12 +3059,12 @@ func IconUptime(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var99 := templ.GetChildren(ctx) - if templ_7745c5c3_Var99 == nil { - templ_7745c5c3_Var99 = templ.NopComponent + templ_7745c5c3_Var148 := templ.GetChildren(ctx) + if templ_7745c5c3_Var148 == nil { + templ_7745c5c3_Var148 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var100 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var149 := 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 { @@ -2115,13 +3076,13 @@ func IconUptime(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var100), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var149), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2135,13 +3096,13 @@ func row(icon func(color string) templ.Component, color, label, value string) Fe var fetchRows = []FetchRow{ // row(IconTerminal, "text-(--secondary)", "Terminal", "Ghostty & Zsh"), - row(IconCode, "text-(--accent)", "Main Language", "C"), - row(IconScriptLang, "text-(--accent)", "Scripting Langs", "Go and Python"), - row(IconDebugger, "text-[#F16265]", "Debugger", "Raddebugger"), - row(IconMonitor, "text-[#54D7A9]", "Operating System", "Fedora KDE Linux"), - row(IconEditor, "text-[#54D7A9]", "Text Editor", "Neovim"), - row(IconUptime, "text-[#D8C44B]", "Uptime", GetMyUptime()), - // row(IconCpu, "text-(--extra)", "Hardware", "..."), + row(IconCode, "--accent", "Main Language", "C"), + row(IconScriptLang, "--accent", "Scripting Langs", "Go and Python"), + row(IconDebugger, "#F16265", "Debugger", "Raddebugger"), + row(IconMonitor, "#54D7A9", "Operating System", "Fedora KDE Linux"), + row(IconEditor, "#54D7A9", "Text Editor", "Neovim"), + row(IconUptime, "#D8C44B", "Uptime", "Asleep"), + // row(IconCpu, "--extra", "Hardware", "..."), } func branch(i, n int) string { @@ -2173,30 +3134,30 @@ func Fastfetch(rows []FetchRow) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var101 := templ.GetChildren(ctx) - if templ_7745c5c3_Var101 == nil { - templ_7745c5c3_Var101 = templ.NopComponent + templ_7745c5c3_Var150 := templ.GetChildren(ctx) + if templ_7745c5c3_Var150 == nil { + templ_7745c5c3_Var150 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for i, row := range rows { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var102 string - templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows))) + var templ_7745c5c3_Var151 string + templ_7745c5c3_Var151, 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: 408, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 632, Col: 52} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2204,69 +3165,69 @@ func Fastfetch(rows []FetchRow) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var103 = []any{row.Color, "font-bold"} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var103...) + var templ_7745c5c3_Var152 = []any{row.Color, "font-bold"} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var152...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var105 string - templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label) + var templ_7745c5c3_Var154 string + templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 410, Col: 53} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 634, Col: 53} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var107 string - templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value) + var templ_7745c5c3_Var156 string + templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 411, Col: 37} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 635, Col: 37} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -2290,38 +3251,38 @@ func Icon(color string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var108 := templ.GetChildren(ctx) - if templ_7745c5c3_Var108 == nil { - templ_7745c5c3_Var108 = templ.NopComponent + templ_7745c5c3_Var157 := templ.GetChildren(ctx) + if templ_7745c5c3_Var157 == nil { + templ_7745c5c3_Var157 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var templ_7745c5c3_Var109 = []any{"shrink-0", color} - templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var109...) + var templ_7745c5c3_Var158 = []any{"shrink-0", Color(color)} + templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var158...) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "\" 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 } - templ_7745c5c3_Err = templ_7745c5c3_Var108.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templ_7745c5c3_Var157.Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } -- cgit v1.3.1