feat: completely reworked structure with nostyleplease theme
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
public/
|
||||
.hugo_build.lock
|
||||
/resources/_gen
|
35
contact.html
@ -1,35 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Experimental privacy-centric project that aims to provide a random selection of open-source services free of charge">
|
||||
|
||||
<link rel="stylesheet" href="style-min.css">
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/favicon-96x96.png" sizes="96x96" />
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/assets/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png" />
|
||||
<meta name="apple-mobile-web-app-title" content="Umbrella" />
|
||||
<link rel="manifest" href="/assets/webmanifest.json" />
|
||||
|
||||
<title>Umbrella - Contact</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<h1>Umbrella. <a href="/">home</a> <a href="/contact">contact</a></h1>
|
||||
|
||||
<p>Umbrella.haus is an experimental, privacy-centric project that aims to provide a curated selection of open-source services free of charge.</p>
|
||||
|
||||
<div class="section">
|
||||
<h2>Contact</h2>
|
||||
<ul>
|
||||
<li>Signal: <code>xmr.02</code></li>
|
||||
<li>Email: <code>ben (at) uq.ci</code></li>
|
||||
<li>PGP: <a href="https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1530f5132a1228578d2b4168995efd5c1b532b3e"><code>1530 F513 2A12 2857 8D2B 4168 995E FD5C 1B53 2B3E</code></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
5
content/_index.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
title: ""
|
||||
date: 2025-02-16T16:36:41+02:00
|
||||
draft: false
|
||||
---
|
19
hugo.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
baseURL: https://umbrella.haus
|
||||
title: Umbrella
|
||||
language: en-GB
|
||||
|
||||
theme: nostyleplease
|
||||
|
||||
params:
|
||||
theme_config:
|
||||
appearance: dark
|
||||
back_home_text: <<
|
||||
date_format: 2006-01-02
|
||||
isListGroupByDate: false
|
||||
|
||||
assets:
|
||||
favicon: /images/favicon.ico
|
||||
faviconsvg: /images/favicon.svg
|
||||
favicon96: /images/favicon-96x96.png
|
||||
appleTouchIcon: /images/apple-touch-icon.png
|
||||
manifest: /manifest.json
|
56
index.html
@ -1,56 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Experimental privacy-centric project that aims to provide a random selection of open-source services free of charge">
|
||||
|
||||
<link rel="stylesheet" href="style-min.css">
|
||||
|
||||
<link rel="icon" type="image/png" href="/assets/favicon-96x96.png" sizes="96x96" />
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/assets/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png" />
|
||||
<meta name="apple-mobile-web-app-title" content="Umbrella" />
|
||||
<link rel="manifest" href="/assets/webmanifest.json" />
|
||||
|
||||
<title>Umbrella</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<h1>Umbrella. <a href="/">home</a> <a href="/contact">contact</a></h1>
|
||||
|
||||
<p>Umbrella.haus is an experimental, privacy-centric project that aims to provide a curated selection of open-source services free of charge.</p>
|
||||
|
||||
<div class="section">
|
||||
<h2>Services</h2>
|
||||
<ul>
|
||||
<li><a href="https://git.umbrella.haus">Gitea</a>: Forge software package for hosting software version control using Git.</li>
|
||||
<li><a href="https://4.umbrella.haus">4get</a>: Proxy search engine that doesn't suck. Features a JavaScript-free interface and supports searching for websites, images, videos, news, and music.</li>
|
||||
<li><a href="https://ip.umbrella.haus">EchoIP</a>: Simple IP address lookup service with support for ASN, country, and city lookups powered by the MaxMind GeoIP database.</li>
|
||||
<li><a href="https://speed.umbrella.haus">LibreSpeed</a>: Extremely lightweight speedtest implemented in JavaScript (telemetry disabled). Utilizes XMLHttpRequest and Web Workers.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>Tor Relays</h2>
|
||||
<ul>
|
||||
<li><a href="https://metrics.torproject.org/rs.html#details/15CD2C302869242498AFEB2369C0E95882DFCB6A">Caspian</a> <code>15CD 2C30 2869 2424 98AF EB23 69C0 E958 82DF CB6A</code></li>
|
||||
<li><a href="https://metrics.torproject.org/rs.html#details/625CC20FF07AF5853EE4A11F9F0ADB023A229A24">Sargasso</a> <code>625C C20F F07A F585 3EE4 A11F 9F0A DB02 3A22 9A24</code></li>
|
||||
<li><a href="https://metrics.torproject.org/rs.html#details/DF6B339CF595EE2E23CAEDD61F2C51030236C5CE">Vostok</a> <code>DF6B 339C F595 EE2E 23CA EDD6 1F2C 5103 0236 C5CE</code></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h2>Under Construction 🏗️</h2>
|
||||
<ul>
|
||||
<li>New services:</li>
|
||||
<ul>
|
||||
<li><a href="https://codeberg.org/aryak/mozhi">Mozhi</a>: Frontend for multiple translation engines</li>
|
||||
<li><a href="https://github.com/PrivateBin/PrivateBin">PrivateBin</a>: Zero-knowledge pastebin</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
19
static/contact.txt
Normal file
@ -0,0 +1,19 @@
|
||||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
|
||||
Clearweb: golfed.xyz, umbrella.haus
|
||||
Onion: golfed6fzytoktol4de4o4nerap3xuykhfm5makfzscib65df3khnpyd.onion
|
||||
PGP: 1530F5132A1228578D2B4168995EFD5C1B532B3E
|
||||
Email: hello@golfed.xyz
|
||||
Matrix: @ae:golfed.xyz
|
||||
Signal: @xmr.02
|
||||
|
||||
Updated: 29/11/2024
|
||||
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iHUEARYKAB0WIQQVMPUTKhIoV40rQWiZXv1cG1MrPgUCZ0mHzQAKCRCZXv1cG1Mr
|
||||
Pl6yAQCjFkLnaCH9f3BQgAsCwpmjmxQzcOsVoptf4eB08ZJNbAD/RH2Suz1CJSWe
|
||||
LTusruFyxPEbzDsT+jNvebZRY91A5gQ=
|
||||
=UfKa
|
||||
-----END PGP SIGNATURE-----
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 299 KiB After Width: | Height: | Size: 299 KiB |
1
style-min.css
vendored
@ -1 +0,0 @@
|
||||
@font-face {font-family: 'Inter';font-style: normal;font-weight: 400;font-display: auto;src: url("/assets/fonts/Inter400-Latin.woff2") format("woff2");}@font-face {font-family: 'Inter';font-style: normal;font-weight: 500;font-display: auto;src: url("/assets/fonts/Inter500-Latin.woff2") format("woff2");}:root {font-family: "Inter", sans-serif;}body {background-color: #202124;color: #ccc;margin: 0;}.page {max-width: 800px;margin: auto;padding: 20px 40px;}.section {background-color: rgba(255, 255, 255, 0.05);margin-bottom: 20px;border-left: 4px solid #5e81ac;}.section h2 {font-size: 18px;font-weight: 600;color: #fff;padding: 8px 16px;margin: 0;background-color: transparent;border-left: none;}p {background-color: #49688e;padding: 16px 32px;color: #fff;text-align: center;}p > a {color: #fff;font-weight: 600 }h1 {font-size: 42px;color: #eee;font-weight: 600;margin-bottom: 8px;line-height: 32px;}h1 > a {font-size: 22px;color: #aaa }ul {padding: 8px 32px 16px;margin: 0;}li {font-size: 16px;font-weight: 400;margin-bottom: 8px;color: #ccc;}li > a {color: #5e81ac;font-weight: 600;}code {background-color: rgba(94, 129, 172, 0.2);color: #5e81ac;padding: 1px 6px;border-radius: 4px;font-family: "Courier New", monospace;}footer {text-align: center;padding: 20px;font-style: italic;}footer a {color: #ccc;}a {color: #5e81ac;text-decoration: none;transition: color 0.3s ease;}a:hover {color: #81a1c1;text-decoration: underline;}
|
117
style.css
@ -1,117 +0,0 @@
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: auto;
|
||||
src: url("/assets/fonts/Inter400-Latin.woff2") format("woff2");
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Inter';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: auto;
|
||||
src: url("/assets/fonts/Inter500-Latin.woff2") format("woff2");
|
||||
}
|
||||
|
||||
:root {
|
||||
font-family: "Inter", sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #202124;
|
||||
color: #ccc;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 20px 40px;
|
||||
}
|
||||
|
||||
.section {
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
margin-bottom: 20px;
|
||||
border-left: 4px solid #5e81ac;
|
||||
}
|
||||
|
||||
.section h2 {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
padding: 8px 16px;
|
||||
margin: 0;
|
||||
background-color: transparent;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
p {
|
||||
background-color: #49688e;
|
||||
padding: 16px 32px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p > a {
|
||||
color: #fff;
|
||||
font-weight: 600
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 42px;
|
||||
color: #eee;
|
||||
font-weight: 600;
|
||||
margin-bottom: 8px;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
h1 > a {
|
||||
font-size: 22px;
|
||||
color: #aaa
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 8px 32px 16px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
margin-bottom: 8px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
li > a {
|
||||
color: #5e81ac;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: rgba(94, 129, 172, 0.2);
|
||||
color: #5e81ac;
|
||||
padding: 1px 6px;
|
||||
border-radius: 4px;
|
||||
font-family: "Courier New", monospace;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #5e81ac;
|
||||
text-decoration: none;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #81a1c1;
|
||||
text-decoration: underline;
|
||||
}
|
185
themes/nostyleplease/assets/css/main.scss
Normal file
@ -0,0 +1,185 @@
|
||||
// -------------- THEME SWITCHER -------------- //
|
||||
@mixin theme($--bg-color, $--primary-text-color, $--secondary-text-color, $--link-color, $--visited-link-color, $--highlight) {
|
||||
background-color: $--bg-color;
|
||||
|
||||
color: $--primary-text-color;
|
||||
|
||||
a {
|
||||
color: $--link-color;
|
||||
&:visited { color: $--visited-link-color; }
|
||||
}
|
||||
|
||||
details {
|
||||
border: thin solid $--primary-text-color;
|
||||
}
|
||||
|
||||
details summary {
|
||||
color: $--primary-text-color;
|
||||
}
|
||||
|
||||
details[open] summary {
|
||||
border-bottom: 1px solid $--primary-text-color;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: $--bg-color;
|
||||
}
|
||||
|
||||
code:not(pre > code) {
|
||||
background-color: $--primary-text-color;
|
||||
color: $--bg-color;
|
||||
}
|
||||
|
||||
*:target {
|
||||
background: $--highlight;
|
||||
color: $--primary-text-color;
|
||||
}
|
||||
|
||||
table, th, td {
|
||||
border: thin solid $--primary-text-color;
|
||||
}
|
||||
|
||||
.toc {
|
||||
border: thin solid $--primary-text-color;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
figcaption { color: $--secondary-text-color; }
|
||||
|
||||
blockquote {
|
||||
border: thin solid $--primary-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin dark-appearance {
|
||||
@include theme(#000300, #eff6ee, #000300, #33658a, #55dde0, #9197ae); // modus-vivendi
|
||||
}
|
||||
|
||||
@mixin light-appearance {
|
||||
@include theme(#ffffff, #000000, #595959, #3548cf, #8f0075, #dae5ec); // modus-operandi
|
||||
}
|
||||
|
||||
body[a="dark"] { @include dark-appearance; }
|
||||
body[a="light"] { @include light-appearance; }
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body[a="auto"] { @include dark-appearance; }
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
body[a="auto"] { @include light-appearance; }
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
||||
html { height: 100%; }
|
||||
|
||||
body {
|
||||
font-family: monospace;
|
||||
font-size: 16px;
|
||||
line-height: 1.4;
|
||||
margin: 0;
|
||||
min-height: 100%;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
h2, h3, h4, h5, h6 { margin-top: 1.5rem; }
|
||||
|
||||
p { margin: 1rem 0; }
|
||||
|
||||
li { margin: 0.4rem 0; }
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
&:hover { text-decoration: underline; }
|
||||
}
|
||||
|
||||
hr {
|
||||
text-align: center;
|
||||
border: 0;
|
||||
margin: 2rem 0;
|
||||
|
||||
&:before { content: '/////' }
|
||||
&:after { content: attr(data-content) '/////' }
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 1em;
|
||||
overflow-x: auto; /* Fix pre content overflowing parent without scroll bar */
|
||||
}
|
||||
|
||||
table { width: 100%; }
|
||||
|
||||
table, th, td {
|
||||
border-collapse: collapse;
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
code {
|
||||
text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-moz-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
code:not(pre > code) {
|
||||
padding: 0.1em 0.2em;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
code.has-jax {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
background: inherit !important;
|
||||
border: none !important;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding: 1rem;
|
||||
|
||||
p { margin: 0; }
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
text-align: center;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
details {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
details summary {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
details[open] summary {
|
||||
margin-bottom: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.post-meta {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.w {
|
||||
max-width: 640px;
|
||||
margin: 0 auto;
|
||||
padding: 4rem 2rem;
|
||||
}
|
||||
|
||||
.toc {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.site-footer {
|
||||
margin-top: 2em;
|
||||
}
|
25
themes/nostyleplease/data/menu.toml
Normal file
@ -0,0 +1,25 @@
|
||||
[[entries]]
|
||||
title = "services"
|
||||
entries = [
|
||||
{ title = "4get (proxy search engine)", url = "https://4.umbrella.haus/" },
|
||||
{ title = "gitea (git hosting)", url = "https://git.umbrella.haus/" },
|
||||
{ title = "echoip (ip lookup)", url = "https://ip.umbrella.haus/" },
|
||||
{ title = "librespeed (speedtest)", url = "https://speed.umbrella.haus/" },
|
||||
]
|
||||
|
||||
[[entries]]
|
||||
title = "tor relays"
|
||||
entries = [
|
||||
{ title = "caspian (15CD2C...DFCB6A)", url = "https://metrics.torproject.org/rs.html#details/15CD2C302869242498AFEB2369C0E95882DFCB6A" },
|
||||
{ title = "sargasso (625CC2...229A24)", url = "https://metrics.torproject.org/rs.html#details/625CC20FF07AF5853EE4A11F9F0ADB023A229A24" },
|
||||
{ title = "vostok (DF6B33...36C5CE)", url = "https://metrics.torproject.org/rs.html#details/DF6B339CF595EE2E23CAEDD61F2C51030236C5CE" },
|
||||
]
|
||||
|
||||
[[entries]]
|
||||
title = "contacts"
|
||||
entries = [
|
||||
{ title = "email (hello at golfed.xyz)", url = "mailto:hello@golfed.xyz" },
|
||||
{ title = "pgp (1530F5...532B3E)", url = "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1530f5132a1228578d2b4168995efd5c1b532b3e" },
|
||||
{ title = "matrix (@ae:golfed.xyz)", url = "https://matrix.to/#/@ae:golfed.xyz" },
|
||||
{ title = "signal (xmr.02)", url = "https://signal.me/#eu/9aAt0tk36ErVZygWxf_dk81_r_2jTaxUxVCuvl_h6LONUyREI7hLm42Oa8RYJgoz" },
|
||||
]
|
8
themes/nostyleplease/layouts/404.html
Normal file
@ -0,0 +1,8 @@
|
||||
{{ define "main" }}
|
||||
|
||||
{{- partial "back_link.html" . -}}
|
||||
|
||||
<header>
|
||||
<h1>404 Not Found</h1>
|
||||
</header>
|
||||
{{ end }}
|
12
themes/nostyleplease/layouts/_default/baseof.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ $.Site.LanguageCode }}">
|
||||
{{- partial "head.html" . -}}
|
||||
<body a="{{ $.Site.Params.theme_config.appearance | default "auto" }}">
|
||||
<main class="page-content" aria-label="Content">
|
||||
<div class="w">
|
||||
{{- block "main" . }}{{- end }}
|
||||
{{ partial "footer.html" }}
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
8
themes/nostyleplease/layouts/_default/list.html
Normal file
@ -0,0 +1,8 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "back_link.html" .}}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "post_list.html" (dict "context" . "section" .Section)}}
|
||||
{{ end }}
|
21
themes/nostyleplease/layouts/_default/single.html
Normal file
@ -0,0 +1,21 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "back_link.html" .}}
|
||||
|
||||
<article>
|
||||
<p class="post-meta">
|
||||
<time datetime="{{ .Date }}">
|
||||
{{ .Date | time.Format site.Params.theme_config.date_format }}
|
||||
</time>
|
||||
</p>
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ if .Params.toc }}
|
||||
<aside {{ if .Params.tocBorder }} class="toc" {{ end }}>
|
||||
{{ .TableOfContents }}
|
||||
</aside>
|
||||
{{ end }}
|
||||
|
||||
{{ .Content }}
|
||||
</article>
|
||||
{{ end }}
|
8
themes/nostyleplease/layouts/_default/taxonomy.html
Normal file
@ -0,0 +1,8 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "back_link.html" .}}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "post_list.html" (dict "context" .)}}
|
||||
{{ end }}
|
8
themes/nostyleplease/layouts/_default/term.html
Normal file
@ -0,0 +1,8 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "back_link.html" .}}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "post_list.html" (dict "context" .)}}
|
||||
{{ end }}
|
12
themes/nostyleplease/layouts/index.html
Normal file
@ -0,0 +1,12 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<header>
|
||||
<h1>{{ $.Site.Title }}</h1>
|
||||
{{- if $.Site.Params.theme_config.show_description -}}
|
||||
<p>{{ $.Site.Params.description }}</p>
|
||||
{{- end -}}
|
||||
</header>
|
||||
{{ .Content }}
|
||||
{{ partial "menu_item.html" (dict "context" . "collection" $.Site.Data.menu.entries) }}
|
||||
|
||||
{{ end }}
|
1
themes/nostyleplease/layouts/partials/back_link.html
Normal file
@ -0,0 +1 @@
|
||||
<a href="{{ "" | relURL }}">{{ $.Site.Params.theme_config.back_home_text }}</a>
|
3
themes/nostyleplease/layouts/partials/footer.html
Normal file
@ -0,0 +1,3 @@
|
||||
<footer class="site-footer">
|
||||
<p>{{ now.Format "2006" }} / <a href="/contact.txt" target="_blank" rel="noopener noreferrer">contact.txt</a> / <a href="https://golfed.xyz" target="_blank" rel="noopener noreferrer">golfed.xyz</a></p>
|
||||
</footer>
|
28
themes/nostyleplease/layouts/partials/head.html
Normal file
@ -0,0 +1,28 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
{{ if .IsPage }} <meta name="description" content="{{ .Summary }}"> {{ end }}
|
||||
|
||||
<title>
|
||||
{{ if not .IsHome }}
|
||||
{{ .Title }}
|
||||
{{ else }}
|
||||
{{ $.Site.Title }}
|
||||
{{ end }}
|
||||
</title>
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{{ $.Site.Params.favicon | relURL }}" />
|
||||
{{ $options := (dict "outputStyle" "compressed" "enableSourceMap" (not hugo.IsProduction)) }}
|
||||
{{ $sass := resources.Get "css/main.scss" }}
|
||||
{{ $style := $sass | css.Sass $options | resources.Fingerprint "sha512" }}
|
||||
<link rel="stylesheet" href="{{ $style.Permalink | relURL }}" integrity="{{ $style.Data.Integrity }}" />
|
||||
{{ if .Params.mathjax }} {{ partial "mathjax.html" . }} {{ end }}
|
||||
|
||||
<!-- Custom icons -->
|
||||
<link rel="icon" type="image/png" href="{{ site.Params.assets.favicon96 | default "favicon-96x96.png" | absURL }}" sizes="96x96" />
|
||||
<link rel="icon" type="image/svg+xml" href="{{ site.Params.assets.faviconsvg | default "favicon.svg" | absURL }}" />
|
||||
<link rel="shortcut icon" href="{{ site.Params.assets.favicon | default "favicon.ico" | absURL }}" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ site.Params.assets.appleTouchIcon | default "apple-touch-icon.png" | absURL }}" />
|
||||
<link rel="manifest" href="{{ site.Params.assets.manifest | default "manifest.json" | absURL }}" />
|
||||
</head>
|
21
themes/nostyleplease/layouts/partials/mathjax.html
Normal file
@ -0,0 +1,21 @@
|
||||
<script>
|
||||
MathJax = {
|
||||
tex: {
|
||||
inlineMath: [['$', '$'], ['\\(', '\\)']],
|
||||
displayMath: [['$$','$$'], ['\\[', '\\]']],
|
||||
processEscapes: true,
|
||||
processEnvironments: true
|
||||
},
|
||||
options: {
|
||||
skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('load', (event) => {
|
||||
document.querySelectorAll("mjx-container").forEach(function(x){
|
||||
x.parentElement.classList += 'has-jax'})
|
||||
});
|
||||
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?features=es6"></script>
|
||||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
19
themes/nostyleplease/layouts/partials/menu_item.html
Normal file
@ -0,0 +1,19 @@
|
||||
<ul>
|
||||
{{- range $item := .collection -}}
|
||||
<li>
|
||||
{{- with $item.url -}}
|
||||
<a href="{{ $item.url | relURL }}">{{ safeHTML $item.title }}</a>
|
||||
{{- else -}}
|
||||
{{ safeHTML $item.title }}
|
||||
{{- end -}}
|
||||
</li>
|
||||
|
||||
{{- if $item.entries }}
|
||||
{{ partial "menu_item.html" (dict "context" . "collection" $item.entries) }}
|
||||
{{- end -}}
|
||||
|
||||
{{- if $item.post_list -}}
|
||||
{{ partial "post_list.html" (dict "context" . "section" $item.post_list.section "limit" $item.post_list.limit "show_more" $item.post_list.show_more "show_more_text" $item.post_list.show_more_text "show_more_url" $item.post_list.show_more_url) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</ul>
|
39
themes/nostyleplease/layouts/partials/post_list.html
Normal file
@ -0,0 +1,39 @@
|
||||
{{- $posts := "" -}}
|
||||
|
||||
{{- if .section -}}
|
||||
{{- $posts = (where site.RegularPages "Section" .section) -}}
|
||||
{{- else -}}
|
||||
{{- if (eq .context.Kind "taxonomy") -}}
|
||||
{{- $posts = .context.Pages -}}
|
||||
{{- else -}}
|
||||
{{- if (eq .context.Kind "term") -}}
|
||||
{{- $posts = .context.Data.Pages -}}
|
||||
{{- else -}}
|
||||
{{- $posts = site.RegularPages }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $limit_exceeded:= "" -}}
|
||||
{{- if (and .limit (gt (len $posts) .limit)) -}}
|
||||
{{- $limit_exceeded = true -}}
|
||||
{{- else -}}
|
||||
{{- $limit_exceeded = false -}}
|
||||
{{ end }}
|
||||
|
||||
{{- if (gt (len $posts) 0) }}
|
||||
{{- if .limit }}
|
||||
{{ $posts = (first .limit $posts ) }}
|
||||
{{ end }}
|
||||
<ul>
|
||||
{{- range $post := $posts -}}
|
||||
<li>
|
||||
<span>{{- ($post.Date | time.Format site.Params.theme_config.date_format) }}</span>
|
||||
<a href="{{ $post.Permalink | relURL }}">{{ $post.Title }}</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
{{- if and .show_more $limit_exceeded }}
|
||||
<li><a href="{{ .show_more_url | relURL }}">{{ .show_more_text | default "Show more..." }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
20
themes/nostyleplease/layouts/posts/baseof.html
Normal file
@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ $.Site.LanguageCode }}">
|
||||
{{- partial "head.html" . -}}
|
||||
<body a="{{ $.Site.Params.theme_config.appearance | default "auto" }}">
|
||||
<main class="page-content" aria-label="Content">
|
||||
<div class="w">
|
||||
<div class="post-meta">
|
||||
{{ partial "back_link.html" .}}
|
||||
<p>
|
||||
<time datetime="{{ .Date }}">
|
||||
{{ .Date | time.Format site.Params.theme_config.date_format }}
|
||||
</time>
|
||||
</p>
|
||||
</div>
|
||||
{{- block "main" . }}{{- end }}
|
||||
{{ partial "footer.html" }}
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
21
themes/nostyleplease/layouts/posts/list.html
Normal file
@ -0,0 +1,21 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ .Content }}
|
||||
|
||||
<!-- divide post list by year -->
|
||||
{{ if .Site.Params.theme_config.isListGroupByDate }}
|
||||
{{ range .Pages.GroupByDate "2006 Year" }}
|
||||
<p>{{ .Key }}</p>
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
<li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ partial "post_list.html" (dict "context" . "section" .Section)}}
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
14
themes/nostyleplease/layouts/posts/single.html
Normal file
@ -0,0 +1,14 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<article>
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ if .Params.toc }}
|
||||
<aside {{ if .Params.tocBorder }} class="toc" {{ end }}>
|
||||
{{ .TableOfContents }}
|
||||
</aside>
|
||||
{{ end }}
|
||||
|
||||
{{ .Content }}
|
||||
</article>
|
||||
{{ end }}
|
6
themes/nostyleplease/layouts/shortcodes/details.html
Normal file
@ -0,0 +1,6 @@
|
||||
<details {{ if eq (.Get "open" | default "false") "true" }}open{{ end }}>
|
||||
<summary>
|
||||
{{ .Get "summary" | default "Details:" }}
|
||||
</summary>
|
||||
{{ .Inner | markdownify }}
|
||||
</details>
|
3
themes/nostyleplease/layouts/shortcodes/texd.html
Normal file
@ -0,0 +1,3 @@
|
||||
<span>
|
||||
$${{ .Get 0 }}$$
|
||||
</span>
|
3
themes/nostyleplease/layouts/shortcodes/texi.html
Normal file
@ -0,0 +1,3 @@
|
||||
<span>
|
||||
\({{ .Get 0 }}\)
|
||||
</span>
|
21
themes/nostyleplease/theme.toml
Normal file
@ -0,0 +1,21 @@
|
||||
# theme.toml template for a Hugo theme
|
||||
# See https://github.com/gohugoio/hugoThemes#themetoml for an example
|
||||
|
||||
name = "no-style-please"
|
||||
license = "MIT"
|
||||
licenselink = "https://github.com/Masellum/hugo-theme-nostyleplease/blob/main/LICENSE"
|
||||
description = "a (nearly) no-CSS, fast, minimalist Hugo theme ported from riggraz/no-style-please."
|
||||
homepage = "https://github.com/Masellum/hugo-theme-nostyleplease"
|
||||
tags = ["blog", "minimalist"]
|
||||
features = []
|
||||
min_version = "0.41.0"
|
||||
|
||||
[author]
|
||||
name = "Masellum"
|
||||
homepage = "Masellum.github.io"
|
||||
|
||||
# If porting an existing theme
|
||||
[original]
|
||||
name = "riggraz"
|
||||
homepage = "https://riggraz.dev/"
|
||||
repo = "https://github.com/riggraz/no-style-please"
|