aboutsummaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/caddy.nix24
-rw-r--r--www/flake-module.nix46
-rw-r--r--www/framework/default.nix134
-rw-r--r--www/html.nix57
-rw-r--r--www/html/Kalender/Kindertag-in-der-Mehrwertkultur.html (renamed from www/html/Kalender/Kindertag in der Mehrwertkultur.html)0
-rw-r--r--www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_290e08fdf9314385.jpg (renamed from www/html/Kalender/Kindertag in der Mehrwertkultur_html_290e08fdf9314385.jpg)bin33207 -> 33207 bytes
-rw-r--r--www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_7312c2696b940296.png (renamed from www/html/Kalender/Kindertag in der Mehrwertkultur_html_7312c2696b940296.png)bin325031 -> 325031 bytes
-rw-r--r--www/html/img/Stadtteilbeirat-Heimfeld-Oktober-20.pdf (renamed from www/html/img/Stadtteilbeirat Heimfeld Oktober 20.pdf)bin51362 -> 51362 bytes
8 files changed, 248 insertions, 13 deletions
diff --git a/www/caddy.nix b/www/caddy.nix
index 6721316..9a5bd50 100644
--- a/www/caddy.nix
+++ b/www/caddy.nix
@@ -1,16 +1,11 @@
{ self, lib, ... }:
-let
- html =
- with lib.fileset;
- toSource {
- root = ./html;
- fileset = ./html;
- };
-in
{
flake.machines.tharos = {
nixos =
- { lib, ... }:
+ { config, lib, ... }:
+ let
+ website = self.websites.${config.nixpkgs.hostPlatform.system}.${self.domain};
+ in
{
services.caddy.virtualHosts.${self.domain} = {
serverAliases = [ "www.${self.domain}" ];
@@ -18,13 +13,15 @@ in
file_server
root * /var/www/${self.domain}
encode gzip
+
+ ${website.redirects.caddy}
'';
};
systemd.tmpfiles.rules = [
# Verzeichnis für Web-Inhalte sofort anlegen, da der Webserver sonst nicht startet,
# aber nur wenn es noch nicht existiert.
- "C /var/www/${self.domain} - - - - ${html}"
+ "C /var/www/${self.domain} - - - - ${website.result}"
];
};
vm =
@@ -52,10 +49,14 @@ in
pkgs,
lib,
system,
+ config,
self',
...
}:
{
+ # Website aus Quellcode generiert
+ packages.html = self'.websites.${self.domain}.result;
+
# Website-Inhalte auf den Server hochladen
packages.publish = pkgs.writeShellApplication {
name = "publish";
@@ -66,9 +67,6 @@ in
};
# Lokale Vorschau
- packages.html = pkgs.runCommand "source" { } ''
- cp -r ${html} $out
- '';
packages.preview = pkgs.devmode.override {
buildArgs = ''
"$(${lib.getExe pkgs.git} rev-parse --show-toplevel)" -A packages.${system}.html -vv
diff --git a/www/flake-module.nix b/www/flake-module.nix
new file mode 100644
index 0000000..880b395
--- /dev/null
+++ b/www/flake-module.nix
@@ -0,0 +1,46 @@
+{
+ self,
+ config,
+ lib,
+ flake-parts-lib,
+ ...
+}:
+let
+ inherit (lib)
+ filterAttrs
+ mapAttrs
+ mkOption
+ optionalAttrs
+ types
+ ;
+ inherit (flake-parts-lib)
+ mkSubmoduleOptions
+ mkPerSystemOption
+ ;
+in
+{
+ options = {
+ flake = mkSubmoduleOptions {
+ websites = mkOption { };
+ };
+
+ perSystem = mkPerSystemOption (
+ { pkgs, ... }:
+ {
+ _file = ./option.nix;
+ options = {
+ websites = mkOption {
+ type =
+ with types;
+ lazyAttrsOf (submoduleWith {
+ specialArgs = { inherit pkgs; };
+ modules = [ ./framework ];
+ });
+ };
+ };
+ }
+ );
+ };
+
+ config.transposition.websites = { };
+}
diff --git a/www/framework/default.nix b/www/framework/default.nix
new file mode 100644
index 0000000..92e1ed8
--- /dev/null
+++ b/www/framework/default.nix
@@ -0,0 +1,134 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ inherit (lib) mkOption types;
+in
+{
+ imports =
+ with lib.fileset;
+ toList (difference (fileFilter (file: file.hasExt "nix") ./.) ./default.nix);
+
+ options = {
+ types = mkOption {
+ description = "Datentypen für Website-Inhalte";
+ type = with types; lazyAttrsOf deferredModule;
+ default = { };
+ };
+
+ files = mkOption {
+ description = ''
+ Dateien, aus denen die Website besteht, als Abbildung vom Dateipfad zum Inhalt
+ '';
+ type = with types; attrsOf (either path (submodule config.types.file));
+ };
+
+ redirects.raw = mkOption {
+ description = ''
+ Weiterleitungen aller historischen Dateipfade auf Kanonische Pfade
+ '';
+ type = with types; lazyAttrsOf str;
+ readOnly = true;
+ default =
+ with lib;
+ listToAttrs (
+ concatMap (
+ name:
+ if config.files.${name} ? locations then
+ map (loc: {
+ name = "/" + loc;
+ value = "/" + name;
+ }) (tail config.files.${name}.locations)
+ else
+ [ ]
+ ) (attrNames config.files)
+ );
+ };
+
+ redirects.caddy = mkOption {
+ description = ''
+ Weiterleitungen im Caddyfile-Format
+ '';
+ type = types.str;
+ readOnly = true;
+ default =
+ with lib;
+ let
+ lines = mapAttrsToList (name: value: ''redir "${name}" ${value} permanent'') config.redirects.raw;
+ in
+ concatStringsSep "\n" lines;
+ };
+
+ result = mkOption {
+ description = ''
+ Fertige Website als Verzeichnis
+ '';
+ type = types.package;
+ readOnly = true;
+ default =
+ let
+ script = ''
+ mkdir $out
+ ''
+ + lib.concatStringsSep "\n" copy;
+ copy = lib.mapAttrsToList (
+ path: file:
+ let
+ content = if file ? path then file.path else file;
+ in
+ ''
+ mkdir -p $out/$(dirname '${toString path}')
+ ${
+ "" # `--no-preserve-mode` ist erforderlich da Nix store paths read-only sind, und man andernfalls `cp -r` nicht durchführen kann.
+ }cp -r --no-preserve=mode ${content} $out/'${toString path}'
+ ''
+ ) config.files;
+ in
+ pkgs.runCommand "source" { } script;
+ };
+ };
+
+ config.types.document =
+ { lib, ... }:
+ let
+ inherit (lib) mkOption types;
+ in
+ {
+ options = {
+ locations = mkOption {
+ description = ''
+ Frühere Pfade dieses Dokuments
+
+ Einträge sind relative Pfade.
+ Der erste Eintrag ist der kanonische Pfad.
+ Alle anderen Elemente werden für Weiterleitungen zum kanonischen Pfad benutzt.
+ '';
+ type = with types; nonEmptyListOf str;
+ example = [
+ "about/overview"
+ "index"
+ ];
+ };
+ };
+ };
+
+ config.types.file =
+ { lib, ... }:
+ let
+ inherit (lib) mkOption types;
+ in
+ {
+ imports = [ config.types.document ];
+ options = {
+ path = mkOption {
+ type = types.path;
+ description = ''
+ Datei mit manuell gesteuertem Pfad
+ '';
+ };
+ };
+ };
+}
diff --git a/www/html.nix b/www/html.nix
new file mode 100644
index 0000000..6e48e2f
--- /dev/null
+++ b/www/html.nix
@@ -0,0 +1,57 @@
+{ self, ... }:
+{
+ perSystem =
+ { ... }:
+ {
+ websites.${self.domain} =
+ { lib, ... }:
+ let
+ inherit (lib) mkOption types;
+ in
+ {
+ files =
+ let
+ root = ./html;
+ files = lib.fileset.toList root;
+ redirects =
+ with lib;
+ mapAttrsToList
+ (name: value: {
+ name = head value.locations;
+ inherit value;
+ })
+ {
+ kindertag = {
+ path = ./html/Kalender/Kindertag-in-der-Mehrwertkultur.html;
+ locations = [
+ "Kalender/Kindertag-in-der-Mehrwertkultur.html"
+ "Kalender/Kindertag in der Mehrwertkultur.html"
+ ];
+ };
+ kinder-banner = {
+ path = ./html/Kalender/Kindertag-in-der-Mehrwertkultur_html_7312c2696b940296.png;
+ locations = [
+ "Kalender/Kindertag-in-der-Mehrwertkultur_html_7312c2696b940296.png"
+ "Kalender/Kindertag in der Mehrwertkultur_html_7312c2696b940296.png"
+ ];
+ };
+ contraZt-logo = {
+ path = ./html/Kalender/Kindertag-in-der-Mehrwertkultur_html_290e08fdf9314385.jpg;
+ locations = [
+ "Kalender/Kindertag-in-der-Mehrwertkultur_html_290e08fdf9314385.jpg"
+ "Kalender/Kindertag in der Mehrwertkultur_html_290e08fdf9314385.jpg"
+ ];
+ };
+ };
+ in
+ lib.listToAttrs (
+ redirects
+ ++ map (file: {
+ name = lib.path.removePrefix root file;
+ value = file;
+ }) files
+ );
+ };
+
+ };
+}
diff --git a/www/html/Kalender/Kindertag in der Mehrwertkultur.html b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur.html
index 39b693d..39b693d 100644
--- a/www/html/Kalender/Kindertag in der Mehrwertkultur.html
+++ b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur.html
diff --git a/www/html/Kalender/Kindertag in der Mehrwertkultur_html_290e08fdf9314385.jpg b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_290e08fdf9314385.jpg
index aae5162..aae5162 100644
--- a/www/html/Kalender/Kindertag in der Mehrwertkultur_html_290e08fdf9314385.jpg
+++ b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_290e08fdf9314385.jpg
Binary files differ
diff --git a/www/html/Kalender/Kindertag in der Mehrwertkultur_html_7312c2696b940296.png b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_7312c2696b940296.png
index e558cae..e558cae 100644
--- a/www/html/Kalender/Kindertag in der Mehrwertkultur_html_7312c2696b940296.png
+++ b/www/html/Kalender/Kindertag-in-der-Mehrwertkultur_html_7312c2696b940296.png
Binary files differ
diff --git a/www/html/img/Stadtteilbeirat Heimfeld Oktober 20.pdf b/www/html/img/Stadtteilbeirat-Heimfeld-Oktober-20.pdf
index a57f18c..a57f18c 100644
--- a/www/html/img/Stadtteilbeirat Heimfeld Oktober 20.pdf
+++ b/www/html/img/Stadtteilbeirat-Heimfeld-Oktober-20.pdf
Binary files differ