]> danix's work - danix.xyz-2.git/commitdiff
feat: create base template with theme toggle, fonts, and Alpine.js
authorDanilo M. <redacted>
Wed, 15 Apr 2026 13:28:22 +0000 (15:28 +0200)
committerDanilo M. <redacted>
Wed, 15 Apr 2026 13:28:22 +0000 (15:28 +0200)
themes/danix-xyz-hacker/layouts/_default/baseof.html [new file with mode: 0644]

diff --git a/themes/danix-xyz-hacker/layouts/_default/baseof.html b/themes/danix-xyz-hacker/layouts/_default/baseof.html
new file mode 100644 (file)
index 0000000..89653a9
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="{{ .Lang }}" class="theme-dark">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="description" content="{{ .Site.Params.siteDescription }}">
+  <meta property="og:locale" content="{{ .Site.Language.Params.locale }}">
+  <meta property="og:type" content="website">
+  <meta property="og:url" content="{{ .Permalink }}">
+  <meta property="og:site_name" content="{{ .Site.Title }}">
+  <title>{{ .Title }}{{ if ne .Title .Site.Title }} — {{ .Site.Title }}{{ end }}</title>
+
+  <!-- Fonts -->
+  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&family=Oxanium:wght@400;600;700&display=swap" rel="stylesheet">
+
+  <!-- Feather Icons -->
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.css">
+
+  <!-- Tailwind CSS -->
+  {{ $css := resources.Get "css/main.css" | resources.ExecuteAsTemplate "css/main.css" . | minify }}
+  <link rel="stylesheet" href="{{ $css.RelPermalink }}">
+
+  <!-- Syntax highlighting (Chroma) -->
+  {{ $chroma := resources.Get "css/chroma-custom.css" | minify }}
+  <link rel="stylesheet" href="{{ $chroma.RelPermalink }}">
+</head>
+<body class="bg-bg text-text antialiased">
+  <!-- Dot grid background pattern -->
+  <div class="fixed inset-0 pointer-events-none opacity-5 dot-grid" style="
+    background-image: radial-gradient(circle, currentColor 1px, transparent 1px);
+    background-size: 30px 30px;
+    z-index: -1;
+  "></div>
+
+  <!-- Theme toggle & language toggle (before Alpine loads to prevent flash) -->
+  <script>
+    (function() {
+      const theme = localStorage.getItem('theme') || 'dark';
+      const html = document.documentElement;
+      html.classList.remove('theme-light', 'theme-dark');
+      html.classList.add('theme-' + theme);
+    })();
+  </script>
+
+  <!-- Navigation -->
+  {{ partial "header.html" . }}
+
+  <!-- Main content -->
+  <main id="main" class="relative z-10">
+    {{ block "main" . }}{{ end }}
+  </main>
+
+  <!-- Footer -->
+  {{ partial "footer.html" . }}
+
+  <!-- Alpine.js -->
+  <script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
+
+  <!-- Feather Icons initialization -->
+  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
+  <script>feather.replace();</script>
+
+  <!-- Theme toggle script -->
+  {{ $themeScript := resources.Get "js/theme-toggle.js" | minify }}
+  <script src="{{ $themeScript.RelPermalink }}"></script>
+
+  <!-- Menu script -->
+  {{ $menuScript := resources.Get "js/menu.js" | minify }}
+  <script src="{{ $menuScript.RelPermalink }}"></script>
+
+  <!-- Language switcher script -->
+  {{ $langScript := resources.Get "js/language-switcher.js" | minify }}
+  <script src="{{ $langScript.RelPermalink }}"></script>
+</body>
+</html>