diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b69c111 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +public/ +.hugo_build.lock +/resources/_gen \ No newline at end of file diff --git a/assets/fonts/Inter400-Latin.woff2 b/assets/fonts/Inter400-Latin.woff2 deleted file mode 100644 index 86f50d0..0000000 Binary files a/assets/fonts/Inter400-Latin.woff2 and /dev/null differ diff --git a/assets/fonts/Inter500-Latin.woff2 b/assets/fonts/Inter500-Latin.woff2 deleted file mode 100644 index db55875..0000000 Binary files a/assets/fonts/Inter500-Latin.woff2 and /dev/null differ diff --git a/contact.html b/contact.html deleted file mode 100644 index cd2cbd9..0000000 --- a/contact.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - Umbrella - Contact - - -
-

Umbrella. home contact

- -

Umbrella.haus is an experimental, privacy-centric project that aims to provide a curated selection of open-source services free of charge.

- -
-

Contact

- -
-
- - \ No newline at end of file diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..bec1581 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,5 @@ +--- +title: "" +date: 2025-02-16T16:36:41+02:00 +draft: false +--- diff --git a/hugo.yaml b/hugo.yaml new file mode 100644 index 0000000..4038be6 --- /dev/null +++ b/hugo.yaml @@ -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 diff --git a/index.html b/index.html deleted file mode 100644 index 114bf37..0000000 --- a/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - Umbrella - - -
-

Umbrella. home contact

- -

Umbrella.haus is an experimental, privacy-centric project that aims to provide a curated selection of open-source services free of charge.

- -
-

Services

- -
- -
-

Tor Relays

- -
- -
-

Under Construction 🏗️

- -
-
- - \ No newline at end of file diff --git a/static/contact.txt b/static/contact.txt new file mode 100644 index 0000000..3fd7198 --- /dev/null +++ b/static/contact.txt @@ -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----- diff --git a/assets/apple-touch-icon.png b/static/images/apple-touch-icon.png similarity index 100% rename from assets/apple-touch-icon.png rename to static/images/apple-touch-icon.png diff --git a/assets/favicon-96x96.png b/static/images/favicon-96x96.png similarity index 100% rename from assets/favicon-96x96.png rename to static/images/favicon-96x96.png diff --git a/assets/favicon.ico b/static/images/favicon.ico similarity index 100% rename from assets/favicon.ico rename to static/images/favicon.ico diff --git a/assets/favicon.svg b/static/images/favicon.svg similarity index 100% rename from assets/favicon.svg rename to static/images/favicon.svg diff --git a/assets/web-app-manifest-192x192.png b/static/images/web-app-manifest-192x192.png similarity index 100% rename from assets/web-app-manifest-192x192.png rename to static/images/web-app-manifest-192x192.png diff --git a/assets/web-app-manifest-512x512.png b/static/images/web-app-manifest-512x512.png similarity index 100% rename from assets/web-app-manifest-512x512.png rename to static/images/web-app-manifest-512x512.png diff --git a/assets/manifest.json b/static/manifest.json similarity index 100% rename from assets/manifest.json rename to static/manifest.json diff --git a/style-min.css b/style-min.css deleted file mode 100644 index bebf4af..0000000 --- a/style-min.css +++ /dev/null @@ -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;} \ No newline at end of file diff --git a/style.css b/style.css deleted file mode 100644 index cc9e1d4..0000000 --- a/style.css +++ /dev/null @@ -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; -} diff --git a/themes/nostyleplease/assets/css/main.scss b/themes/nostyleplease/assets/css/main.scss new file mode 100644 index 0000000..8c52c90 --- /dev/null +++ b/themes/nostyleplease/assets/css/main.scss @@ -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; +} diff --git a/themes/nostyleplease/data/menu.toml b/themes/nostyleplease/data/menu.toml new file mode 100644 index 0000000..eec37cf --- /dev/null +++ b/themes/nostyleplease/data/menu.toml @@ -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" }, +] diff --git a/themes/nostyleplease/layouts/404.html b/themes/nostyleplease/layouts/404.html new file mode 100644 index 0000000..eb600b4 --- /dev/null +++ b/themes/nostyleplease/layouts/404.html @@ -0,0 +1,8 @@ +{{ define "main" }} + +{{- partial "back_link.html" . -}} + +
+

404 Not Found

+
+{{ end }} \ No newline at end of file diff --git a/themes/nostyleplease/layouts/_default/baseof.html b/themes/nostyleplease/layouts/_default/baseof.html new file mode 100644 index 0000000..43aaa30 --- /dev/null +++ b/themes/nostyleplease/layouts/_default/baseof.html @@ -0,0 +1,12 @@ + + + {{- partial "head.html" . -}} + +
+
+ {{- block "main" . }}{{- end }} + {{ partial "footer.html" }} +
+
+ + diff --git a/themes/nostyleplease/layouts/_default/list.html b/themes/nostyleplease/layouts/_default/list.html new file mode 100644 index 0000000..b561c10 --- /dev/null +++ b/themes/nostyleplease/layouts/_default/list.html @@ -0,0 +1,8 @@ +{{ define "main" }} +{{ partial "back_link.html" .}} + +

{{ .Title }}

+ +{{ .Content }} +{{ partial "post_list.html" (dict "context" . "section" .Section)}} +{{ end }} \ No newline at end of file diff --git a/themes/nostyleplease/layouts/_default/single.html b/themes/nostyleplease/layouts/_default/single.html new file mode 100644 index 0000000..a09cee2 --- /dev/null +++ b/themes/nostyleplease/layouts/_default/single.html @@ -0,0 +1,21 @@ +{{ define "main" }} +{{ partial "back_link.html" .}} + +
+

+ +

+ +

{{ .Title }}

+ + {{ if .Params.toc }} + + {{ end }} + + {{ .Content }} +
+{{ end }} diff --git a/themes/nostyleplease/layouts/_default/taxonomy.html b/themes/nostyleplease/layouts/_default/taxonomy.html new file mode 100644 index 0000000..a1ecdc4 --- /dev/null +++ b/themes/nostyleplease/layouts/_default/taxonomy.html @@ -0,0 +1,8 @@ +{{ define "main" }} +{{ partial "back_link.html" .}} + +

{{ .Title }}

+ +{{ .Content }} +{{ partial "post_list.html" (dict "context" .)}} +{{ end }} diff --git a/themes/nostyleplease/layouts/_default/term.html b/themes/nostyleplease/layouts/_default/term.html new file mode 100644 index 0000000..a1ecdc4 --- /dev/null +++ b/themes/nostyleplease/layouts/_default/term.html @@ -0,0 +1,8 @@ +{{ define "main" }} +{{ partial "back_link.html" .}} + +

{{ .Title }}

+ +{{ .Content }} +{{ partial "post_list.html" (dict "context" .)}} +{{ end }} diff --git a/themes/nostyleplease/layouts/index.html b/themes/nostyleplease/layouts/index.html new file mode 100644 index 0000000..43b1ad0 --- /dev/null +++ b/themes/nostyleplease/layouts/index.html @@ -0,0 +1,12 @@ +{{ define "main" }} + +
+

{{ $.Site.Title }}

+ {{- if $.Site.Params.theme_config.show_description -}} +

{{ $.Site.Params.description }}

+ {{- end -}} +
+{{ .Content }} +{{ partial "menu_item.html" (dict "context" . "collection" $.Site.Data.menu.entries) }} + +{{ end }} \ No newline at end of file diff --git a/themes/nostyleplease/layouts/partials/back_link.html b/themes/nostyleplease/layouts/partials/back_link.html new file mode 100644 index 0000000..58919d2 --- /dev/null +++ b/themes/nostyleplease/layouts/partials/back_link.html @@ -0,0 +1 @@ +{{ $.Site.Params.theme_config.back_home_text }} diff --git a/themes/nostyleplease/layouts/partials/footer.html b/themes/nostyleplease/layouts/partials/footer.html new file mode 100644 index 0000000..942392e --- /dev/null +++ b/themes/nostyleplease/layouts/partials/footer.html @@ -0,0 +1,3 @@ + diff --git a/themes/nostyleplease/layouts/partials/head.html b/themes/nostyleplease/layouts/partials/head.html new file mode 100644 index 0000000..145dd93 --- /dev/null +++ b/themes/nostyleplease/layouts/partials/head.html @@ -0,0 +1,28 @@ + + + + + {{ if .IsPage }} {{ end }} + + + {{ if not .IsHome }} + {{ .Title }} + {{ else }} + {{ $.Site.Title }} + {{ end }} + + + + {{ $options := (dict "outputStyle" "compressed" "enableSourceMap" (not hugo.IsProduction)) }} + {{ $sass := resources.Get "css/main.scss" }} + {{ $style := $sass | css.Sass $options | resources.Fingerprint "sha512" }} + + {{ if .Params.mathjax }} {{ partial "mathjax.html" . }} {{ end }} + + + + + + + + diff --git a/themes/nostyleplease/layouts/partials/mathjax.html b/themes/nostyleplease/layouts/partials/mathjax.html new file mode 100644 index 0000000..4c73140 --- /dev/null +++ b/themes/nostyleplease/layouts/partials/mathjax.html @@ -0,0 +1,21 @@ + + + diff --git a/themes/nostyleplease/layouts/partials/menu_item.html b/themes/nostyleplease/layouts/partials/menu_item.html new file mode 100644 index 0000000..ec0a1af --- /dev/null +++ b/themes/nostyleplease/layouts/partials/menu_item.html @@ -0,0 +1,19 @@ + diff --git a/themes/nostyleplease/layouts/partials/post_list.html b/themes/nostyleplease/layouts/partials/post_list.html new file mode 100644 index 0000000..083ffd7 --- /dev/null +++ b/themes/nostyleplease/layouts/partials/post_list.html @@ -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 }} + +{{ end }} diff --git a/themes/nostyleplease/layouts/posts/baseof.html b/themes/nostyleplease/layouts/posts/baseof.html new file mode 100644 index 0000000..4ad28f1 --- /dev/null +++ b/themes/nostyleplease/layouts/posts/baseof.html @@ -0,0 +1,20 @@ + + + {{- partial "head.html" . -}} + +
+
+ + {{- block "main" . }}{{- end }} + {{ partial "footer.html" }} +
+
+ + diff --git a/themes/nostyleplease/layouts/posts/list.html b/themes/nostyleplease/layouts/posts/list.html new file mode 100644 index 0000000..ab0482b --- /dev/null +++ b/themes/nostyleplease/layouts/posts/list.html @@ -0,0 +1,21 @@ +{{ define "main" }} + +

{{ .Title }}

+ +{{ .Content }} + + +{{ if .Site.Params.theme_config.isListGroupByDate }} + {{ range .Pages.GroupByDate "2006 Year" }} +

{{ .Key }}

+ + {{ end }} +{{ else }} + {{ partial "post_list.html" (dict "context" . "section" .Section)}} +{{ end }} + +{{ end }} diff --git a/themes/nostyleplease/layouts/posts/single.html b/themes/nostyleplease/layouts/posts/single.html new file mode 100644 index 0000000..b3debe2 --- /dev/null +++ b/themes/nostyleplease/layouts/posts/single.html @@ -0,0 +1,14 @@ +{{ define "main" }} + +
+

{{ .Title }}

+ + {{ if .Params.toc }} + + {{ end }} + + {{ .Content }} +
+{{ end }} diff --git a/themes/nostyleplease/layouts/shortcodes/details.html b/themes/nostyleplease/layouts/shortcodes/details.html new file mode 100644 index 0000000..80be121 --- /dev/null +++ b/themes/nostyleplease/layouts/shortcodes/details.html @@ -0,0 +1,6 @@ +
+ + {{ .Get "summary" | default "Details:" }} + + {{ .Inner | markdownify }} +
diff --git a/themes/nostyleplease/layouts/shortcodes/texd.html b/themes/nostyleplease/layouts/shortcodes/texd.html new file mode 100644 index 0000000..dc2eaf9 --- /dev/null +++ b/themes/nostyleplease/layouts/shortcodes/texd.html @@ -0,0 +1,3 @@ + +$${{ .Get 0 }}$$ + diff --git a/themes/nostyleplease/layouts/shortcodes/texi.html b/themes/nostyleplease/layouts/shortcodes/texi.html new file mode 100644 index 0000000..96523d9 --- /dev/null +++ b/themes/nostyleplease/layouts/shortcodes/texi.html @@ -0,0 +1,3 @@ + +\({{ .Get 0 }}\) + diff --git a/themes/nostyleplease/theme.toml b/themes/nostyleplease/theme.toml new file mode 100644 index 0000000..414c849 --- /dev/null +++ b/themes/nostyleplease/theme.toml @@ -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"