diff --git a/configuration.nix b/configuration.nix
index d4e5d33..be16b80 100644
--- a/configuration.nix
+++ b/configuration.nix
@@ -14,6 +14,7 @@
./variables.nix
./mailserver.nix
./borgbackup.nix
+ ./hopglass-frontend.nix
];
# Configuration options for the mailserver
diff --git a/hopglass-frontend.config.json b/hopglass-frontend.config.json
new file mode 100644
index 0000000..2dcf598
--- /dev/null
+++ b/hopglass-frontend.config.json
@@ -0,0 +1,63 @@
+{
+ "dataPath": "https://hopglass-backend.hamburg.freifunk.net/",
+ "siteName": "Freifunk Hamburg",
+ "mapSigmaScale": 1.1,
+ "showContact": false,
+ "maxAge": 30,
+ "mapLayers": [
+ {
+ "name": "OpenStreetMap",
+ "url": "https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png",
+ "config": {
+ "maxZoom": 18,
+ "attribution": "© OpenStreetMap"
+ }
+ },
+ {
+ "name": "Satellitenbild",
+ "url": "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
+ "config": {
+ "attribution": "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"
+ }
+ },
+ {
+ "name": "Stamen (TonerLite)",
+ "url": "https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png",
+ "config": {
+ "maxZoom": 20,
+ "attribution": "Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap"
+ }
+ }
+ ],
+ "nodeInfos": [
+ {
+ "name": "Clientstatistik",
+ "href": "https://statistik.hamburg.freifunk.net/dashboard/db/freifunk-knoteninfo-knoten-id?var-region=ffhh&var-knoten={NODE_ID}",
+ "thumbnail": "https://statistik.hamburg.freifunk.net/render/dashboard-solo/db/freifunk-knoteninfo-knoten-id?panelId=1&var-region=ffhh&var-knoten={NODE_ID}&theme=light&width=530&height=332&from=now-3d",
+ "caption": "Verbundene Clients in den letzten 3 Tage an Knoten {NODE_ID}"
+ }
+ ],
+ "globalInfos": [
+ {
+ "name": "Clientstatistik (gesamt)",
+ "href": "https://statistik.hamburg.freifunk.net/dashboard/db/freifunk-ubersicht?var-region=ffhh",
+ "thumbnail": "https://statistik.hamburg.freifunk.net/render/dashboard-solo/db/freifunk-ubersicht?panelId=1&var-region=ffhh&theme=light&width=530&height=332&from=now-3d",
+ "caption": "Verbundene Clients in den letzten 3 Tagen"
+ }
+ ],
+ "linkInfos": [],
+ "siteNames": [
+ { "site": "ffhh", "name": "Hamburg" },
+ { "site": "ffhh-nowe", "name": "Hamburg-NordWest" },
+ { "site": "ffhh-ost", "name": "Hamburg-Ost" },
+ { "site": "ffhh-sued", "name": "Hamburg-Sued" },
+ { "site": "ffhh-west", "name": "Hamburg-West" }
+ ],
+ "domainNames": [
+ { "domain": "ffhh_nowe", "name": "Hamburg-NordWest" },
+ { "domain": "ffhh_ost", "name": "Hamburg-Ost" },
+ { "domain": "ffhh_sued", "name": "Hamburg-Sued" },
+ { "domain": "ffhh_west", "name": "Hamburg-West" }
+ ],
+ "hwImg": []
+}
diff --git a/hopglass-frontend.nix b/hopglass-frontend.nix
new file mode 100644
index 0000000..9c5890f
--- /dev/null
+++ b/hopglass-frontend.nix
@@ -0,0 +1,21 @@
+{ config, lib, pkgs, ... }:
+
+let
+ hopglass-fe = (pkgs.callPackage ./pkg-hopglass-fe.nix {
+ conf = ./hopglass-frontend.config.json;
+ } );
+in
+{
+ services.nginx.virtualHosts."map2.hamburg.freifunk.net" = {
+ forceSSL = true;
+ enableACME = true;
+ root = "${hopglass-fe}";
+ locations."/" = {
+ extraConfig = ''
+ index index.html;
+ etag off;
+ add_header etag "\"${builtins.substring 11 32 hopglass-fe}\"";
+ '';
+ };
+ };
+}
diff --git a/pkg-hopglass-fe.nix b/pkg-hopglass-fe.nix
new file mode 100644
index 0000000..8ec270c
--- /dev/null
+++ b/pkg-hopglass-fe.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, pkgs, python, nodejs-11_x, fetchFromGitHub, fetchzip, fetchurl, conf }:
+let
+ nodejs = nodejs-11_x;
+ yarn2nix = import (fetchFromGitHub {
+ rev = "3f2dbb08724bf8841609f932bfe1d61a78277232";
+ owner = "moretea";
+ repo = "yarn2nix";
+ sha256 = "142av7dwviapsnahgj8r6779gs2zr17achzhr8b97s0hsl08dcl2";
+ }) { inherit pkgs nodejs; };
+ origPackage = builtins.fromJSON (builtins.readFile ./package.json);
+ src = fetchFromGitHub {
+ rev = "fc09b591dc2b9dd867559ea008f1177d52a824dd";
+ owner = "hopglass";
+ repo = "hopglass";
+ sha256 = "0s9x466jqn7swbd35kjiaqk2lmcy9fnykhcnb1b10a2l35q655cl";
+ };
+in
+yarn2nix.mkYarnPackage {
+ name = "hopglass-frontend";
+ src = src;
+ installPhase = ''
+ echo ---------------------------------------------------------------------------- installPhase
+ set -x
+ #yarn --offline build
+ ls -l
+ cp -R $src/. .
+ node_modules/.bin/grunt --force
+ mkdir -p $out
+ set +x
+ '';
+ distPhase = ''
+ cp -Rv build/* $out/
+ ln -s "$conf" $out/config.json
+ '';
+ allowedReferences = [ "out" ];
+ yarnPreBuild = ''
+ mkdir -p $HOME/.node-gyp/${nodejs.version}
+ echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion
+ ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version}
+ '';
+ # work around some purity problems in nix
+ #yarnLock = ./yarn.lock;
+ #packageJSON = ./package.json;
+}