commit b6d8497df5414b466f3ba7fde5e01ce1b78d6cfb
Author: Grant <5445379+grantdhunter@users.noreply.github.com>
Date: Sun Mar 16 11:20:59 2025 -0600
New site
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..419668e
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "themes/kayal"]
+ path = themes/kayal
+ url = https://github.com/mnjm/kayal.git
+ branch = main
diff --git a/.hugo_build.lock b/.hugo_build.lock
new file mode 100644
index 0000000..e69de29
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..25b6752
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+date = '{{ .Date }}'
+draft = true
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
++++
diff --git a/assets/icons/gitea.svg b/assets/icons/gitea.svg
new file mode 100644
index 0000000..ed949e8
--- /dev/null
+++ b/assets/icons/gitea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/incngrnt.webp b/assets/incngrnt.webp
new file mode 100644
index 0000000..96b1928
Binary files /dev/null and b/assets/incngrnt.webp differ
diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml
new file mode 100644
index 0000000..874e00b
--- /dev/null
+++ b/config/_default/hugo.toml
@@ -0,0 +1,8 @@
+baseURL = 'https://incngrnt.ca/'
+languageCode = 'en-ca'
+title = 'incngrnt'
+theme = 'kayal'
+
+
+[outputs]
+ home = ["HTML","RSS","JSON"]
diff --git a/config/_default/menus.toml b/config/_default/menus.toml
new file mode 100644
index 0000000..924765e
--- /dev/null
+++ b/config/_default/menus.toml
@@ -0,0 +1,11 @@
+[[main]]
+ name = "behind-icngrnt"
+ title = "Behind icngrnt"
+ url = "/behind-incngrnt/"
+ weight = 1
+[[main]]
+ name = "Gitea"
+ title = ""
+ pre = "gitea"
+ url = "https://git.incngrnt.ca/grant"
+ weight = 4
diff --git a/config/_default/params.toml b/config/_default/params.toml
new file mode 100644
index 0000000..d254147
--- /dev/null
+++ b/config/_default/params.toml
@@ -0,0 +1,10 @@
+logo = "incngrnt.webp"
+copyright = "Grant Hunter"
+inhancedTitle = "inc o ngr ue nt "
+enableSearch = false
+
+[homepage]
+showRecent = false
+
+[homepage.profile]
+headline = 'Just a little different'
diff --git a/content/_index.md b/content/_index.md
new file mode 100644
index 0000000..8ecb9a4
--- /dev/null
+++ b/content/_index.md
@@ -0,0 +1,16 @@
+Incngrnt is an experiment in host applications and services, usually run by huge
+corporations, on a small community scale. Using cloud technologies to enhance
+redundancy and maintainability while keeping as much as possible hosted locally.
+
+This project provides modern applications and services for friends and family,
+offering the convenience of cloud-based tools without sacrificing data privacy.
+
+
+The current instance, cheekily names Fog, is a [Kubernetes](https://kubernetes.io/)
+cluster of 3 [Talos Linux](https://www.talos.dev/) nodes. It uses [Ceph](https://ceph.io/en/)
+as the storage layer and [Metallb](https://metallb.io/) and
+[Traefik](https://traefik.io/traefik/) for networking. The whole cluster has a has backup
+[batteries](https://www.ecoflow.com/ca) in the event of a power failure. All configuration
+and setup docs live in a self-hosted [git repo](https://git.incngrnt.ca/grant/fog)
+running directly on Fog.
+
diff --git a/content/behind-incngrnt.md b/content/behind-incngrnt.md
new file mode 100644
index 0000000..e69de29
diff --git a/content/behind-incngrnt/_index.md b/content/behind-incngrnt/_index.md
new file mode 100644
index 0000000..12e424a
--- /dev/null
+++ b/content/behind-incngrnt/_index.md
@@ -0,0 +1,6 @@
+---
+title: 'Grant Hunter'
+showToC: false
+---
+
+
diff --git a/layouts/partials/extend-head.html b/layouts/partials/extend-head.html
new file mode 100644
index 0000000..3f0ab1a
--- /dev/null
+++ b/layouts/partials/extend-head.html
@@ -0,0 +1,21 @@
+
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
new file mode 100644
index 0000000..ff17ce9
--- /dev/null
+++ b/layouts/partials/header.html
@@ -0,0 +1,82 @@
+
diff --git a/public/404.html b/public/404.html
new file mode 100644
index 0000000..28d4e3c
--- /dev/null
+++ b/public/404.html
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+
+
+ 404 Page not found · incngrnt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 404 Not Found 🙁
+ It seems the page you're looking for has been moved or, in rare cases, removed.
+
+
+ Return to the home page?
+
+
+
+
+
+
+ © 2025 Grant Hunter
+
+
+
+
+
+
+
+
+
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..7c128af
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..01ccc4e
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..e8faa86
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/behind-incngrnt/index.html b/public/behind-incngrnt/index.html
new file mode 100644
index 0000000..02235d5
--- /dev/null
+++ b/public/behind-incngrnt/index.html
@@ -0,0 +1,389 @@
+
+
+
+
+
+
+
+
+
+
+ Grant Hunter · incngrnt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Grant Hunter
+
+
+
+
+
+
+
+
+
+
+ © 2025 Grant Hunter
+
+
+
+
+
+
+
+
+
diff --git a/public/behind-incngrnt/index.xml b/public/behind-incngrnt/index.xml
new file mode 100644
index 0000000..6d7c73d
--- /dev/null
+++ b/public/behind-incngrnt/index.xml
@@ -0,0 +1,11 @@
+
+
+
+ Grant Hunter on incngrnt
+ http://localhost:1313/behind-incngrnt/
+ Recent content in Grant Hunter on incngrnt
+ Hugo -- 0.145.0
+ en-ca
+
+
+
diff --git a/public/behind-incngrnt/page/1/index.html b/public/behind-incngrnt/page/1/index.html
new file mode 100644
index 0000000..59b86ab
--- /dev/null
+++ b/public/behind-incngrnt/page/1/index.html
@@ -0,0 +1,10 @@
+
+
+
+ http://localhost:1313/behind-incngrnt/
+
+
+
+
+
+
diff --git a/public/categories/index.html b/public/categories/index.html
new file mode 100644
index 0000000..597847b
--- /dev/null
+++ b/public/categories/index.html
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
+ Categories · incngrnt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Categories
+
+
+
+
+
+
+
+
+
+
+ © 2025 Grant Hunter
+
+
+
+
+
+
+
+
+
diff --git a/public/categories/index.xml b/public/categories/index.xml
new file mode 100644
index 0000000..bbc1a9d
--- /dev/null
+++ b/public/categories/index.xml
@@ -0,0 +1,11 @@
+
+
+
+ Categories on incngrnt
+ http://localhost:1313/categories/
+ Recent content in Categories on incngrnt
+ Hugo -- 0.145.0
+ en-ca
+
+
+
diff --git a/public/css/main.css b/public/css/main.css
new file mode 100644
index 0000000..8e63bd4
--- /dev/null
+++ b/public/css/main.css
@@ -0,0 +1,1000 @@
+@import url("theme.css");
+
+html {
+ line-height: 1.5rem;
+ scroll-behavior:smooth
+}
+
+body {
+ font-family: var(--ff);
+ background: var(--secondary-color);
+ color: var(--primary-color);
+ margin: 0 8px;
+ padding: 0;
+ transition: background 50ms ease-in-out, color 50ms ease-in-out;
+}
+
+header {
+ display: flex;
+ align-items:center;
+ line-height: 2.5em;
+ margin: 1rem 0 1rem 0rem;
+ padding-bottom: 1rem;
+ border-bottom: 1px solid var(--secondary-color-dark);
+}
+
+a {
+ color: var(--primary-color);
+ text-decoration: none;
+ border-bottom: 2px solid var(--tertiary-color);
+ word-break: break-word;
+ word-wrap: break-word;
+ overflow: break-word;
+}
+
+a:hover {
+ color: var(--link-color);
+}
+
+mark {
+ background-color: var(--tertiary-color-light);
+ color: var(--primary-color);
+}
+
+footer {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ border-top: 1px solid var(--secondary-color-dark);
+ margin-top: 1rem;
+ padding-top: 1rem;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 1.2rem;
+ line-height: normal;
+}
+
+h1::before { content: '# '; }
+h2::before { content: '## '; }
+h3::before { content: '### '; }
+h4::before { content: '#### '; }
+h5::before { content: '##### '; }
+h6::before { content: '###### '; }
+
+ul {
+ list-style-type: none;
+ padding-left: 20px;
+}
+
+ul li:before {
+ content: "-";
+ display: inline-block;
+ width: 1em;
+ margin-left: -1em;
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+ display: block;
+ margin: auto;
+ border-radius: var(--radius);
+}
+
+figcaption {
+ text-align: center;
+}
+
+figure h4::before {
+ content: '↳ ';
+}
+
+/* Code blocks */
+code {
+ background-color: var(--secondary-color-dark);
+ padding: 0 .2em;
+ word-break: break-word;
+ word-wrap: break-word;
+ overflow: break-word;
+}
+
+/*a code {*/
+/* border-bottom: 2px solid var(--tertiary-color);*/
+/*}*/
+
+pre {
+ line-height: 1.5;
+ padding: 0.5em;
+}
+
+pre code {
+ background-color: transparent;
+ color: inherit;
+ font-size: 100%;
+ padding: 0;
+ display: block;
+ overflow-x: auto;
+}
+
+.highlight pre code {
+ overflow-x: unset;
+}
+
+pre:has(code) {
+ color: var(--code-fg);
+ background-color: var(--code-bg);
+ border-radius: var(--radius);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.highlight>pre,
+.highlight>div {
+ border-radius: var(--radius);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+ overflow-x: auto;
+}
+
+.highlight tbody pre {
+ margin: 0;
+}
+
+.highlight pre ::selection {
+ background: rgba(255, 255, 255, 0.2);
+ color: inherit;
+}
+
+/* table */
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+table th{
+ padding: 6px;
+ border-bottom: 2px solid var(--tertiary-color);
+ font-size: large;
+}
+
+table td{
+ padding: 6px;
+ border-top: 1px solid var(--secondary-color-dark);
+}
+
+blockquote {
+ border-left: 4px solid var(--tertiary-color);
+ margin: 0;
+ padding-left: 2rem;
+ background: var(--secondary-color-dark);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+ border-radius: 0 var(--radius) var(--radius) 0;
+}
+
+details {
+ border-left: 4px solid var(--tertiary-color);
+ margin: 0;
+ padding: 0.25rem 0.5rem;
+ background: var(--secondary-color-dark);
+ border-radius: 0 var(--radius) var(--radius) 0;
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+/* Custom animation */
+@keyframes revealContent {
+0% { opacity: 0; }
+100% { opacity: 1; }
+}
+
+details[open] div {
+ animation: revealContent 0.5s ease-out forwards;
+}
+
+::selection {
+ background: var(--tertiary-color);
+ color: #fff;
+}
+
+.header-cntr {
+ display: flex;
+ justify-content:space-between;
+ width: 100%
+}
+
+.content {
+ margin: 0 auto;
+ max-width: 900px;
+}
+
+/* Header */
+.title {
+ display: inline-flex;
+ align-items: center;
+ color: var(--tertiary-color);
+ font-size: 1.5rem;
+ font-weight: bold;
+ border-bottom: none;
+}
+
+.title img {
+ margin-right: 0.2em;
+ display: inline;
+ width: 32px;
+ height: auto;
+}
+
+.title:hover {
+ color: var(--link-color);
+}
+
+.menu {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+#main-menu ul {
+ margin: 0;
+}
+
+#main-menu li {
+ display: inline;
+}
+
+#main-menu li:before {
+ content: none;
+}
+
+#main-menu a {
+ margin: 0.7em 0.5em;
+ font-size: 1rem;
+ font-weight: 600;
+ border-bottom: none;
+}
+
+#main-menu a:hover {
+ border-bottom: 2px solid var(--tertiary-color);
+}
+
+#main-menu a svg {
+ height: 1.1em;
+ width: 1.1em;
+ vertical-align: text-top;
+}
+
+#main-menu a.active {
+ border-bottom: 2px solid var(--tertiary-color);
+}
+
+.mm-normal {
+ display: inline
+}
+
+.mm-mobile-open ul {
+ position: fixed;
+ padding: 0;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ background-color: rgba(var(--secondary-color), 0.7);
+ z-index: 30;
+ transition: transform 0.3s ease-in-out;
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+}
+
+#mob-hb-icon, #mob-x-icon {
+ display: none;
+ background-color: inherit;
+}
+
+@media (max-width: 800px) {
+ #mob-hb-icon {
+ display: block;
+ }
+ .mm-normal {
+ display: none;
+ }
+}
+
+.main-menu a.lnk:hover, .socials-icon svg:hover {
+ color: var(--link-color);
+ border-bottom: 2px solid var(--tertiary-color);
+}
+
+.menu-btn svg,
+.copy-button svg{
+ height: 1.1em;
+ width: 1.1em;
+ vertical-align: text-top;
+}
+
+.menu-btn:hover {
+ color: var(--tertiary-color);
+}
+
+body.dark #moon {
+ display: none;
+}
+
+body:not(.dark) #sun {
+ display: none;
+}
+
+.menu-btn {
+ color: var(--primary-color);
+ background-color: var(--secondary-color);
+ border: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+#theme-switcher div {
+ display: inline;
+}
+
+.avatar img {
+ height: 100px;
+ width: 100px;
+ padding: 8px;
+ border-radius: 50%;
+}
+
+.avatar.top {
+ text-align: center;
+}
+
+.avatar.left {
+ margin-top: 16px;
+ position: relative;
+ float: left;
+}
+
+.avatar.right {
+ margin-top: 16px;
+ position: relative;
+ float: right;
+}
+
+.featured {
+ margin-top: 0.2rem;
+ clear: both;
+}
+
+.socials span {
+ font-size: 1.5rem;
+}
+
+.socials ul {
+ text-align: center;
+ padding: 0;
+}
+
+.socials li::before {
+ content: none;
+}
+
+.socials a {
+ border-bottom: none;
+}
+
+.socials li {
+ display: inline;
+ margin: 0.2em;
+}
+
+.icon {
+ position: relative;
+}
+
+.socials-icon svg {
+ height:1.5em;
+ width:1.5em;
+ border-bottom: 2px solid var(--secondary-color);
+}
+
+/* List */
+.lst-content {
+ margin-top: 2rem;
+}
+
+.lst-type {
+ margin-bottom: 0.2em;
+ margin-top: 1.2em;
+}
+
+.lst-basic,
+.lst-card {
+ margin-top: .2em;
+}
+
+.lst-card {
+ padding-left: 0;
+}
+
+.lst-basic li {
+ display: flex;
+}
+
+.lst-basic li div {
+ flex-grow: 1;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.lst time {
+ white-space: nowrap;
+}
+
+.lst-card li::before {
+ content: none;
+}
+
+.lst-card li {
+ padding: 0.2em 1em;
+ margin-block: 1em;
+ padding-block: 1em;
+ background-color: var(--secondary-color-dark);
+ border-radius: var(--radius);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.lst-card li h2,
+.lst-card li h3 {
+ margin: 0;
+}
+
+.lst-card li p {
+ margin: 0;
+}
+
+/* Page */
+.artile-ttl::before {
+ content: none;
+}
+
+.pg-title {
+ padding: 0;
+ margin: 0px;
+}
+
+/* Meta */
+.meta p, .meta a {
+ margin: 0;
+ color: var(--primary-color);
+}
+
+.meta-icon {
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+.meta-icon svg {
+ /*margin-left: 0.2em;*/
+ padding-top: 0.25em;
+ height: 0.9em;
+ width: 0.9em;
+}
+
+.meta a {
+ border: 1px solid var(--tertiary-color);
+ padding: 2px;
+ border-radius: var(--radius);
+ background: var(--tertiary-color-light );
+ margin: 0 2px;
+}
+
+.meta a:hover {
+ background: var(--link-color);
+ color: black;
+}
+
+.draft-lbl {
+ background-color: var(--tertiary-color);
+ color: var(--black);
+ padding: 2px 4px;
+ border-radius: var(--radius);
+}
+
+.highlight-wrapper {
+ display:block;
+ border-radius: var(--radius);
+}
+
+pre, .highlight {
+ position:relative;
+}
+
+div.highlight:hover .copy-button,
+pre:hover .copy-button {
+ display: block;
+}
+
+.copy-button {
+ opacity: 0.8;
+ display: none;
+ position:absolute;
+ top:2px;
+ right:2px;
+ z-index:10;
+ /*padding: 0.25rem 0.5rem;*/
+ cursor:pointer;
+ background-color: inherit;
+ color: var(--code-fg);
+ border: none;
+}
+
+.copy-button svg {
+ color: var(--tertiary-color-light);
+}
+
+.copy-textarea {
+ position:absolute;
+ z-index:-10;
+ opacity:0.05
+}
+
+.showmore {
+ text-align: center;
+}
+
+.showmore button {
+ border: 2px solid var(--tertiary-color);
+ color: var(--primary-color);
+ background-color: var(--secondary-color);
+ font-size: 1em;
+ padding: .2em .4em;
+ border-radius: var(--radius);
+}
+
+.showmore button:hover {
+ border: 2px solid var(--link-color);
+}
+
+.pagenav {
+ margin-top: 2rem;
+ display: flex;
+ background-color: var(--secondary-color-dark);
+ border-radius: var(--radius);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.pagenav .prev, .pagenav .next {
+ width: 50%;
+ border: none;
+ padding: 10px 20px;
+}
+
+.pagenav .prev {
+ text-align: left;
+ padding-right: 0;
+ border-radius: var(--radius) 0 0 var(--radius);
+}
+
+.pagenav .next {
+ padding-left: 0;
+ margin-inline-start: auto;
+ text-align: right;
+ border-radius: 0 var(--radius) var(--radius) 0;
+}
+
+.pagenav .direction {
+ font-size: small;
+ font-weight: bold;
+ opacity: 0.5;
+}
+
+.pagenav .prev:hover, .pagenav .next:hover {
+ background-color: var(--tertiary-color-light);
+ color: var(--primary-color);
+}
+
+.toc {
+ background-color: var(--secondary-color-dark);
+ min-width: 40%;
+ margin-top: 10px;
+ padding: 0.4em;
+ border-radius: var(--radius);
+ display: inline-block;
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.toc details {
+ box-shadow: none;
+}
+
+.toc summary {
+ font-weight: bold;
+ font-size: 1.05rem;
+}
+
+.toc-innr {
+ padding-right: 2em;
+}
+
+.toc-innr ul {
+ margin: 0;
+}
+
+.toc-innr a, .toc-innr a code {
+ border-bottom: none;
+}
+
+.toc li:before {
+ content: none;
+}
+
+.callout {
+ padding: .75rem;
+ margin: 1em 0;
+ background: var(--secondary-color-dark);
+ border-radius: var(--radius);
+ display: flex;
+ align-items: center;
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
+}
+
+.callout svg {
+ padding-top: 0.3em;
+ width: 1em;
+ height: 1em;
+ margin-right: 0.5em;
+}
+
+.icon {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.icon svg {
+ width: 1em;
+ height: 1em;
+}
+
+.pagination {
+ display: flex;
+ justify-content: center;
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.pagination li {
+ margin-left: 1em;
+ margin-right: 1em;
+}
+
+.pagination li:before {
+ content: none;
+}
+
+.pagination a {
+ background-color: inherit;
+ color: inherit;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ border: none;
+}
+
+.page-item {
+ background-color: var(--tertiary-color);
+ color: var(--black);
+ border-radius: var(--radius);
+}
+
+.page-item:not(.disabled):not(.active):hover {
+ background-color: var(--link-color);
+ border: none;
+}
+
+.page-item.active {
+ background-color: var(--link-color);
+}
+
+.page-item.disabled {
+ opacity: 0.5;
+}
+
+.gist a {
+ color: initial;
+ background-color: initial;
+ text-decoration: initial;
+ border: initial;
+}
+
+.taxny-card-container {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.taxny-card {
+ flex: 1 0 200px;
+ margin: 10px;
+ background-color: var(--secondary-color-dark);
+ padding: 10px;
+ border-radius: var(--radius);
+}
+
+.comment {
+ margin-top: 1rem;
+}
+
+.anchor svg {
+ width: 0.75em;
+ height: auto;
+}
+
+h1:hover .anchor,
+h2:hover .anchor,
+h3:hover .anchor,
+h4:hover .anchor,
+h5:hover .anchor,
+h6:hover .anchor {
+ display: inline;
+ opacity: .7;
+ color: var(--primary-color);
+ user-select: none;
+ text-decoration: none;
+ border: none;
+}
+
+.katex > .katex-html {
+ white-space: normal;
+}
+
+.katex .base {
+ margin-top: 2px;
+ margin-bottom: 2px;
+}
+
+.gist .markdown-body .highlight pre, .gist .markdown-body pre {
+ box-shadow: none;
+}
+
+.mermaid {
+ background-color: var(--black);
+ max-width: 100%;
+ overflow-x: auto;
+}
+
+::-webkit-scrollbar {
+ width: 0.5vw;
+ height: 8px;
+}
+
+::-webkit-scrollbar-track {
+ background: var(--scrollbar-track);
+ border-radius: var(--radius);
+}
+
+::-webkit-scrollbar-thumb {
+ background: var(--scrollbar-thumb);
+ border-radius: var(--radius);
+}
+
+.highlight pre::-webkit-scrollbar-track,
+.highlight>div::-webkit-scrollbar-track,
+pre code::-webkit-scrollbar-track {
+ background: var(--code-bg) !important;
+}
+
+.highlight pre::-webkit-scrollbar-thumb,
+.highlight>div::-webkit-scrollbar-thumb,
+pre code::-webkit-scrollbar-thumb {
+ background: var(--code-scroll-thumb) !important;
+}
+
+::-webkit-scrollbar-thumb:hover,
+.highlight pre::-webkit-scrollbar-thumb:hover,
+.highlight>div::-webkit-scrollbar-thumb:hover,
+pre code::-webkit-scrollbar-thumb:hover {
+ background: var(--tertiary-color-light) !important;
+}
+
+.breadcrumbs {
+ padding: 0;
+ margin: 0;
+ opacity: 0.5;
+ display: inline-flex;
+ font-size: 0.98em;
+ align-items: center;
+}
+
+.breadcrumbs li::before {
+ content: none;
+}
+
+.breadcrumbs li::after {
+ content: "»";
+ width: 1em;
+ text-align: center;
+ display: inline-block;
+}
+
+.breadcrumbs a {
+ border: none;
+ display: inline-flex;
+ align-items: center;
+}
+
+.breadcrumbs a svg {
+ width: 0.94em;
+ height: auto;
+ text-align: center;
+ vertical-align: text-top;
+ opacity: inherit;
+}
+
+.cover-img {
+ width: 100%;
+ height: auto;
+}
+
+.pg-title svg {
+ height: 1.5rem;
+ width: auto;
+}
+
+.pg-title a {
+ border: none;
+ opacity: 0.6;
+}
+
+.headline {
+ font-weight: bold;
+ font-size: 1.05em;
+}
+
+.side-menu {
+ display: flex;
+}
+
+#search-container {
+ position: fixed;
+ padding-top: 2em;
+ padding-bottom: 2em;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ background-color: rgba(var(--secondary-color), 0.7);
+ z-index: 30;
+ transition: transform 0.3s ease-in-out;
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ display: none; /* TODO: Make this nun */
+}
+
+#search-query::-webkit-search-cancel-button,
+#search-query::-webkit-search-decoration,
+#search-query::-webkit-search-results-button,
+#search-query::-webkit-search-results-decoration {
+ display:none
+}
+
+.search {
+ flex-grow: 1;
+ max-width: 700px;
+ margin: 0 auto;
+ display: flex;
+ flex-direction: column;
+}
+
+.search .panel {
+ padding: 10px;
+ margin: 0 10px;
+ border-radius: var(--radius);
+ background-color: var(--secondary-color-dark);
+}
+
+.search .panel form {
+ display: flex;
+ justify-content: center;
+}
+
+.search .panel form svg {
+ flex-grow: 0;
+ width: 1.1em;
+ height: auto;
+ color: inherit;
+}
+
+.search .panel form input {
+ flex-grow: 1;
+ font-size: 1.1rem;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ background-color: transparent;
+ appearance: none;
+ border: none;
+ outline: 2px solid var(--primary-color);
+ color: var(--primary-color);
+}
+
+.search .panel form input:focus {
+ outline: 2px solid var(--tertiary-color);
+}
+
+.search .panel form button {
+ flex-grow: 0;
+ background: transparent;
+ border: none;
+ display: flex;
+ align-items: center;
+ color: var(--primary-color);
+}
+
+#search-results {
+ background-color: var(--secondary-color-dark);
+ flex-grow: 0;
+ margin: 10px .5em;
+ padding: 0;
+ border-radius: var(--radius);
+ overflow: auto;
+}
+
+.search .close-btn-ctr {
+ display: flex;
+ justify-content: center;
+}
+
+#search-close:hover {
+ color: var(--tertiary-color);
+}
+
+#search-results li {
+ line-height: 1.1em;
+}
+
+#search-results li:before {
+ content: "";
+ display: none;
+ width: 0;
+ margin-left: 0;
+}
+
+#search-results li a {
+ display: block;
+ position: relative;
+ margin: 10px;
+ padding: 10px;
+ background-color: var(--secondary-color);
+ border: none;
+ border-radius: var(--radius);
+}
+
+#search-results li a:focus,
+#search-results li a:hover {
+ outline: 1px solid var(--tertiary-color);
+}
+
+#search-results li a p {
+ margin: 0px;
+}
+
+#search-results a:hover {
+ color: inherit;
+}
+
+
+.srch-title {
+ font-size: 1.1em;
+ font-weight: bold;
+}
+
+.srch-meta {
+ opacity: 0.5;
+}
+
+.srch-link {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
diff --git a/public/css/theme.css b/public/css/theme.css
new file mode 100644
index 0000000..381b71e
--- /dev/null
+++ b/public/css/theme.css
@@ -0,0 +1,34 @@
+:root{
+ --ff: 'Ubuntu';
+ --radius: 6px;
+ --primary-color: #292929;
+ --secondary-color: #EFEFE6;
+ --tertiary-color: #E0002D;
+ --link-color: #449DD1;
+ --tertiary-color-light: #FFB370;
+ --secondary-color-dark: #DFDFCD;
+ --black: #292929;
+ --code-bg: #272822; /*Monokai*/
+ --code-fg: #f8f8f2; /*Monokai*/
+ --code-scroll-thumb: #525252;
+ --scrollbar-track: #EFEFE6;
+ --scrollbar-thumb: #B7B78F;
+}
+
+.dark {
+ --primary-color: #EFEFE6;
+ --secondary-color: #292929;
+ --tertiary-color: #FF7F11;
+ --tertiary-color-light: #A34C00;
+ --secondary-color-dark: #3D3D29;
+ --scrollbar-track: #292929;
+ --scrollbar-thumb: #525252;
+}
+
+@font-face {
+ font-display: swap;
+ font-family: 'Ubuntu';
+ font-style: normal;
+ font-weight: 400;
+ src: url('../fonts/Ubuntu-Regular.woff2') format('woff2');
+}
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..41b089a
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..ce16752
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..e0ceb3b
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/fonts/Ubuntu-Regular.woff2 b/public/fonts/Ubuntu-Regular.woff2
new file mode 100644
index 0000000..9bc87e2
Binary files /dev/null and b/public/fonts/Ubuntu-Regular.woff2 differ
diff --git a/public/incngrnt.webp b/public/incngrnt.webp
new file mode 100644
index 0000000..96b1928
Binary files /dev/null and b/public/incngrnt.webp differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..e95a2cf
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,405 @@
+
+
+
+
+
+
+
+
+
+
+
+ incngrnt · Home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Just a little different
+
+
+
+
+
+
+
+
+Incngrnt is an experiment in host applications and services, usually run by huge
+corporations, on a small community scale. Using cloud technologies to enhance
+redundancy and maintainability while keeping as much as possible hosted locally.
+This project provides modern applications and services for friends and family,
+offering the convenience of cloud-based tools without sacrificing data privacy.
+The current instance, cheekily names Fog, is a Kubernetes
+
+cluster of 3 Talos Linux
+ nodes. It uses Ceph
+
+as the storage layer and Metallb
+ and
+Traefik
+ for networking. The whole cluster has a has backup
+batteries
+ in the event of a power failure. All configuration
+and setup docs live in a self-hosted git repo
+
+running directly on Fog.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ © 2025 Grant Hunter
+
+
+
+
+
+
+
+
+
diff --git a/public/index.json b/public/index.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/public/index.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/public/index.xml b/public/index.xml
new file mode 100644
index 0000000..22a03f0
--- /dev/null
+++ b/public/index.xml
@@ -0,0 +1,11 @@
+
+
+
+ incngrnt
+ http://localhost:1313/
+ Recent content on incngrnt
+ Hugo -- 0.145.0
+ en-ca
+
+
+
diff --git a/public/js/codecopy.js b/public/js/codecopy.js
new file mode 100644
index 0000000..11c4cff
--- /dev/null
+++ b/public/js/codecopy.js
@@ -0,0 +1,47 @@
+(() => {
+ //
+ var copyText = ' ';
+ var copiedText = 'Copied! ';
+ function createCopyButton(codeblock) {
+ const container = codeblock.parentNode.parentNode;
+ const copybutton = document.createElement("button");
+ copybutton.classList.add("copy-button");
+ copybutton.innerHTML = copyText;
+ function copyingDone() {
+ copybutton.innerHTML = copiedText;
+ setTimeout(() => {
+ copybutton.innerHTML = copyText;
+ }, 500);
+ }
+ copybutton.addEventListener("click", (cb) => {
+ if ("clipboard" in navigator) {
+ navigator.clipboard.writeText(codeblock.textContent);
+ copyingDone();
+ return;
+ }
+ const range = document.createRange();
+ range.selectNodeContents(codeblock);
+ const selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange(range);
+ try {
+ document.execCommand("copy");
+ copyingDone();
+ } catch (e) {
+ }
+ ;
+ selection.removeRange(range);
+ });
+ if (container.classList.contains("highlight")) {
+ container.appendChild(copybutton);
+ } else if (container.parentNode.firstChild == container) {
+ } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
+ codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
+ } else {
+ codeblock.parentNode.appendChild(copybutton);
+ }
+ }
+ window.addEventListener("DOMContentLoaded", (event) => {
+ document.querySelectorAll("pre > code").forEach((codeblock) => createCopyButton(codeblock));
+ });
+})();
diff --git a/public/js/search.js b/public/js/search.js
new file mode 100644
index 0000000..a8d2a07
--- /dev/null
+++ b/public/js/search.js
@@ -0,0 +1,134 @@
+(() => {
+ //
+ var seachOpnBtn = null;
+ var closeBtn = null;
+ var searchCntr = null;
+ var resultCntr = null;
+ var searchBtn = null;
+ var searchTxt = null;
+ var isSearchOpen = false;
+ var isJsonIndexed = false;
+ var isResEmpty = true;
+ var fuse;
+ function fetchJSON(path, callback) {
+ var httpRequest = new XMLHttpRequest();
+ httpRequest.onreadystatechange = function() {
+ if (httpRequest.readyState === 4) {
+ if (httpRequest.status === 200) {
+ var data = JSON.parse(httpRequest.responseText);
+ if (callback) callback(data);
+ }
+ }
+ };
+ httpRequest.open("GET", path);
+ httpRequest.send();
+ }
+ function buildIndex() {
+ var baseURL = searchCntr.getAttribute("data-url");
+ baseURL = baseURL.replace(/\/?$/, "/");
+ fetchJSON(baseURL + "index.json", function(data) {
+ var options = {
+ shouldSort: true,
+ ignoreLocation: true,
+ threshold: 0,
+ includeMatches: true,
+ keys: [
+ { name: "title", weight: 0.8 },
+ { name: "section", weight: 0.2 },
+ { name: "summary", weight: 0.6 },
+ { name: "content", weight: 0.4 }
+ ]
+ };
+ fuse = new Fuse(data, options);
+ isJsonIndexed = true;
+ });
+ }
+ function openSearch() {
+ if (!isJsonIndexed) {
+ buildIndex();
+ }
+ if (!isSearchOpen) {
+ searchCntr.style.display = "flex";
+ document.body.style.overflow = "hidden";
+ isSearchOpen = true;
+ searchTxt.focus();
+ }
+ }
+ function closeSearch() {
+ if (isSearchOpen) {
+ searchCntr.style.display = "none";
+ document.body.style.overflow = "";
+ isSearchOpen = false;
+ }
+ }
+ function executeQuery(query) {
+ let results = fuse.search(query);
+ let resultsHtml = "";
+ if (results.length > 1) {
+ results.forEach(function(value, key) {
+ var meta = value.item.section + " | ";
+ meta = meta + value.item.date ? value.item.date + " | " : "";
+ meta = meta + `${value.item.permalink} `;
+ resultsHtml = resultsHtml + `
+ ${value.item.title}
+ ${meta}
+ ${value.item.summary}
+ `;
+ });
+ isResEmpty = false;
+ } else {
+ resultsHtml = "";
+ isResEmpty = true;
+ }
+ resultCntr.innerHTML = resultsHtml;
+ }
+ window.addEventListener("DOMContentLoaded", (event) => {
+ seachOpnBtn = document.getElementById("search-open");
+ searchBtn = document.getElementById("search-btn");
+ closeBtn = document.getElementById("search-close");
+ searchCntr = document.getElementById("search-container");
+ resultCntr = document.getElementById("search-results");
+ searchTxt = document.getElementById("search-query");
+ seachOpnBtn.addEventListener("click", openSearch);
+ closeBtn.addEventListener("click", closeSearch);
+ searchTxt.onkeyup = function(event2) {
+ executeQuery(this.value);
+ };
+ searchTxt.onkeydown = function(event2) {
+ if (event2.key == "Enter" && !isResEmpty) {
+ resultCntr.firstChild.firstElementChild.focus();
+ event2.preventDefault();
+ }
+ };
+ });
+ document.addEventListener("keydown", function(event) {
+ if (event.key == "/") {
+ event.preventDefault();
+ openSearch();
+ }
+ if (isSearchOpen) {
+ if (event.key == "Escape") {
+ event.preventDefault();
+ closeSearch();
+ } else if (event.key == "ArrowDown" && !isResEmpty) {
+ if (document.activeElement == searchTxt) {
+ resultCntr.firstChild.firstElementChild.focus();
+ } else if (document.activeElement == resultCntr.lastChild.firstElementChild) {
+ searchTxt.focus();
+ } else {
+ document.activeElement.parentElement.nextSibling.firstElementChild.focus();
+ }
+ event.preventDefault();
+ } else if (event.key == "ArrowUp" && !isResEmpty) {
+ if (document.activeElement == searchTxt) {
+ resultCntr.lastChild.firstElementChild.focus();
+ } else if (document.activeElement == resultCntr.firstChild.firstElementChild) {
+ searchTxt.focus();
+ } else {
+ document.activeElement.parentElement.previousSibling.firstElementChild.focus();
+ }
+ event.preventDefault();
+ }
+ }
+ });
+})();
diff --git a/public/js/theme.js b/public/js/theme.js
new file mode 100644
index 0000000..9d9d472
--- /dev/null
+++ b/public/js/theme.js
@@ -0,0 +1,25 @@
+(() => {
+ //
+ function toggleTheme() {
+ if (document.body.className.includes("dark")) {
+ document.body.classList.remove("dark");
+ localStorage.setItem("theme", "light");
+ } else {
+ document.body.classList.add("dark");
+ localStorage.setItem("theme", "dark");
+ }
+ }
+ window.addEventListener("DOMContentLoaded", (event) => {
+ const switcher = document.getElementById("theme-switcher");
+ if (switcher) {
+ switcher.addEventListener("click", () => {
+ toggleTheme();
+ });
+ }
+ window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event2) => {
+ if (event2.matches && localStorage.getItem("theme") === "light") {
+ toggleTheme();
+ }
+ });
+ });
+})();
diff --git a/public/lib/fuse/fuse.min.1f56d60a7738743270762a2aa4e0a453be99c4476f06f3b2f51f4377d12a7ed973420f76a308d7e4855d88ec34d25940c9015464934faf30e7599fe566d7f6e4.js b/public/lib/fuse/fuse.min.1f56d60a7738743270762a2aa4e0a453be99c4476f06f3b2f51f4377d12a7ed973420f76a308d7e4855d88ec34d25940c9015464934faf30e7599fe566d7f6e4.js
new file mode 100644
index 0000000..0d509f3
--- /dev/null
+++ b/public/lib/fuse/fuse.min.1f56d60a7738743270762a2aa4e0a453be99c4476f06f3b2f51f4377d12a7ed973420f76a308d7e4855d88ec34d25940c9015464934faf30e7599fe566d7f6e4.js
@@ -0,0 +1,9 @@
+/**
+ * Fuse.js v7.1.0 - Lightweight fuzzy-search (http://fusejs.io)
+ *
+ * Copyright (c) 2025 Kiro Risk (http://kiro.me)
+ * All Rights Reserved. Apache Software License 2.0
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?O.getFn:n,u=t.fieldNormWeight,o=void 0===u?O.fieldNormWeight:u;r(this,e),this.norm=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(j).length;if(n.has(i))return n.get(i);var u=1/Math.pow(i,.5*e),o=parseFloat(Math.round(u*r)/r);return n.set(i,o),o},clear:function(){n.clear()}}}(o,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return u(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,A(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();A(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?O.getFn:r,u=n.fieldNormWeight,o=void 0===u?O.fieldNormWeight:u,c=new I({getFn:i,fieldNormWeight:o});return c.setKeys(e.map(w)),c.setSources(t),c.create(),c}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,u=void 0===i?0:i,o=t.expectedLocation,c=void 0===o?0:o,a=t.distance,s=void 0===a?O.distance:a,h=t.ignoreLocation,l=void 0===h?O.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(c-u);return s?f+d/s:d?1:f}var N=32;function P(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,u=void 0===i?O.location:i,o=r.distance,c=void 0===o?O.distance:o,a=r.threshold,s=void 0===a?O.threshold:a,h=r.findAllMatches,l=void 0===h?O.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?O.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?O.includeMatches:v,y=r.ignoreLocation,p=void 0===y?O.ignoreLocation:y;if(t.length>N)throw new Error("Pattern length exceeds max of ".concat(N,"."));for(var A,m=t.length,C=e.length,k=Math.max(0,Math.min(u,C)),E=s,F=k,M=d>1||g,b=M?Array(C):[];(A=e.indexOf(t,F))>-1;){var D=R(t,{currentLocation:A,expectedLocation:k,distance:c,ignoreLocation:p});if(E=Math.min(D,E),F=A+m,M)for(var B=0;B=$;z-=1){var T=z-1,K=n[e.charAt(T)];if(M&&(b[T]=+!!K),W[z]=(W[z+1]<<1|1)&K,_&&(W[z]|=(x[z+1]|x[z])<<1|1|x[z+1]),W[z]&L&&(w=R(t,{errors:_,currentLocation:T,expectedLocation:k,distance:c,ignoreLocation:p}))<=E){if(E=w,(F=T)<=k)break;$=Math.max(1,2*k-F)}}if(R(t,{errors:_+1,currentLocation:k,expectedLocation:k,distance:c,ignoreLocation:p})>E)break;x=W}var q={isMatch:F>=0,score:Math.max(.001,w)};if(M){var J=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:O.minMatchCharLength,n=[],r=-1,i=-1,u=0,o=e.length;u=t&&n.push([r,i]),r=-1)}return e[u-1]&&u-r>=t&&n.push([r,u-1]),n}(b,d);J.length?g&&(q.indices=J):q.isMatch=!1}return q}function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},u=i.location,o=void 0===u?O.location:u,c=i.threshold,a=void 0===c?O.threshold:c,s=i.distance,h=void 0===s?O.distance:s,l=i.includeMatches,f=void 0===l?O.includeMatches:l,d=i.findAllMatches,v=void 0===d?O.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?O.minMatchCharLength:g,p=i.isCaseSensitive,A=void 0===p?O.isCaseSensitive:p,m=i.ignoreDiacritics,C=void 0===m?O.ignoreDiacritics:m,k=i.ignoreLocation,E=void 0===k?O.ignoreLocation:k;if(r(this,e),this.options={location:o,threshold:a,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:A,ignoreDiacritics:C,ignoreLocation:E},t=A?t:t.toLowerCase(),t=C?z(t):t,this.pattern=t,this.chunks=[],this.pattern.length){var F=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},M=this.pattern.length;if(M>N){for(var b=0,D=M%N,B=M-D;b1&&void 0!==arguments[1]?arguments[1]:{},o=u.location,c=void 0===o?O.location:o,a=u.threshold,s=void 0===a?O.threshold:a,h=u.distance,l=void 0===h?O.distance:h,f=u.includeMatches,d=void 0===f?O.includeMatches:f,v=u.findAllMatches,g=void 0===v?O.findAllMatches:v,y=u.minMatchCharLength,p=void 0===y?O.minMatchCharLength:y,A=u.isCaseSensitive,m=void 0===A?O.isCaseSensitive:A,C=u.ignoreDiacritics,k=void 0===C?O.ignoreDiacritics:C,E=u.ignoreLocation,F=void 0===E?O.ignoreLocation:E;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:c,threshold:s,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:m,ignoreDiacritics:k,ignoreLocation:F}),i}return u(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(K),Y=function(e){c(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return u(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var u=!!r.length;return{isMatch:u,score:u?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(K),Z=[J,Y,V,G,Q,H,U,X],ee=Z.length,te=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,ne=new Set([X.type,Y.type]),re=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,u=void 0===i?O.isCaseSensitive:i,o=n.ignoreDiacritics,c=void 0===o?O.ignoreDiacritics:o,a=n.includeMatches,s=void 0===a?O.includeMatches:a,h=n.minMatchCharLength,l=void 0===h?O.minMatchCharLength:h,f=n.ignoreLocation,d=void 0===f?O.ignoreLocation:f,v=n.findAllMatches,g=void 0===v?O.findAllMatches:v,y=n.location,p=void 0===y?O.location:y,A=n.threshold,m=void 0===A?O.threshold:A,C=n.distance,k=void 0===C?O.distance:C;r(this,e),this.query=null,this.options={isCaseSensitive:u,ignoreDiacritics:c,includeMatches:s,minMatchCharLength:l,findAllMatches:g,ignoreLocation:d,location:p,threshold:m,distance:k},t=u?t:t.toLowerCase(),t=c?z(t):t,this.pattern=t,this.query=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(te).filter((function(e){return e&&!!e.trim()})),r=[],i=0,u=n.length;i2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n;return he(e)||(e=le(e)),function e(n){var i=Object.keys(n),u=function(e){return!!e[ae]}(n);if(!u&&i.length>1&&!he(n))return e(le(n));if(function(e){return!g(e)&&k(e)&&!he(e)}(n)){var o=u?n[ae]:i[0],c=u?n[se]:n[o];if(!A(c))throw new Error(function(e){return"Invalid value for key ".concat(e)}(o));var a={keyId:L(o),pattern:c};return r&&(a.searcher=ue(c,t)),a}var s={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];g(r)&&r.forEach((function(t){s.children.push(e(t))}))})),s}(e)}function de(e,t){var n=e.matches;t.matches=[],E(n)&&n.forEach((function(e){if(E(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}var ge=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},O),i),this.options.useExtendedSearch,this._keyStore=new x(this.options.keys),this.setCollection(n,u)}return u(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof I))throw new Error("Incorrect 'index' type");this._myIndex=t||$(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){E(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{}).limit,n=void 0===t?-1:t,r=this.options,i=r.includeMatches,u=r.includeScore,o=r.shouldSort,c=r.sortFn,a=r.ignoreFieldNorm,s=A(e)?A(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return function(e,t){var n=t.ignoreFieldNorm,r=void 0===n?O.ignoreFieldNorm:n;e.forEach((function(e){var t=1;e.matches.forEach((function(e){var n=e.key,i=e.norm,u=e.score,o=n?n.weight:null;t*=Math.pow(0===u&&o?Number.EPSILON:u,(o||1)*(r?1:i))})),e.score=t}))}(s,{ignoreFieldNorm:a}),o&&s.sort(c),m(n)&&n>-1&&(s=s.slice(0,n)),function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?O.includeMatches:r,u=n.includeScore,o=void 0===u?O.includeScore:u,c=[];return i&&c.push(de),o&&c.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return c.length&&c.forEach((function(t){t(e,r)})),r}))}(s,this._docs,{includeMatches:i,includeScore:u})}},{key:"_searchStringList",value:function(e){var t=ue(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,u=e.n;if(E(n)){var o=t.searchIn(n),c=o.isMatch,a=o.score,s=o.indices;c&&r.push({item:n,idx:i,matches:[{score:a,value:n,norm:u,indices:s}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=fe(e,this.options),r=function e(n,r,i){if(!n.children){var u=n.keyId,o=n.searcher,c=t._findMatches({key:t._keyStore.get(u),value:t._myIndex.getValueForItemAtKeyId(r,u),searcher:o});return c&&c.length?[{idx:i,item:r,matches:c}]:[]}for(var a=[],s=0,h=n.children.length;s1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?O.getFn:n,i=t.fieldNormWeight,u=void 0===i?O.fieldNormWeight:i,o=e.keys,c=e.records,a=new I({getFn:r,fieldNormWeight:u});return a.setKeys(o),a.setIndexRecords(c),a},ge.config=O,function(){ie.push.apply(ie,arguments)}(re),ge},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();
\ No newline at end of file
diff --git a/public/page/1/index.html b/public/page/1/index.html
new file mode 100644
index 0000000..d1e752d
--- /dev/null
+++ b/public/page/1/index.html
@@ -0,0 +1,10 @@
+
+
+
+ http://localhost:1313/
+
+
+
+
+
+
diff --git a/public/site.webmanifest b/public/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/public/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/public/sitemap.xml b/public/sitemap.xml
new file mode 100644
index 0000000..eb1511e
--- /dev/null
+++ b/public/sitemap.xml
@@ -0,0 +1,12 @@
+
+
+
+ http://localhost:1313/
+
+
+ http://localhost:1313/categories/
+
+
+ http://localhost:1313/tags/
+
+
diff --git a/public/tags/index.html b/public/tags/index.html
new file mode 100644
index 0000000..cc271e1
--- /dev/null
+++ b/public/tags/index.html
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
+ Tags · incngrnt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tags
+
+
+
+
+
+
+
+
+
+
+ © 2025 Grant Hunter
+
+
+
+
+
+
+
+
+
diff --git a/public/tags/index.xml b/public/tags/index.xml
new file mode 100644
index 0000000..09a75b2
--- /dev/null
+++ b/public/tags/index.xml
@@ -0,0 +1,11 @@
+
+
+
+ Tags on incngrnt
+ http://localhost:1313/tags/
+ Recent content in Tags on incngrnt
+ Hugo -- 0.145.0
+ en-ca
+
+
+
diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png
new file mode 100644
index 0000000..7c128af
Binary files /dev/null and b/static/android-chrome-192x192.png differ
diff --git a/static/android-chrome-512x512.png b/static/android-chrome-512x512.png
new file mode 100644
index 0000000..01ccc4e
Binary files /dev/null and b/static/android-chrome-512x512.png differ
diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png
new file mode 100644
index 0000000..e8faa86
Binary files /dev/null and b/static/apple-touch-icon.png differ
diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png
new file mode 100644
index 0000000..41b089a
Binary files /dev/null and b/static/favicon-16x16.png differ
diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png
new file mode 100644
index 0000000..ce16752
Binary files /dev/null and b/static/favicon-32x32.png differ
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..e0ceb3b
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/static/site.webmanifest b/static/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/static/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/themes/kayal b/themes/kayal
new file mode 160000
index 0000000..0a715a1
--- /dev/null
+++ b/themes/kayal
@@ -0,0 +1 @@
+Subproject commit 0a715a1e1ecd6443cdef88cf773f354d85f7aff0