From f124e3373b56297cb7f469d59f8ab3193a80990f Mon Sep 17 00:00:00 2001
From: stuebinm <stuebinm@disroot.org>
Date: Tue, 11 Oct 2022 11:46:38 +0200
Subject: [PATCH] new nix build things

---
 Readme.md   |  7 ++---
 config.toml | 16 +++++-----
 default.nix | 89 +++++++++++++++++++++++++++++------------------------
 flake.lock  | 27 ++++++++++++++++
 flake.nix   | 12 ++++++++
 5 files changed, 98 insertions(+), 53 deletions(-)
 create mode 100644 flake.lock
 create mode 100644 flake.nix

diff --git a/Readme.md b/Readme.md
index 138c2f3..e7295c5 100644
--- a/Readme.md
+++ b/Readme.md
@@ -13,11 +13,10 @@ special inter-assembly `world://` links).
 `walint-mapserver` is a minimal implementation of a server that periodically
 fetches, lints, and adjusts maps from a set of git repositories, writing them
 to a path that can then be served by a webserver. It can be used as a (very
-simple) replacement for rc3's hub and mapservice at smaller events.
+simple) replacement for rc3's hub and mapservice at smaller events — to get
+started, manually list all map repositories in `config.toml`, then visit 
+`localhost:8080/admin/overview`.
 
-`cwality-maps` is a small server for type-safe map templating, to be used if
-maps need to be generated on-the-fly — for example, to provide custom intermediate
-maps displaying CWs before another map can be reached.
 
 ## Installing
 
diff --git a/config.toml b/config.toml
index 2e1c224..a399acb 100644
--- a/config.toml
+++ b/config.toml
@@ -17,9 +17,9 @@ token = "hello, world!"
 slug = "divoc"
 
 # baseurl of maps as seen by the frontend
-url = "https://world.di.c3voc.de/maps/"
+url = "https://example.org/maps/"
 # webdir into which maps should be written
-webdir = "/tmp/var/www/divoc"
+webdir = "/tmp/var/www/example"
 
 webdir_human = "/tmp/var/www-human/divoc"
 
@@ -28,20 +28,18 @@ webdir_human = "/tmp/var/www-human/divoc"
 generation = 1
 
 backlink_prefix = "world://lobby#start_"
-contact_mail = "world@muc.hacc.space"
-howto_link = "https://di.c3voc.de/howto:world"
+contact_mail = "world@example.org"
+howto_link = "https://example.org"
 
 # linter's config for this org
 lintconfig = "./config.json"
 # map's entrypoint (only maps reachable from here are included)
 entrypoint = "main.json"
 
-[[org.repo]] # I hate TOML
-url = "https://gitlab.infra4future.de/hacc/events/hacc-map"
-ref = "master"
-name = "hacc"
-
 [[org.repo]]
 url = "https://github.com/namiko/assembly_2021"
 ref = "master"
 name = "haecksen"
+
+
+# add more repos here …
diff --git a/default.nix b/default.nix
index cceeb50..566e710 100644
--- a/default.nix
+++ b/default.nix
@@ -1,44 +1,53 @@
+{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
+
 let
-  sources = import ./nix/sources.nix {};
-  haskellNix = import sources.haskellNix {};
 
-  # Import nixpkgs and pass the haskell.nix provided nixpkgsArgs
-  pkgs = import
-    # use haskell.nix's nixpkgs, which may (?) have more substitutes available
-    haskellNix.sources.nixpkgs-unstable
-    # args for nixpkgs; includes the haskell.nix overlay
-    (haskellNix.nixpkgsArgs // {
-      system = "x86_64-linux";
-    });
+  inherit (nixpkgs) pkgs;
+
+  f = { mkDerivation, aeson, aeson-pretty, async, base, base-compat
+      , base64-bytestring, bytestring, containers, cryptohash-sha1
+      , deepseq, directory, dotgen, either, extra, filepath, fmt
+      , getopt-generics, hpack, http-client, http-types, lib, lucid
+      , microlens-platform, monad-logger, network-uri, process
+      , regex-tdfa, servant, servant-client, servant-lucid
+      , servant-server, servant-websockets, stm, template-haskell, text
+      , text-metrics, time, tomland, transformers, universum, uri-encode
+      , uuid, vector, wai, wai-extra, warp, websockets
+      }:
+      mkDerivation {
+        pname = "walint";
+        version = "0.1";
+        src = ./.;
+        isLibrary = true;
+        isExecutable = true;
+        libraryHaskellDepends = [
+          aeson base bytestring containers deepseq dotgen either extra
+          filepath getopt-generics network-uri regex-tdfa text text-metrics
+          transformers universum uri-encode vector
+        ];
+        libraryToolDepends = [ hpack ];
+        executableHaskellDepends = [
+          aeson aeson-pretty async base base-compat base64-bytestring
+          bytestring containers cryptohash-sha1 directory extra filepath fmt
+          getopt-generics http-client http-types lucid microlens-platform
+          monad-logger process servant servant-client servant-lucid
+          servant-server servant-websockets stm template-haskell text time
+          tomland universum uuid wai wai-extra warp websockets
+        ];
+        doHaddock = false;
+        prePatch = "hpack";
+        homepage = "https://stuebinm.eu/git/walint";
+        license = "unknown";
+        hydraPlatforms = lib.platforms.none;
+      };
+
+  haskellPackages = if compiler == "default"
+                       then pkgs.haskellPackages
+                       else pkgs.haskell.packages.${compiler};
+
+  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
+
+  drv = variant (haskellPackages.callPackage f {});
 
-  drvs = pkgs.haskell-nix.project {
-   # 'cleanGit' cleans a source directory based on the files known by git
-   src = pkgs.haskell-nix.haskellLib.cleanGit {
-     src = ./.;
-     name = "walint";
-   };
-   modules = [{
-     packages.walint.components.exes = {
-       # don't include gcc or ghc in the dependency closure …
-       walint-server.dontStrip = false;
-       walint.dontStrip = false;
-     };
-   }];
-   stack-sha256 = "0bp3dwj2kl6n0swz5yf9kjy5ahp6i5qrnb39hkrsqgf0682i9nk1";
-  };
 in
-{
-  walint = drvs.walint.components.exes.walint;
-  walint-server = pkgs.stdenvNoCC.mkDerivation {
-    name = "walint-server-with-assets";
-    src = drvs.walint.components.exes.walint-mapserver;
-    phases = [ "buildPhase" ];
-    buildPhase = ''
-      mkdir -p $out
-      cp -r $src/* $out
-      cp -r ${pkgs.copyPathToStore ./static} $out/static
-      cp ${pkgs.copyPathToStore ./config.json} $out/config.json
-      cp ${pkgs.copyPathToStore ./config.toml} $out/config.toml
-    '';
-  };
-}
+  drv
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..59b96a7
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,27 @@
+{
+  "nodes": {
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1665466769,
+        "narHash": "sha256-L+qcHpb4Ac3PipMXJY/Ktbu1+KXy23WCZ8pXWmsf7zY=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "0b20bf89e0035b6d62ad58f9db8fdbc99c2b01e8",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "release-22.05",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "nixpkgs": "nixpkgs"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..fc2f168
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,12 @@
+{
+  description = "walint: workadventure map linting";
+
+  inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-22.05";
+
+  outputs = { self, nixpkgs }:
+  {
+    defaultPackage.x86_64-linux = import ./default.nix { 
+      nixpkgs = import nixpkgs { system = "x86_64-linux"; }; 
+    };
+  };
+}
-- 
GitLab