Basic lume setup

pull/3/head
Benjamin Bädorf 2022-10-02 20:46:42 +02:00
parent bc02c210de
commit 42383743a9
No known key found for this signature in database
GPG Key ID: 4406E80E13CD656C
26 changed files with 493 additions and 7 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
tags
.direnv
_site

29
_config.ts Normal file
View File

@ -0,0 +1,29 @@
import lume from "https:/deno.land/x/lume/mod.ts";
import sass from "https:/deno.land/x/lume/plugins/sass.ts";
import date from "https:/deno.land/x/lume/plugins/date.ts";
import jsx from "https:/deno.land/x/lume/plugins/jsx.ts";
import terser from "https:/deno.land/x/lume/plugins/terser.ts";
import postcss from "https:/deno.land/x/lume/plugins/postcss.ts";
const site = lume();
site.use(sass());
site.use(date());
site.use(jsx());
site.use(terser());
site.use(postcss());
site.loadAssets([
".png",
".jpg",
".svg",
".pdf",
".woff2",
".woff",
".ttf",
".otf",
".js",
".txt",
]);
export default site;

1
_data/cssCacheBust.yml Normal file
View File

@ -0,0 +1 @@
'?v=1'

13
_data/people/avd.yml Normal file
View File

@ -0,0 +1,13 @@
name: Alexander von Dombois
pronouns: he/him
role: Product Design
contactOptions:
- name: mail
value: avd@miom.space
link: 'mailto:avd@miom.space'
- name: insta
value: '@alexandervondombois'
- name: web
value: alexandervondombois.de
link: 'https://alexandervondombois.de'

17
_data/people/byb.yml Normal file
View File

@ -0,0 +1,17 @@
name: Benjamin Bädorf
pronouns: he/him
role: Software Engineer
contactOptions:
- name: mail
value: byb@miom.space
link: 'mailto:byb@miom.space'
- name: git
value: '@b12f'
link: 'git.b12f.io/b12f'
- name: gpg
value: 4332 E0D0 2B21 4D31 376C 366E 4406 E80E 13CD 656C
- name: matrix
value: '@b12f:pub.solar'
- name: web
value: benjaminbaedorf.eu
link: 'https://benjaminbaedorf.eu'

7
_data/people/cmp.yml Normal file
View File

@ -0,0 +1,7 @@
name: Constantin Pannwitz
pronouns: he/him
role: Product Designer
contactOptions:
- name: mail
value: cmp@miom.space
link: 'mailto:cmp@miom.space'

7
_data/people/hmd.yml Normal file
View File

@ -0,0 +1,7 @@
name: Hanna Deuss
pronouns: she/her
role: Visual Artist
contactOptions:
- name: mail
value: hmd@miom.space
link: 'mailto:hmd@miom.space'

7
_data/people/hsg.yml Normal file
View File

@ -0,0 +1,7 @@
name: Helena Geisler
pronouns: she/her
role: Artist, Writer, Scientist
contactOptions:
- name: mail
value: hsg@miom.space
link: 'mailto:hsg@miom.space'

12
_data/people/jfw.yml Normal file
View File

@ -0,0 +1,12 @@
name: Jhonas Wernery
pronouns: he/him
role: System Engineer
contactOptions:
- name: mail
value: jfw@miom.space
link: 'mailto:jfw@miom.space'
- name: git
value: '@teutat3s'
link: 'https://git.b12f.io/teutat3s'
- name: matrix
value: '@teutat3s:pub.solar'

7
_data/people/jjg.yml Normal file
View File

@ -0,0 +1,7 @@
name: Julian Gerullis
pronouns: he/him
role: Product Designer
contactOptions:
- name: mail
value: jjg@miom.space
link: 'mailto:jjg@miom.space'

5
_data/thingsWeAre.yml Normal file
View File

@ -0,0 +1,5 @@
- 'an off'
- 'a studio'
- 'an art'
- 'a tech'
- 'a people'

17
_includes/Background.tsx Normal file
View File

@ -0,0 +1,17 @@
import Logo from './Logo.tsx';
const x1312 = (new Array(400)).fill("0x1312").join(" ");
export default () => <div
id="background"
className="ps-background ps-main--background"
>
<Logo className="ps-background--logo" />
<div
id="x1312"
className="ps-background--1312"
>{x1312}</div>
<script
src="./scripts/background.js"
async
></script>
</div>;

View File

@ -0,0 +1,66 @@
import {
title as titleFilter,
en,
de,
md,
} from '../../filters.ts';
import Background from '../../components/Background.tsx';
export default ({ title, theme, extraStylesheets, content, cssCacheBust }) => <>
<html>
<head>
<meta charset="utf-8" />
<title>{ titleFilter(title) }</title>
<link rel="shortcut icon" href="/assets/pubsolar.svg" />
<meta name="theme-color" content="{{ theme.color }}" id="theme-color" />
<meta name="description" content="pub.solar wants you to have control of your data and privacy. We host Matrix, Nextcloud, and Mastodon for you to use." />
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="/style.css?1" media="all" />
<>
{(extraStylesheets || [])
.map(extraStylesheet => <link rel="stylesheet" type="text/css" href="{{ extraStylesheet }}{{ cssCacheBust }}" media="all" />)}
</>
</head>
<body className="ps-main">
<Background />
<main className="ps-main--page ps-page">
<section
lang="en"
id="en"
className="ps-page--section"
>
<a
className="ps-page--section-link"
href="#de"
>Deutsche übersetzung unten</a>
<div
dangerouslySetInnerHTML={{ __html: md(content.en) }}
className="ps-page--section-contents"
></div>
</section>
<section
lang="de"
id="de"
className="ps-page--section"
>
<a
className="ps-page--section-link"
href="#en"
>English translation above</a>
<div
dangerouslySetInnerHTML={{ __html: md(content.de) }}
className="ps-page--section-contents"
></div>
</section>
</main>
</body>
</html>
</>;

20
_includes/Head.tsx Normal file
View File

@ -0,0 +1,20 @@
import { title as titleFilter } from '../filters.ts';
export default ({ title, theme, extraStylesheets }) => <head>
<meta charset="utf-8" />
<title>{ titleFilter(title) }</title>
<link rel="shortcut icon" href="/assets/pubsolar.svg" />
<meta name="theme-color" content="{{ theme.color }}" id="theme-color" />
<meta name="description" content="pub.solar wants you to have control of your data and privacy. We host Matrix, Nextcloud, and Mastodon for you to use." />
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="/style.css?1" media="all" />
<>
{(extraStylesheets || [])
.map(extraStylesheet => <link rel="stylesheet" type="text/css" href="{{ extraStylesheet }}{{ cssCacheBust }}" media="all" />)}
</>
</head>;

11
_includes/Logo.tsx Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,61 @@
import {
title as titleFilter,
en,
de,
md,
} from '../../filters.ts';
import Head from '../Head.tsx';
import Background from '../Background.tsx';
export default ({
title,
theme,
extraStylesheets,
content,
cssCacheBust,
}) => <>
<html>
<Head
title={title}
theme={theme}
extraStylesheets={extraStylesheets}
cssCacheBust={cssCacheBust}
/>
<body className="ps-main">
<Background />
<main className="ps-main--page ps-page">
<section
lang="en"
id="en"
className="ps-page--section"
>
<a
className="ps-page--section-link"
href="#de"
>Deutsche übersetzung unten</a>
<div
dangerouslySetInnerHTML={{ __html: md(content.en) }}
className="ps-page--section-contents"
></div>
</section>
<section
lang="de"
id="de"
className="ps-page--section"
>
<a
className="ps-page--section-link"
href="#en"
>English translation above</a>
<div
dangerouslySetInnerHTML={{ __html: md(content.de) }}
className="ps-page--section-contents"
></div>
</section>
</main>
</body>
</html>
</>;

View File

@ -0,0 +1,39 @@
import {
title as titleFilter,
en,
de,
md,
} from '../../filters.ts';
import Head from '../Head.tsx';
import Background from '../Background.tsx';
export default ({
title,
theme,
extraStylesheets,
links,
cssCacheBust,
}) => <>
<html>
<Head
title={title}
theme={theme}
extraStylesheets={extraStylesheets}
cssCacheBust={cssCacheBust}
/>
<body className="ps-main">
<Background />
<main className="ps-main--page ps-page ps-page_home">
{links.map(({ href, title }) =>
<a href={href} target="_blank" className="ps-page--link">{title}</a>
)}
<footer className="ps-footer">
<a
href="https://www.thegreenwebfoundation.org/green-web-check/?url=https%3A%2F%2Fpub.solar"
className="ps-footer--link"
>climate-neutral hosting by Greenbaum Cloud</a>
</footer>
</main>
</body>
</html>
</>;

79
about.yml Normal file
View File

@ -0,0 +1,79 @@
layout: layouts/default.tsx
content:
en: |
# Hi! We're pub.solar
We are a non-registered association seated in Cologne, Germany. Our goal is to enable more people to use free software, have secure digital communications, and to take control over their private data. We offer free software for you and all the people you love. We do this transparently and democratically.
We currently have four larger projects:
* [Matrix](https://chat.pub.solar): a decentralized, end-to-end encrypted chat, similar to Slack or Discord.
* [Mastodon](https://mastodon.pub.solar): a decentralized microblogging platform, similar to Twitter.
* [Nextcloud](https://cloud.pub.solar): a cloud with office capabilities, similar to the Google Suite and Microsoft Office 365.
* [PubSolarOS](https://get.pub.solar): a GNU+Linux Distribution that is based on NixOS.
Our Mastodon and Matrix instances are publicly open for registration. If you (or your non profit, or your family) would like to use our Nextcloud, send us a message.
You can reach us via [#General in Matrix](https://matrix.to/#/#general:pub.solar?via=chat.pub.solar) and [@crew on Mastodon](https://mastodon.pub.solar/@crew), or send a mail to [crew@pub.solar](mailto:crew@pub.solar).
## Imprint
pub.solar n.e.V.
Benjamin Bädorf, Jhonas Wernery, Hendrik Sokolowki
c/o MiOM 202,
Wilhelm-Mauser-Straße 47 Halle 5,
D-50827 Köln,
[crew@pub.solar](mailto:crew@pub.solar)
## Our Statutes
Are over [here](https://cloud.pub.solar/s/2KErtaYeLn5d6MZ).
## Our Privacy Policy
Is over [here](https://pub.solar/privacy).
## Our hosting
Our friends at Greenbaum Cloud (Jhonas works there) are kindly providing us their infrastructure for hosting without charging us. Give them a visit.
[]
<a href=\"https://greenbaum.cloud\"><img src=\"/assets/greenbaum-cloud-logo.svg\" width=\"230\" height=\"auto\"></a>
de: |
# Hi! Wir sind pub.solar
Wir sind ein nicht eingetragener Verein mit Sitz in Köln. Unser Ziel ist es mehr Menschen zu ermöglichen, Freie Software zu benutzen, sicher digital zu kommunizieren, und datensparsamer zu leben. Wir stellen für Dich und alle Menschen die Du lieb hast auf transparente und demokratische Weise Freie Software zur Verfügung.
Momentan haben wir vier größere Projekte:
* [Matrix](https://chat.pub.solar): dezentraler, Ende-zu-Ende verschlüsselter Chat, ähnlich wie Slack oder Discord
* [Mastodon](https://mastodon.pub.solar): dezentrale Mikrobloggingplattform, ähnlich wie Twitter
* [Nextcloud](https://cloud.pub.solar): Cloud mit Office Möglichkeiten, ähnlich wie Teile der Google Suite und Microsoft Office 365
* [PubSolarOS](https://get.pub.solar), eine Linux Distribution die auf NixOS basiert
Auf unseren Mastodon und Matrix Instanzen ist die Registrierung für alle offen. Wenn Du (oder dein Verein, oder deine Familie) gerne unsere Nextcloud benutzen möchten, schreib uns gerne an.
Du kannst uns via [#General in Matrix](https://matrix.to/#/#general:pub.solar?via=chat.pub.solar) und [@crew auf Mastodon](https://mastodon.pub.solar/@crew) erreichen, oder eine Mail an [crew@pub.solar](mailto:crew@pub.solar) schicken.
## Impressum
pub.solar n.e.V.
Benjamin Bädorf, Jhonas Wernery, Hendrik Sokolowki
c/o MiOM 202,
Wilhelm-Mauser-Straße 47 Halle 5,
D-50827 Köln,
[crew@pub.solar](mailto:crew@pub.solar)
### Unsere Satzung
Findest Du [hier](https://cloud.pub.solar/s/2KErtaYeLn5d6MZ).
## Unsere Datenschutzerklärung
Findest Du [hier](https://pub.solar/privacy).
## Unser Hosting
Unsere Freunde bei der Firma Greenbaum Cloud (Jhonas arbeitet dort auch) sind so cool uns ihre Infrastruktur momentan gratis zur Verfügung zu stellen. Klickt gerne mal rein.
<a href=\"https://greenbaum.cloud\"><img src=\"/assets/greenbaum-cloud-logo.svg\" width=\"230\" height=\"auto\"></a>

5
build.sh Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
lume
cp -r ./fonts ./_site/
rm -rf ./_site/README

12
deno.json Normal file
View File

@ -0,0 +1,12 @@
{
"importMap": "import_map.json",
"tasks": {
"lume": "deno eval \"import 'lume/task.ts'\" --",
"build": "deno task lume",
"serve": "deno task lume -s"
},
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "react"
}
}

40
filters.ts Normal file
View File

@ -0,0 +1,40 @@
import MarkdownIt from "https://jspm.dev/markdown-it";
const mdIt = new MarkdownIt({
html: false, // Enable HTML tags in source
xhtmlOut: false, // Use '/' to close single tags (<br />).
// This is only for full CommonMark compatibility.
breaks: true, // Convert '\n' in paragraphs into <br>
langPrefix: 'language-', // CSS language prefix for fenced blocks. Can be
// useful for external highlighters.
linkify: true, // Autoconvert URL-like text to links
// Enable some language-neutral replacement + quotes beautification
// For the full list of replacements, see https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js
typographer: false,
// Double + single quotes replacement pairs, when typographer enabled,
// and smartquotes on. Could be either a String or an Array.
//
// For example, you can use '«»„“' for Russian, '„“‚‘' for German,
// and ['«\xA0', '\xA0»', '\xA0', '\xA0'] for French (including nbsp).
quotes: '“”‘’',
// Highlighter function. Should return escaped HTML,
// or '' if the source string is not changed and should be escaped externally.
// If result starts with <pre... internal wrapper is skipped.
highlight: function (/*str, lang*/) { return ''; }
});
export const md = (string) => mdIt.render(string);
export const title = (value = '') => value + (value ? " | " : "") + "pub.solar";
export const i18n = (value) => value.en;
export const de = (value) => value.de;
export const objectToArray = (value = {}) => Object.keys(value)
.sort()
.map(key => value[key])
.filter(val => !!val);

7
import_map.json Normal file
View File

@ -0,0 +1,7 @@
{
"imports": {
"lume/": "https://deno.land/x/lume@v1.11.4/",
"react/jsx-runtime": "https://deno.land/x/lume@v1.11.4/deps/react_runtime.ts",
"react": "https://deno.land/x/lume@v1.11.4/deps/react.ts"
}
}

19
index.yml Normal file
View File

@ -0,0 +1,19 @@
layout: layouts/homepage.tsx
links:
- href: https://en.wikipedia.org/wiki/Free_software
title: Fucking Free
- href: https://pub.solar/os/
title: PubSolarOS
- href: https://chat.pub.solar/
title: Matrix
- href: https://mastodon.pub.solar/
title: Mastodon
- href: https://cloud.pub.solar/
title: Nextcloud
- href: ./hakken
title: hakken.irl
- href: ./about
title: About & Imprint
- href: ./privacy
title: Privacy policy

View File

@ -1,4 +1,3 @@
document.getElementById('x1312').innerHTML = (new Array(400)).fill("0x1312").join(" ");
const background = document.getElementById("background");
const logo = document.getElementById("logo").cloneNode(true);
logo.id = "";

View File

@ -1,8 +1,13 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
with (import (fetchTarball https://github.com/nixos/nixpkgs/archive/nixpkgs-unstable.tar.gz) {});
mkShell {
buildInputs = [
pkgs.nodejs
pkgs.nodePackages.serve
nodejs
deno
nodePackages.json
nodePackages.triton
];
shellHook = ''
eval "$(triton env --triton)"
'';
}

View File

@ -219,7 +219,7 @@ html {
.ps-background--logo {
width: calc(100vw / 9);
// height: 4rem;
height: 4rem;
margin: 0.1rem;
}