diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 0000000..17a8071
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,75 @@
+# Sample workflow for building and deploying a Hugo site to GitHub Pages
+name: Blowfish Docs Deploy
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches: ["main"]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow one concurrent deployment
+concurrency:
+ group: "pages"
+ cancel-in-progress: true
+
+# Default to bash
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Hugo setup
+ uses: peaceiris/actions-hugo@v2.6.0
+ with:
+ hugo-version: 0.142.0
+ extended: true
+ env:
+ ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
+
+ - name: Check out code into the Go module directory
+ uses: actions/checkout@v4
+ with:
+ submodules: true # Fetch Hugo themes (true OR recursive)
+ fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
+
+ - name: Setup Pages
+ id: pages
+ uses: actions/configure-pages@v2
+
+ - name: Build with Hugo
+ env:
+ # For maximum backward compatibility with Hugo modules
+ HUGO_ENVIRONMENT: production
+ HUGO_ENV: production
+ run: |
+ hugo -d ./public --baseURL https://nunocoracao.github.io/blowfish_template/
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: ./public
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: https://nunocoracao.github.io/blowfish_template/
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..001bb31
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,132 @@
+# Hugo build folder
+public/
+# Hugo resource cache
+resources/_gen/
+# Build locks and temporary files
+.hugo_build.lock
+.DS_Store
+# Temporary system files
+Thumbs.db
+# Hugo generated search/taxonomy files (if they are in the root)
+index.json
+index.xml
+sitemap.xml
+# If you have specific node_modules or temp files
+node_modules/
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# Next.js build output
+.next
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and *not* Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# --- Added to exclude Hugo build artifacts ---
+/index.html
+/404.html
+/css/
+/js/
+/img/
+/lib/
+/series/
+/tags/
+/update.sh
+/layouts/partials/head_temp_overide.html
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 03a6fed..a96db21 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,5 @@
-image: registry.gitlab.com/pages/hugo/hugo_extended:latest
+# Use a specific version tag to bypass 'latest' caching issues
+image: klakegg/hugo:0.155.3-ext-alpine
variables:
HUGO_ENV: production
diff --git a/FUNDING.YML b/FUNDING.YML
new file mode 100644
index 0000000..6d80795
--- /dev/null
+++ b/FUNDING.YML
@@ -0,0 +1,2 @@
+github: [nunocoracao]
+custom: ["https://www.paypal.me/nunocoracao", "https://www.buymeacoffee.com/nunocoracao"]
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..cf00ae5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Nuno Coração
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
deleted file mode 100644
index 93c013c..0000000
--- a/layouts/partials/head.html
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
- {{ with .Site.Language.Params.htmlCode | default .Site.LanguageCode }}
-
- {{ end }}
-
-
-
-
- {{/* Title */}}
- {{ if .IsHome }}
- {{ .Site.Title | emojify }}
-
- {{ else }}
- {{ .Title | emojify }} · {{ .Site.Title | emojify }}
-
- {{ end }}
-
- {{/* Metadata */}}
- {{ with (.Params.Summary | default .Params.Description) | default .Site.Params.description }}
-
- {{ end }}
- {{ with .Params.Tags | default .Site.Params.keywords }}
-
- {{ end }}
- {{ with .Site.Params.robots }}
-
- {{ end }}
- {{ with .Params.robots }}
-
- {{ end }}
-
- {{ range .AlternativeOutputFormats }}
- {{ printf `
- ` .Rel .MediaType.Type .RelPermalink ($.Site.Title | emojify) |
- safeHTML
- }}
- {{ end }}
-
- {{/* Me */}}
- {{ with .Site.Params.Author.name }}
-
- {{ end }}
- {{ with .Site.Params.Author.links }}
- {{ range $links := . }}
- {{ range $name, $url := $links }}
- {{ if not (strings.HasPrefix $url "mailto:") }}
-
- {{ end }}
- {{ end }}
- {{ end }}
- {{ end }}
-
- {{/* Social */}}
- {{ template "_internal/opengraph.html" . }}
- {{ template "_internal/twitter_cards.html" . }}
- {{/* Use defaultSocialImage if feature image does not exist */}}
- {{ $featureImage := "" }}
- {{ $pageImages := .Resources.ByType "image" }}
- {{ range slice "*featured*" "*cover*" "*thumbnail*" }}
- {{ if not $featureImage }}
- {{ $featureImage = $pageImages.GetMatch . }}
- {{ end }}
- {{ end }}
- {{ if not $featureImage }}
- {{ with .Site.Params.defaultSocialImage }}
- {{ $socialImage := "" }}
- {{ if or (strings.HasPrefix . "http:") (strings.HasPrefix . "https:") }}
- {{ $socialImage = resources.GetRemote . }}
- {{ else }}
- {{ $socialImage = resources.Get . }}
- {{ end }}
- {{ with $socialImage }}
-
-
- {{ end }}
- {{ end }}
- {{ end }}
-
- {{/* Site Verification */}}
- {{ with .Site.Params.verification.google }}
-
- {{ end }}
- {{ with .Site.Params.verification.bing }}
-
- {{ end }}
- {{ with .Site.Params.verification.pinterest }}
-
- {{ end }}
- {{ with .Site.Params.verification.yandex }}
-
- {{ end }}
- {{ with .Site.Params.verification.fediverse }}
-
- {{ end }}
-
- {{ $alg := .Site.Params.fingerprintAlgorithm | default "sha512" }}
-
- {{/* CSS */}}
- {{ $cssResources := slice }}
- {{ $schemeName := .Site.Params.colorScheme | default "blowfish" }}
- {{ $cssScheme := resources.Get (printf "css/schemes/%s.css" (lower $schemeName)) | default (resources.Get "css/schemes/blowfish.css") }}
- {{ $cssResources = $cssResources | append $cssScheme }}
- {{ $cssResources = $cssResources | append (resources.Get "css/compiled/main.css") }}
- {{ with resources.Get "css/custom.css" }}
- {{ $cssResources = $cssResources | append . }}
- {{ end }}
- {{ if not .Site.Params.disableImageZoom | default true }}
- {{ $cssResources = $cssResources | append (resources.Get "lib/zoom/style.css") }}
- {{ end }}
- {{ $bundleCSS := $cssResources | resources.Concat "css/main.bundle.css" | resources.Minify | resources.Fingerprint $alg }}
-
-
- {{/* JS loaded immediately */}}
- {{ $jsAppearance := resources.Get "js/appearance.js" | resources.ExecuteAsTemplate "js/appearance.js" . | resources.Minify | resources.Fingerprint $alg }}
-
- {{ $enableA11y := .Site.Params.enableA11y | default false }}
- {{ if $enableA11y }}
- {{ $jsA11y := resources.Get "js/a11y.js" | resources.Minify | resources.Fingerprint $alg }}
-
- {{ end }}
- {{ $showZenMode := .Params.showZenMode | default (.Site.Params.article.showZenMode | default false) }}
- {{ $shouldIncludeZenMode := or $enableA11y $showZenMode }}
- {{ if and .IsPage $shouldIncludeZenMode }}
- {{ $jsZenMode := resources.Get "js/zen-mode.js" | resources.Minify | resources.Fingerprint $alg }}
-
- {{ end }}
- {{ if not .Site.Params.disableImageZoom | default true }}
- {{ $zoomJS := resources.Get "lib/zoom/zoom.min.umd.js" | resources.Fingerprint $alg }}
-
- {{ end }}
-
- {{/* JS deferred */}}
- {{ $jsResources := slice }}
- {{ if site.Params.footer.showScrollToTop | default true }}
- {{ $jsResources = $jsResources | append (resources.Get "js/scroll-to-top.js") }}
- {{ end }}
- {{ if .Site.Params.enableSearch | default false }}
- {{ $jsResources = $jsResources | append (resources.Get "lib/fuse/fuse.min.js") | append (resources.Get "js/search.js") }}
- {{ end }}
- {{ if .Site.Params.enableCodeCopy | default false }}
- {{ $jsResources = $jsResources | append (resources.Get "js/code.js") }}
- {{ end }}
- {{ if .Site.Params.rtl | default false }}
- {{ $jsResources = $jsResources | append (resources.Get "js/rtl.js") }}
- {{ end }}
- {{ $jsResources = $jsResources | append (resources.Get "js/button-likes.js") }}
- {{ $jsResources = $jsResources | append (resources.Get "js/katex-render.js") }}
- {{ $jsResources = $jsResources | append (resources.Get "js/print-support.js") }}
- {{ if $jsResources }}
- {{ $bundleJS := $jsResources | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint $alg }}
-
- {{ end }}
-
- {{/* Conditional loaded resources */}}
- {{ partial "vendor.html" . }}
-
- {{/* Icons */}}
- {{ if templates.Exists "partials/favicons.html" }}
- {{ partialCached "favicons.html" .Site }}
- {{ else }}
-
-
-
-
- {{ end }}
-
- {{/* Schema */}}
- {{ partial "schema.html" . }}
-
- {{/* Analytics */}}
- {{ if hugo.IsProduction }}
- {{ partial "analytics/main.html" . }}
- {{ end }}
-
- {{/* Extend head - eg. for custom analytics scripts, etc. */}}
- {{ if templates.Exists "partials/extend-head.html" }}
- {{ partialCached "extend-head.html" .Site }}
- {{ end }}
-
- {{/* Uncached extend head - Example: https://gohugo.io/methods/page/hasshortcode/ */}}
- {{ if templates.Exists "partials/extend-head-uncached.html" }}
- {{ partial "extend-head-uncached.html" . }}
- {{ end }}
-
- {{/* Firebase */}}
- {{ with $.Site.Params.firebase }}
- {{ if isset $.Site.Params "firebase" }}
-
-
-
-
- {{ end }}
- {{ end }}
-
- {{/* Advertisement */}}
- {{ with .Site.Params.advertisement.adsense }}
-
-
- {{ end }}
-
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..bd0b874
--- /dev/null
+++ b/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "blowfish_template",
+ "version": "1.0.0",
+ "description": "Blowfish Template",
+ "main": "index.js",
+ "scripts": {
+ "dev": "hugo server --minify -D -E -F"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/nunocoracao/blowfish_template.git"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/nunocoracao/blowfish_template/issues"
+ },
+ "homepage": "https://github.com/nunocoracao/blowfish_template#readme"
+}
\ No newline at end of file
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..b27b184
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+Allow: /
+Sitemap: /sitemap.xml
diff --git a/site.webmanifest b/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/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/static/icons/icon.svg b/static/icons/icon.svg
new file mode 100644
index 0000000..a6b3b30
--- /dev/null
+++ b/static/icons/icon.svg
@@ -0,0 +1,37 @@
+