Compare commits

..

6 commits

Author SHA1 Message Date
Valentin Gagarin 064dd4041c add back partners 2024-10-11 18:19:08 +02:00
Valentin Gagarin 77cfab10f3 re-add fediversity page 2024-10-11 18:19:08 +02:00
Valentin Gagarin f1635ea265 modularize 2024-10-11 18:19:08 +02:00
Valentin Gagarin 26c6592491 add partners 2024-10-11 13:56:43 +02:00
Valentin Gagarin 9ec7776317 remove processed pages 2024-10-11 13:45:43 +02:00
Valentin Gagarin 207d8c385b remove one layer 2024-10-11 13:45:07 +02:00
39 changed files with 317 additions and 215 deletions

50
content/default.nix Normal file
View file

@ -0,0 +1,50 @@
{ config, ... }:
let
inherit (config) pages;
in
{
imports = [
./grants.nix
./fediversity.nix
./nlnet.nix
./nordunet.nix
./tweag.nix
./oid.nix
];
pages.index = {
title = "Fediversity";
locations = [
"index.html"
];
description = "Fediversity web site";
summary = ''
This web site hosts up-to-date information about the the NGI Zero Fediversity project.
'';
body = ''
# Welcome to the Fediversity project
${pages.fediversity.summary}
[Learn more about Fediversity](${pages.fediversity})
# Fediversity grants
${pages.grants.summary}
[Learn more about our grants](${pages.grants})
# Consortium
The Consortium behind the Fediversity project is a cooperation between NLnet, Open Internet Discourse Foundation, NORDUnet and Tweag.
${toString (map (partner: ''
## ${partner.title}
${partner.description}
[Read more about ${partner.title}](./${partner})
'') (with pages; [ nlnet oid tweag nordunet ]))}
'';
};
}

View file

@ -1,13 +1,15 @@
rec {
{ ... }:
{
pages.fediversity = {
title = "Fediversity";
description = "More information about the Fediversity project";
summary = ''
The Fediversity Project is a comprehensive effort to bring easy-to-use, hosted cloud services that have service portability and personal freedom at their core to everyone.
'';
outPath = "fediversity.html";
locations = [
"fediversity.html"
];
body = ''
# ${title}
Fediversity is a comprehensive effort to bring easy-to-use, hosted cloud services with service portability and personal freedom at their core to everyone. It wants to provide everyone with high-quality, secure IT systems for everyday use. Without tracking, without exploitation, in a way that runs everywhere and scales effortlessly. Fediversity is based on NixOS, a disruptive Linux distribution with a unique approach to package and configuration management. Built on top of the Nix package manager, NixOS is completely declarative, makes upgrading systems reliable, and has many other advantages. Because it is reproducible, it is ideally suited for complex deployment scenarios where consistent behaviour, stability and configurability matter.
One such complex deployment scenario is running state-of-the-art services for the Fediverse, like PeerTube, Mastodon, Owncast or Lemmy especially if you want to for instance add services like live chat or transcoding. But even running more traditional services like modern e-mail servers with possible whistles and bells can be daunting. The same holds for deploying a VPN, private cloud storage, wiki, etc. Fediversity will enable all of these use cases, and more finally bringing these to the market in a way that is as conveient as using a hosted service.
@ -16,4 +18,5 @@ rec {
Fediversity will deliver an ambitious development effort, but this is a vast domain with many more challenges than what any preconceived effort could tackle by itself. This is why we invite your contribution to help us reshape the state of play, and together create an open, trustworthy and reliable internet for all.
'';
};
}

View file

@ -1,10 +1,14 @@
{ ... }:
{
pages.grants = {
title = "Grants";
locations = [
"grants.html"
];
description = "How to apply for grants as part of the Fediversity Project";
summary = ''
Fediversity will award 450 000 euro in small to medium-size R&D grants towards solutions that bring the next generation of social networks closer. We are seeking project proposals between 5.000 and 50.000 euros which should get you on your way.
'';
outPath = "grants.html";
body = ''
Fediversity invites other people to join this ambitious development effort. It is a vast domain with many more challenges than what any preconceived effort could tackle by itself. This is why we invite your contribution to help us reshape the state of play, and together create an open, trustworthy and reliable internet for all.
@ -14,4 +18,5 @@
For more information on how to apply, check the NLnet website.
'';
};
}

View file

@ -1,22 +0,0 @@
let
grants = import ./grants.nix;
fediversity = import ./fediversity.nix;
in
{
title = "Fediversity";
description = "NGI Zero Fediversity";
outPath = "index.html";
body = ''
# Welcome to the Fediversity project
${fediversity.summary}
[Learn more about Fediversity](./${fediversity})
# Fediversity grants
${grants.summary}
[Learn more about our grants](./${grants})
'';
}

19
content/nlnet.nix Normal file
View file

@ -0,0 +1,19 @@
{ ... }:
{
pages.nlnet = {
title = "NLnet";
description = "Details about the NLnet Foundation";
summary = ''
NLnet supports organisations and people who contribute to an open internet for all. They fund projects that help fix the internet through open hardware, open software, open standards, open science and open data.
'';
locations = [
"nlnet.html"
];
body = ''
The NLnet Foundation supports organisations and people who contribute to an open internet for all. NLnet funds projects that help fix the internet through open hardware, open software, open standards, open science and open data. After its historical contribution to the early internet in Europe in the 1980s, NLnet has been financially supporting the open internet since 1997.
NLnet provides grants to free and open source projects between 5.000 and 50.000 euro with the possibility to scale up. Funding is open to anyone: organisations of any type and individuals. Within NGI Fediversity, NLnet facilitates the open calls for third-party funding and contributes to outreach and dissemination.
'';
};
}

18
content/nordunet.nix Normal file
View file

@ -0,0 +1,18 @@
{ ... }:
{
pages.nordunet = {
title = "NORDUnet";
summary = "Details about NORDUnet";
description = ''
NORDUnet is a collaboration of the National Research and Education Networks (NREN) of the Nordic countries.
'';
locations = [
"nordunet.html"
];
body = ''
NORDUnet connects universities and research institutions across Denmark, Finland, Iceland, Norway, and Sweden. It enables collaboration, data sharing, and access to online resources for academic and research purposes.
Fun fact: the website of NORDUnet, nordu.net is the oldest still active domain on the internet.
'';
};
}

24
content/oid.nix Normal file
View file

@ -0,0 +1,24 @@
{ ... }:
{
pages.oid = {
title = "Open Internet Discourse Foundation";
summary = "Details about the Open Internet Discourse Foundation";
description = ''
The Open Internet Discourse Foundation (OID) is founded on the belief that everyone deserves the freedom to express themselves and use the internet without constraints, and is committed to help build a better internet where individuals can truly be who they are.
'';
locations = [
"oid.html"
];
body = ''
The three pillars that are at the core of the OID Foundation:
OID believes in the fundamental right of individuals to privacy, self-determination, and freedom of expression.
Building sustainably. The OID Foundation believes that the internet is crucial infrastructure for society, and as such, should be build from the perspective that software projects can exist and be maintained for a long time; decades, not years.
Transparancy. The OID Foundation takes the commitment to openness seriously, and strives to use open software in all aspects.
In order to realise our vision, we need a healthy, functional and open internet. This is where OID comes in, working on the infrastructure that powers the internet in a way that promotes its values.
OID Foundation is rooted in constructive optimism, believing in tackling challenges head-on with a positive outlook, viewing each obstacle as an opportunity for improvement. As a practical example of the long-term vision is the work on NixOS that the OID is doing, where the reproducibility and long-term maintainability of NixOSs package management help with an open and sustainable internet.
'';
};
}

16
content/tweag.nix Normal file
View file

@ -0,0 +1,16 @@
{ ... }:
{
pages.tweag = {
title = "Tweag";
summary = "Details about Tweag";
description = ''
Tweag is the open source program office (OSPO) of Modus Create, and has extensive experience working with Nix, and many people at the forefront of the Nix community are Tweagers
'';
locations = [
"tweag.html"
];
body = ''
Tweag is the open source program office (OSPO) of Modus Create, a global digital consulting firm that helps enterprises build competitive advantage through digital innovation. Tweagers are leading contributors to several open source projects from functional programming languages to cross-platform frameworks. Tweag has extensive experience working with Nix, and many people at the forefront of the Nix community are Tweagers.
'';
};
}

View file

@ -1,17 +0,0 @@
---
title: "Fediversity"
# meta title
meta_title: "Fediversity"
# meta description
description: "More information about the Fediversity Project"
# save as draft
draft: false
---
Fediversity is a comprehensive effort to bring easy-to-use, hosted cloud services with service portability and personal freedom at their core to everyone. It wants to provide everyone with high-quality, secure IT systems for everyday use. Without tracking, without exploitation, in a way that runs everywhere and scales effortlessly. Fediversity is based on NixOS, a disruptive Linux distribution with a unique approach to package and configuration management. Built on top of the Nix package manager, NixOS is completely declarative, makes upgrading systems reliable, and has many other advantages. Because it is reproducible, it is ideally suited for complex deployment scenarios where consistent behaviour, stability and configurability matter.
One such “complex” deployment scenario is running state-of-the-art services for the Fediverse, like PeerTube, Mastodon, Owncast or Lemmy — especially if you want to for instance add services like live chat or transcoding. But even running more traditional services like modern e-mail servers with possible whistles and bells can be daunting. The same holds for deploying a VPN, private cloud storage, wiki, etc. Fediversity will enable all of these use cases, and more — finally bringing these to the market in a way that is as conveient as using a hosted service.
Fediversity is a pilot funded by the European Commission, building on many projects funding through the Next Generation Internet initiative. The results of the project should greatly simplify the creation and delivery of robust and secure services, on the web and beyond.
Fediversity will deliver an ambitious development effort, but this is a vast domain with many more challenges than what any preconceived effort could tackle by itself. This is why we invite your contribution to help us reshape the state of play, and together create an open, trustworthy and reliable internet for all.

View file

@ -1,17 +0,0 @@
{
meta = {
title = "Grants";
description = "How to apply for grants as part of the Fediversity Project";
};
body = ''
Fediversity invites other people to join this ambitious development effort. It is a vast domain with many more challenges than what any preconceived effort could tackle by itself. This is why we invite your contribution to help us reshape the state of play, and together create an open, trustworthy and reliable internet for all.
This is your opportunity to make a real difference. You tell us how your project can help Fediversity go harder, better, faster, stronger. In order to enable you to make such contributions, NLnet will award 450 000 euro in small to medium-size R&D grants towards solutions that bring the next generation of social networks closer. NLnet is seeking project proposals between 5.000 and 50.000 euros — which should get you on your way.
Noteworthy fact: many projects which are to be deployed inside Fediversity were themselves bootstrapped on precisely such a grant from NGI, and now it is your turn.
For more information on how to apply, check the NLnet website.
'';
}
---

View file

@ -1,13 +0,0 @@
---
title: "NLnet"
# meta title
meta_title: "NLnet"
# meta description
description: "The NLnet organisation"
# save as draft
draft: false
---
The NLnet Foundation supports organisations and people who contribute to an open internet for all. NLnet funds projects that help fix the internet through open hardware, open software, open standards, open science and open data. After its historical contribution to the early internet in Europe in the 1980s, NLnet has been financially supporting the open internet since 1997.
NLnet provides grants to free and open source projects between 5.000 and 50.000 euro with the possibility to scale up. Funding is open to anyone: organisations of any type and individuals. Within NGI Fediversity, NLnet facilitates the open calls for third-party funding and contributes to outreach and dissemination.

View file

@ -1,13 +0,0 @@
---
title: "NORDUnet"
# meta title
meta_title: "NORDUnet"
# meta description
description: "The NORDUnet organisation."
# save as draft
draft: false
---
NORDUnet is a collaboration of the National Research and Education Networks of the Nordic countries connecting universities and research institutions across Denmark, Finland, Iceland, Norway, and Sweden. It enables collaboration, data sharing, and access to online resources for academic and research purposes.
Fun fact: the website of NORDUnet, nordu.net is the oldest still active domain on the internet.

View file

@ -1,20 +0,0 @@
---
title: "Open Internet Discourse Foundation"
# meta title
meta_title: "Open Internet Discourse Foundation"
# meta description
description: "The Open Internet Discourse Foundation"
# save as draft
draft: false
---
The Open Internet Discourse Foundation (OID) is founded on the belief that everyone deserves the freedom to express themselves and use the internet without constraints, and is committed to help build a better internet where individuals can truly be who they are.
The three pillars that are at the core of the OID Foundation:
OID believes in the fundamental right of individuals to privacy, self-determination, and freedom of expression.
Building sustainably. The OID Foundation believes that the internet is crucial infrastructure for society, and as such, should be build from the perspective that software projects can exist and be maintained for a long time; decades, not years.
Transparancy. The OID Foundation takes the commitment to openness seriously, and strives to use open software in all aspects.
In order to realise our vision, we need a healthy, functional and open internet. This is where OID comes in, working on the infrastructure that powers the internet in a way that promotes its values.
OID Foundation is rooted in constructive optimism, believing in tackling challenges head-on with a positive outlook, viewing each obstacle as an opportunity for improvement. As a practical example of the long-term vision is the work on NixOS that the OID is doing, where the reproducibility and long-term maintainability of NixOSs package management help with an open and sustainable internet.

View file

@ -1,11 +0,0 @@
---
title: "Tweag"
# meta title
meta_title: "Tweag"
# meta description
description: "The Tweag organisation."
# save as draft
draft: false
---
Tweag is the open source program office (OSPO) of Modus Create, a global digital consulting firm that helps enterprises build competitive advantage through digital innovation. Tweagers are leading contributors to several open source projects — from functional programming languages to cross-platform frameworks. Tweag has extensive experience working with Nix, and many people at the forefront of the Nix community are Tweagers.

8
content_/pages/OID.md Normal file
View file

@ -0,0 +1,8 @@
---
# meta title
meta_title: "Open Internet Discourse Foundation"
# meta description
# save as draft
draft: false
---

View file

@ -8,11 +8,18 @@
, lib ? import "${sources.nixpkgs}/lib"
,
}:
let
site = pkgs.callPackage ./site.nix { };
in
{
build = site.build "fediversity.eu" ./content;
build =
let
result = pkgs.lib.evalModules {
modules = [
./structure
./content
{ _module.args = { inherit pkgs; }; }
];
};
in
result.config.build;
shell = pkgs.mkShellNoCC {
packages = with pkgs; [

View file

@ -1,71 +0,0 @@
{ pkgs, lib, ... }:
let
join = lib.concatStringsSep;
in
rec {
/**
Build the web site
*/
build = name: dir:
let
script = ''
mkdir $out
'' + join "\n" copy;
copy = lib.mapAttrsToList
(
path: document: ''
mkdir -p $out/$(dirname ${path})
cp ${document} $out/${path}
''
)
(files (sources dir));
in
pkgs.runCommand name { } script;
/**
Get source files from a flat directory
*/
sources = dir: lib.mapAttrs'
(
attrname: value: {
name = lib.removeSuffix ".nix" attrname;
value = import (dir + "/${attrname}");
}
)
(builtins.readDir dir);
/**
Create a mapping from output file path to document contents
*/
files = documents: lib.mapAttrs'
(
name: document: {
name = document.outPath;
value = html document "${name}.html";
}
)
documents;
/**
Convert a Nix document to HTML
*/
html = document: name:
builtins.toFile "${name}.html" ''
<html>
<head>
<title>${document.title}</title>
</head>
<body>
${builtins.readFile (commonmark document.body name)}
<body>
</html>
'';
/**
Convert a commonmark string to HTML
*/
commonmark = markdown: name:
pkgs.runCommand "${name}.html" { buildInputs = [ pkgs.cmark ]; } ''
cmark ${builtins.toFile "${name}.md" markdown} > $out
'';
}

136
structure/default.nix Normal file
View file

@ -0,0 +1,136 @@
{ config, options, lib, pkgs, ... }:
let
inherit (lib)
mkOption
types
;
cfg = config;
in
{
options.pages = mkOption {
description = ''
Collection of pages on the site
'';
type = with types; attrsOf (submodule ({ name, config, ... }:
{
options = {
title = mkOption {
type = types.str;
};
locations = mkOption {
description = ''
List of historic output locations for the resulting file
The first element is the canonical location.
All other elements are used to create redirects to the canonical location.
'';
type = with types; nonEmptyListOf str;
};
outPath = mkOption {
description = ''
Canonical location of the page
'';
type = types.str;
default = lib.head config.locations;
};
description = mkOption {
description = ''
One-sentence description of page contents
'';
type = types.str;
};
summary = mkOption {
description = ''
One-paragraph summary of page contents
'';
type = types.str;
};
body = mkOption {
description = ''
Page contents in CommonMark
'';
type = types.str;
};
template = mkOption
{
description = ''
Function that converts the page contents to files
'';
type = with types; functionTo (functionTo (functionTo options.files.type));
default = cfg.templates.default;
};
};
}));
};
options.templates = mkOption {
description = ''
Collection of named functions to convert page contents to files
'';
type = with types; attrsOf (functionTo (functionTo (functionTo options.files.type)));
};
config.templates.default =
let
commonmark = name: markdown: pkgs.runCommand "${name}.html"
{
buildInputs = [ pkgs.cmark ];
} ''
cmark ${builtins.toFile "${name}.md" markdown} > $out
'';
in
lib.mkDefault
(config: name: page: {
# TODO: create static redirects from the tail
${lib.head page.locations} = builtins.toFile "${name}.html" ''
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>${page.title}</title>
<meta name="description" content="${page.description}" />
<link rel="canonical" href="${lib.head page.locations}" />
</head>
<body>
${builtins.readFile (commonmark name page.body)}
<body>
</html>
'';
});
options.files = mkOption {
description = ''
Files that make up the site, mapping from output path to contents
By default, all elements in `option`{pages} are converted to files using their template or the default template.
Add more files to the output by assigning to this attribute set.
'';
type = with types; attrsOf path;
};
config.files = lib.concatMapAttrs
(name: page: page.template config name page)
config.pages;
options.build = mkOption {
description = ''
The final output of the web site
'';
type = types.package;
default =
let
script = ''
mkdir $out
'' + lib.concatStringsSep "\n" copy;
copy = lib.mapAttrsToList
(
path: file: ''
mkdir -p $out/$(dirname ${path})
cp -r ${file} $out/${path}
''
)
config.files;
in
pkgs.runCommand "source" { } script;
};
}