First commit
Some checks failed
Blowfish Docs Deploy / build (push) Has been cancelled
Blowfish Docs Deploy / deploy (push) Has been cancelled
Test Build / Build Example Site (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Update Hugo version / updateBlowfish (push) Has been cancelled

Delete exampleSite
Add initial content, images & docker-compose.yml
Use extend-head.html for analytics
Set remote url to gitea.novicelab.io
Remove original .git due to "shallow update not allowed" error
This commit is contained in:
2026-03-14 14:37:54 +00:00
commit 6330092560
508 changed files with 36938 additions and 0 deletions

69
config/_default/hugo.toml Normal file
View File

@@ -0,0 +1,69 @@
# -- Site Configuration --
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/getting-started/
# theme = "blowfish" # UNCOMMENT THIS LINE
baseURL = "https://novicelab.io/"
defaultContentLanguage = "en"
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
enableRobotsTXT = true
summaryLength = 0
buildDrafts = false
buildFuture = false
enableEmoji = true
# googleAnalytics = "G-XXXXXXXXX"
[pagination]
pagerSize = 100
[imaging]
anchor = 'Center'
[taxonomies]
tag = "tags"
category = "categories"
author = "authors"
series = "series"
[sitemap]
changefreq = 'daily'
filename = 'sitemap.xml'
priority = 0.5
[outputs]
home = ["HTML", "RSS", "JSON"]
[related]
threshold = 0
toLower = false
[[related.indices]]
name = "tags"
weight = 100
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "series"
weight = 50
[[related.indices]]
name = "authors"
weight = 20
[[related.indices]]
name = "date"
weight = 10
[[related.indices]]
applyFilter = false
name = 'fragmentrefs'
type = 'fragments'
weight = 10

View File

@@ -0,0 +1,29 @@
disabled = false
languageCode = "en"
languageName = "English"
weight = 1
title = "novicelab.io"
[params]
displayName = "EN"
isoCode = "en"
rtl = false
dateFormat = "2 January 2006"
logo = "img/ardhapataka.png"
secondaryLogo = "img/ardhapataka.png"
description = "novicelab.io"
copyright = "2025 - 2026" #"Copy, _right?_ :thinking_face:"
[params.author]
name = "Brian Ng'eno"
email = "kbrianngeno@gmail.com"
image = "img/me.jpeg"
imageQuality = 96
headline = "What I've got going on on my homelab"
bio = "A Sys Dev who needed a new hobby."
links = [
{ email = "mailto:kbrianngeno@gmail.com" },
{ github = "https://github.com/kbrianngeno" },
{ linkedin = "https://linkedin.com/in/kbrianngeno" },
{ x-twitter = "https://twitter.com/kbrianngeno" },
]

View File

@@ -0,0 +1,26 @@
# -- Markup --
# These settings are required for the theme to function.
[goldmark]
[goldmark.parser]
wrapStandAloneImageWithinParagraph = false
[goldmark.parser.attribute]
block = true
[goldmark.renderer]
unsafe = true
[goldmark.extensions]
[goldmark.extensions.passthrough]
enable = true
[goldmark.extensions.passthrough.delimiters]
block = [['\[', '\]'], ['$$', '$$']]
inline = [['\(', '\)']]
[highlight]
noClasses = false
[tableOfContents]
startLevel = 2
endLevel = 4

View File

@@ -0,0 +1,108 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
[[main]]
name = "About"
pageRef = "about"
weight = 10
[[main]]
name = "Posts"
pageRef = "posts"
weight = 15
# [[main]]
# name = "Projects"
# pageRef = "projects"
# weight = 20
# [[main]]
# name = "Resume"
# pageRef = "resume"
# weight = 25
[[main]]
name = "Links"
pageRef = "links"
weight = 30
#[[main]]
# name = "Parent"
# weight = 20
#[[main]]
# name = "example sub-menu 1"
# parent = "Parent"
# pageRef = "posts"
# weight = 20
#[[main]]
# name = "example sub-menu 2"
# parent = "Parent"
# pageRef = "posts"
# weight = 20
#[[subnavigation]]
# name = "An interesting topic"
# pageRef = "tags/interesting-topic"
# weight = 10
#[[subnavigation]]
# name = "My Awesome Category"
# pre = "github"
# pageRef = "categories/awesome"
# weight = 20
[[main]]
identifier = "twitter"
pre = "x-twitter"
url = "https://twitter.com/kbrianngeno"
weight = 200
#[[main]]
# identifier = "mastodon"
# pre = "mastodon"
# weight = 300
# url = "https://masto.ai/@blowfish"
[[main]]
identifier = "github"
pre = "github"
url = "https://github.com/kbrianngeno"
weight = 400
# [[main]]
# name = "Categories"
# pageRef = "categories"
# weight = 20
# [[main]]
# name = "Tags"
# pageRef = "tags"
# weight = 30
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "Tags"
pageRef = "tags"
weight = 10
[[footer]]
name = "Categories"
pageRef = "categories"
weight = 20

View File

186
config/_default/params.toml Normal file
View File

@@ -0,0 +1,186 @@
# -- Theme Options --
# These options control how the theme functions and allow you to
# customise the display of your website.
#
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/configuration/#theme-parameters
colorScheme = "one-light"
defaultAppearance = "light" # valid options: light or dark
autoSwitchAppearance = true
enableA11y = false
enableSearch = true
enableCodeCopy = false
enableStructuredBreadcrumbs = false
# enableStyledScrollbar = true # disable to use native scrollbar style (defaults to true)
replyByEmail = false
# mainSections = ["section1", "section2"]
# robots = ""
disableImageOptimization = false
disableImageOptimizationMD = false
disableTextInHeader = false
# backgroundImageWidth = 1200
defaultBackgroundImage = "https://cdn.esahubble.org/archives/images/thumb700x/heic1608a.jpg" #"https://cdn.esahubble.org/archives/images/thumb700x/heic1501a.jpg" # used as default for background images
# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles
# defaultSocialImage = "/android-chrome-512x512.png" # used as default for social media sharing (Open Graph and Twitter)
hotlinkFeatureImage = false
# imagePosition = "50% 50%"
highlightCurrentMenuArea = true
smartTOC = true
smartTOCHideUnfocusedChildren = true
fingerprintAlgorithm = "sha512" # Valid values are "sha512" (default), "sha384", "sha256"
giteaDefaultServer = "https://git.fsfe.org"
forgejoDefaultServer = "https://v11.next.forgejo.org"
analytics = "umami"
[header]
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
[footer]
showMenu = true
showCopyright = true
showThemeAttribution = true
showAppearanceSwitcher = true
showScrollToTop = true
[homepage]
layout = "background" # valid options: page, profile, hero, card, background, custom
homepageImage = "https://cdn.esahubble.org/archives/images/thumb700x/heic1608a.jpg" #"img/background.svg" # used in: hero, and card
showRecent = true
showRecentItems = 5
showMoreLink = true
showMoreLinkDest = "/posts"
cardView = true
cardViewScreenWidth = false
layoutBackgroundBlur = false # only used when layout equals background
disableHeroImageFilter = false # only used when layout equals hero
[article]
showDate = true
# showSummary = true
showViews = false
showLikes = false
showDateOnlyInArticle = false
showDateUpdated = true
showAuthor = true
# showAuthorBottom = false
showHero = true
heroStyle = "background" #"basic" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = false
showDraftLabel = true
showEdit = false
# editURL = "https://github.com/username/repo/"
editAppendPath = true
seriesOpened = false
showHeadingAnchors = true
showPagination = true
invertPagination = false
showReadingTime = true
showTableOfContents = true
showRelatedContent = true
relatedContentLimit = 3
showTaxonomies = false # use showTaxonomies OR showCategoryOnly, not both
showCategoryOnly = false # use showTaxonomies OR showCategoryOnly, not both
showAuthorsBadges = false
showWordCount = true
# sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "pinterest", "facebook", "email", "whatsapp", "telegram", "line"]
showZenMode = false
# externalLinkForceNewTab = false # disable to allow external links in the same tab (defaults to true)
[list]
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = true
showSummary = true
showViews = false
showLikes = false
showTableOfContents = false
showCards = true
orderByWeight = false
groupByYear = true
cardView = true
cardViewScreenWidth = false
constrainItemsWidth = false
[sitemap]
excludedKinds = ["taxonomy", "term"]
[taxonomy]
showTermCount = true
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = false
cardView = false
[term]
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = true
groupByYear = false
cardView = false
cardViewScreenWidth = false
[firebase]
# apiKey = "XXXXXX"
# authDomain = "XXXXXX"
# projectId = "XXXXXX"
# storageBucket = "XXXXXX"
# messagingSenderId = "XXXXXX"
# appId = "XXXXXX"
# measurementId = "XXXXXX"
[fathomAnalytics]
# site = "ABC12345"
# domain = "llama.yoursite.com"
[umamiAnalytics]
websiteid = "6dc76b26-f911-4b0e-9827-6c2bfd49df04"
domain = "umami.novicelab.io"
dataDomains = "novicelab.io,www.novicelab.io"
scriptName = "script.js"
enableTrackEvent = true
doNotTrack = false
[selineAnalytics]
# token = "XXXXXX"
# enableTrackEvent = true
[buymeacoffee]
# identifier = ""
# globalWidget = true
# globalWidgetMessage = "Hello"
# globalWidgetColor = "#FFDD00"
# globalWidgetPosition = "right"
[verification]
# google = ""
# bing = ""
# pinterest = ""
# yandex = ""
# fediverse = ""
[rssnext]
# feedId = ""
# userId = ""
[advertisement]
# adsense = ""