feat(web/website): init

This adds a new Website/Docs for Snix, using Thulite / Doks, which is
mostly hugo and a bit of npm.

Change-Id: Iea10d4068fa783ec0ddd6bcaba5c8d92b1a1168f
This commit is contained in:
Florian Klink 2025-03-16 13:36:18 +01:00
parent 2705517e6d
commit 91d8b86b39
55 changed files with 6205 additions and 0 deletions

View file

@ -0,0 +1,86 @@
title = "Snix"
baseurl = "http://snix.dev/"
canonifyURLs = false
disableAliases = true
disableHugoGeneratorInject = true
# disableKinds = ["taxonomy", "term"]
enableEmoji = true
enableGitInfo = false
enableRobotsTXT = true
languageCode = "en-US"
pagerSize = 10
rssLimit = 10
summarylength = 20 # 70 (default)
# Multilingual
defaultContentLanguage = "en"
disableLanguages = ["de", "nl"]
defaultContentLanguageInSubdir = false
copyRight = "Copyright (c) 2025 The Snix Project"
[build.buildStats]
enable = true
[outputs]
home = ["HTML", "RSS", "searchIndex"]
section = ["HTML", "RSS", "SITEMAP"]
[outputFormats.searchIndex]
mediaType = "application/json"
baseName = "search-index"
isPlainText = true
notAlternative = true
# Add output format for section sitemap.xml
[outputFormats.SITEMAP]
mediaType = "application/xml"
baseName = "sitemap"
isHTML = false
isPlainText = true
noUgly = true
rel = "sitemap"
[sitemap]
changefreq = "monthly"
filename = "sitemap.xml"
priority = 0.5
[caches]
[caches.getjson]
dir = ":cacheDir/:project"
maxAge = -1 # "30m"
[taxonomies]
contributor = "contributors"
category = "categories"
tag = "tags"
[permalinks]
blog = "/blog/:slug/"
docs = "/docs/:sections[1:]/:slug/"
# docs = "/docs/1.0/:sections[1:]/:slug/"
[minify.tdewolff.html]
keepWhitespace = false
[related]
threshold = 80
includeNewer = true
toLower = false
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "tags"
weight = 80
[[related.indices]]
name = "date"
weight = 10
[imaging]
anchor = "Center"
bgColor = "#ffffff"
hint = "photo"
quality = 85
resampleFilter = "Lanczos"

View file

@ -0,0 +1,9 @@
[en]
languageName = "English"
contentDir = "content/en"
weight = 10
[en.params]
languageISO = "EN"
languageTag = "en-US"
footer = ''
# alertText = '<a class="alert-link stretched-link fw-normal" href="/blog/example-post/">Doks version 1.0 just shipped!</a>'

View file

@ -0,0 +1,33 @@
defaultMarkdownHandler = "goldmark"
[goldmark]
[goldmark.extensions]
linkify = false
[goldmark.parser]
autoHeadingID = true
autoHeadingIDType = "github"
[goldmark.parser.attribute]
block = true
title = true
[goldmark.renderer]
unsafe = true
[highlight]
anchorLineNos = false
codeFences = true
guessSyntax = false
hl_Lines = ''
hl_inline = false
lineAnchors = ''
lineNoStart = 1
lineNos = false
lineNumbersInTable = false
noClasses = false
noHl = false
style = 'monokai'
tabWidth = 2
[tableOfContents]
endLevel = 3
ordered = false
startLevel = 2

View file

@ -0,0 +1,105 @@
# [[docs]]
# name = "Prologue"
# weight = 10
# identifier = "prologue"
# url = "/docs/prologue/"
# [[docs]]
# name = "Help"
# weight = 60
# identifier = "help"
# url = "/docs/help/"
# [[docs]]
# name = "Lorem"
# weight = 70
# identifier = "lorem"
# url = "/docs/lorem/"
[[guide]]
name = "Lorem"
weight = 10
identifier = "lorem"
url = "/guide/lorem/"
[[tutorial]]
name = "Lorem"
weight = 10
identifier = "lorem"
url = "/tutorial/lorem/"
[[main]]
name = "About"
url = "/about/"
weight = 10
[[main]]
name = "Docs"
url = "/docs/components/architecture/"
# url = "/docs/1.0/prologue/introduction/"
weight = 20
# [[main]]
# name = "Blog"
# url = "/blog/"
# weight = 30
[[main]]
name = "Contact"
url = "/contact/"
weight = 31
# [[social]]
# name = "X"
# pre = '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-x" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M4 4l11.733 16h4.267l-11.733 -16z"></path><path d="M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"></path></svg>'
# url = "https://twitter.com/getdoks"
# weight = 10
#
# [[social]]
# name = "Discord"
# pre = '<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-discord" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M14 12a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8.5 17c0 1 -1.356 3 -1.832 3c-1.429 0 -2.698 -1.667 -3.333 -3c-.635 -1.667 -.476 -5.833 1.428 -11.5c1.388 -1.015 2.782 -1.34 4.237 -1.5l.975 1.923a11.913 11.913 0 0 1 4.053 0l.972 -1.923c1.5 .16 3.043 .485 4.5 1.5c2 5.667 2.167 9.833 1.5 11.5c-.667 1.333 -2 3 -3.5 3c-.5 0 -2 -2 -2 -3"></path><path d="M7 16.5c3.5 1 6.5 1 10 0"></path></svg>'
# url = "https://getdoks.org/chat"
# weight = 20
[[social]]
name = "Gerrit"
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-brand-git"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M16 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 8m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 16m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M12 15v-6" /><path d="M15 11l-2 -2" /><path d="M11 7l-1.9 -1.9" /><path d="M13.446 2.6l7.955 7.954a2.045 2.045 0 0 1 0 2.892l-7.955 7.955a2.045 2.045 0 0 1 -2.892 0l-7.955 -7.955a2.045 2.045 0 0 1 0 -2.892l7.955 -7.955a2.045 2.045 0 0 1 2.892 0z" /></svg>'
url = "https://cl.snix.dev"
weight = 30
[[social]]
name = "Code"
pre = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-code"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7 8l-4 4l4 4" /><path d="M17 8l4 4l-4 4" /><path d="M14 4l-4 16" /></svg>'
url = "https://git.snix.dev/snix/snix"
weight = 31
[[social]]
name = "Rustdoc"
pre = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" id="Cubes--Streamline-Font-Awesome" height="16" width="16"><desc>Cubes Streamline Icon: https://streamlinehq.com</desc><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m8.074847222222221 2.352027777777778 2.133852777777778 0.8083611111111111 -2.210061111111111 0.849186111111111 -2.210061111111111 -0.849186111111111 2.133852777777778 -0.8083611111111111c0.04899166666666666 -0.019049999999999997 0.10342499999999999 -0.019049999999999997 0.15513888888888888 0Zm-4.213266666666667 1.19485v3.0538027777777774c-0.03538333333333333 0.010886111111111112 -0.07076666666666666 0.021772222222222224 -0.10615 0.03538333333333333l-2.6128777777777774 0.9907166666666666C0.5519333333333333 7.8499638888888885 0.15999999999999998 8.418808333333333 0.15999999999999998 9.050255555555553v3.244325c0 0.6042277777777777 0.35655 1.1513 0.9117861111111111 1.3962583333333334l2.6128805555555554 1.1485777777777777c0.39193055555555556 0.17146944444444445 0.8355777777777778 0.17146944444444445 1.2275083333333332 0l3.086463888888889 -1.3581527777777778 3.089186111111111 1.3581527777777778c0.3919333333333333 0.17146944444444445 0.8355777777777778 0.17146944444444445 1.2275083333333332 0l2.6128805555555554 -1.1485777777777777c0.5525166666666667 -0.2422361111111111 0.9117861111111111 -0.7920305555555556 0.9117861111111111 -1.3962583333333334V9.050255555555553c0 -0.6341694444444445 -0.39193055555555556 -1.2002916666666668 -0.9825527777777776 -1.4261972222222221l-2.6128777777777774 -0.9907166666666666c-0.03538333333333333 -0.013608333333333333 -0.07076666666666666 -0.024497222222222222 -0.10615 -0.03538333333333333V3.5468777777777776c0 -0.6341694444444445 -0.39193055555555556 -1.2002916666666668 -0.9825499999999999 -1.4261972222222221l-2.6128805555555554 -0.9907166666666666c-0.3483833333333333 -0.13064444444444442 -0.73215 -0.13064444444444442 -1.0805333333333333 0l-2.6128805555555554 0.9907166666666666c-0.5960638888888888 0.22590555555555555 -0.9879944444444444 0.79475 -0.9879944444444444 1.4261972222222221Zm6.967677777777777 3.2143861111111107 -2.242722222222222 0.849186111111111v-2.4278027777777775l2.242722222222222 -0.8600722222222221v2.4386888888888887Zm-6.455988888888889 1.0968638888888889 2.13385 0.8083611111111111 -2.210061111111111 0.8464638888888888 -2.2100583333333335 -0.8464638888888888 2.13385 -0.8083611111111111c0.04899166666666666 -0.019052777777777776 0.10342777777777777 -0.019052777777777776 0.15513888888888888 0Zm0.5116888888888889 5.563258333333333V10.686027777777777l2.242722222222222 -0.860075V12.43611111111111l-2.242722222222222 0.985275Zm6.739052777777777 -5.563258333333333c0.04898888888888889 -0.019052777777777776 0.10342499999999999 -0.019052777777777776 0.15513888888888888 0l2.13385 0.8083611111111111 -2.2127805555555553 0.8464638888888888 -2.210061111111111 -0.8464638888888888 2.13385 -0.8083611111111111Zm2.776183333333333 4.635141666666667 -2.112077777777778 0.9281166666666666V10.686027777777777l2.242722222222222 -0.860075v2.4686277777777774c0 0.08709722222222221 -0.051713888888888886 0.16330555555555554 -0.13064444444444442 0.1986888888888889Z" fill="currentColor" stroke-width="0.0278"></path></svg>'
url = "https://snix.dev/rustdoc"
weight = 32
# [[sidebar_docs]]
# name = "Guides"
# pageRef = "/docs/guides"
# weight = 10
#
# [[sidebar_docs]]
# name = "Reference"
# pageRef = "/docs/reference"
# weight = 20
#
# [[sidebar_docs]]
# name = "Resources"
# pageRef = "/docs/resources"
# weight = 30
# [[footer]]
# name = "Privacy Policy"
# url = "/privacy/"
# weight = 10
# [[footer]]
# name = "Terms of Service"
# url = "/terms/"
# weight = 20

View file

@ -0,0 +1,87 @@
# mounts
## archetypes
[[mounts]]
source = "node_modules/@thulite/doks-core/archetypes"
target = "archetypes"
[[mounts]]
source = "archetypes"
target = "archetypes"
## assets
[[mounts]]
source = "node_modules/@thulite/core/assets"
target = "assets"
[[mounts]]
source = "node_modules/@thulite/images/assets"
target = "assets"
[[mounts]]
source = "node_modules/@thulite/doks-core/assets"
target = "assets"
[[mounts]]
source = "node_modules/@tabler/icons/icons"
target = "assets/svgs/tabler-icons"
[[mounts]]
source = "assets"
target = "assets"
## content
[[mounts]]
source = "content"
target = "content"
## data
[[mounts]]
source = "node_modules/@thulite/doks-core/data"
target = "data"
[[mounts]]
source = "data"
target = "data"
## i18n
[[mounts]]
source = "node_modules/@thulite/doks-core/i18n"
target = "i18n"
[[mounts]]
source = "i18n"
target = "i18n"
## layouts
[[mounts]]
source = "node_modules/@thulite/core/layouts"
target = "layouts"
[[mounts]]
source = "node_modules/@thulite/seo/layouts"
target = "layouts"
[[mounts]]
source = "node_modules/@thulite/images/layouts"
target = "layouts"
[[mounts]]
source = "node_modules/@thulite/doks-core/layouts"
target = "layouts"
[[mounts]]
source = "node_modules/@thulite/inline-svg/layouts"
target = "layouts"
[[mounts]]
source = "layouts"
target = "layouts"
## static
[[mounts]]
source = "node_modules/@thulite/doks-core/static"
target = "static"
[[mounts]]
source = "static"
target = "static"

View file

@ -0,0 +1,138 @@
# Hugo
title = "My Docs"
description = "Congrats on setting up a new Doks project!"
images = ["cover.png"]
# mainSections
mainSections = ["docs"]
[social]
twitter = "getdoks"
# Doks (@thulite/doks-core)
[doks]
# Color mode
colorMode = "auto" # auto (default), light or dark
colorModeToggler = true # true (default) or false (this setting is only relevant when colorMode = auto)
# Navbar
navbarSticky = true # true (default) or false
containerBreakpoint = "lg" # "", "sm", "md", "lg" (default), "xl", "xxl", or "fluid"
## Button
navBarButton = false # false (default) or true
navBarButtonUrl = "/docs/prologue/introduction/"
navBarButtonText = "Get started"
# FlexSearch
flexSearch = true # true (default) or false
searchExclKinds = [] # list of page kinds to exclude from search indexing (e.g. ["home", "taxonomy", "term"] )
searchExclTypes = [] # list of content types to exclude from search indexing (e.g. ["blog", "docs", "legal", "contributors", "categories"])
showSearch = [] # [] (all pages, default) or homepage (optionally) and list of sections (e.g. ["homepage", "blog", "guides"])
indexSummary = false # true or false (default); whether to index only the `.Summary` instead of the full `.Content`; limits the respective JSON field size and thus increases loading time
## Search results
showDate = false # false (default) or true
showSummary = true # true (default) or false
searchLimit = 99 # 0 (no limit, default) or natural number
# Global alert
alert = false # false (default) or true
alertDismissable = true # true (default) or false
# Bootstrap
bootstrapJavascript = false # false (default) or true
# Nav
sectionNav = ["docs"] # ["docs"] (default) or list of sections (e.g. ["docs", "guides"])
toTopButton = false # false (default) or true
breadcrumbTrail = false # false (default) or true
headlineHash = true # true (default) or false
scrollSpy = true # true (default) or false
# Multilingual
multilingualMode = false # false (default) or true
showMissingLanguages = true # whether or not to show untranslated languages in the language menu; true (default) or false
# Versioning
docsVersioning = false # false (default) or true
docsVersion = "1.0"
# UX
headerBar = false # true (default) or false
backgroundDots = true # true (default) or false
# Homepage
sectionFooter = false # false (default) or true
# Blog
relatedPosts = false # false (default) or true
imageList = true # true (default) or false
imageSingle = true # true (default) or false
# Repository
editPage = false # false (default) or true
lastMod = false # false (default) or true
repoHost = "GitHub" # GitHub (default), Gitea, GitLab, Bitbucket, or BitbucketServer
docsRepo = "https://github.com/h-enk/doks"
docsRepoBranch = "main" # main (default), master, or <branch name>
docsRepoSubPath = "" # "" (none, default) or <sub path>
# SCSS colors
# backGround = "yellowgreen"
## Dark theme
# textDark = "#dee2e6" # "#dee2e6" (default), "#dee2e6" (orignal), or custom color
# accentDark = "#5d2f86" # "#5d2f86" (default), "#5d2f86" (original), or custom color
## Light theme
# textLight = "#1d2d35" # "#1d2d35" (default), "#1d2d35" (orignal), or custom color
# accentLight = "#8ed6fb" # "#8ed6fb" (default), "#8ed6fb" (orignal), or custom color
# [doks.menu]
# [doks.menu.section]
# auto = true # true (default) or false
# collapsibleSidebar = true # true (default) or false
# Debug
[render_hooks.image]
errorLevel = 'ignore' # ignore (default), warning, or error (fails the build)
[render_hooks.link]
errorLevel = 'ignore' # ignore (default), warning, or error (fails the build)
highlightBroken = false # true or false (default)
# Images (@thulite/images)
[thulite_images]
[thulite_images.defaults]
decoding = "async" # sync, async, or auto (default)
fetchpriority = "auto" # high, low, or auto (default)
loading = "lazy" # eager or lazy (default)
widths = [480, 576, 768, 1025, 1200, 1440] # [640, 768, 1024, 1366, 1600, 1920] for example
sizes = "auto" # 100vw (default), 75vw, or auto for example
process = "" # "fill 1600x900" or "fill 2100x900" for example
lqip = "16x webp q20" # "16x webp q20" or "21x webp q20" for example
# Inline SVG (@thulite/inline-svg)
[inline_svg]
iconSetDir = "tabler-icons" # "tabler-icons" (default)
# SEO (@thulite/seo)
[seo]
[seo.title]
separator = " | "
suffix = ""
[seo.favicons]
sizes = []
icon = "favicon.png" # favicon.png (default)
svgIcon = "favicon.svg" # favicon.svg (default)
maskIcon = "mask-icon.svg" # mask-icon.svg (default)
maskIconColor = "white" # white (default)
[seo.schemas]
type = "Organization" # Organization (default) or Person
logo = "favicon-512x512.png" # Logo of Organization — favicon-512x512.png (default)
name = "Thulite" # Name of Organization or Person
sameAs = [] # E.g. ["https://github.com/thuliteio/thulite", "https://fosstodon.org/@thulite"]
images = ["cover.png"] # ["cover.png"] (default)
article = [] # Article sections
newsArticle = [] # NewsArticle sections
blogPosting = ["blog"] # BlogPosting sections
product = [] # Product sections