From c08fbb73a960bd19ab1ca553da5bb8111622baba Mon Sep 17 00:00:00 2001
From: Adrian Kummerlaender
Date: Mon, 4 Jun 2018 21:12:02 +0200
Subject: Nixify build process

Building the website in the presence of the Nix package manager is now
as simple as:

- cloning this repo
- entering the nix-shell environment declared by `shell.nix`
- calling `generate`
- optionally call `preview` to spawn a webserver in `target/99_result`

All dependencies such as the internal InputXSLT, StaticXSLT and
BuildXSLT modules as well as external ones such as KaTeX and pandoc are
built declaratively by Nix.
---
 pkgs/BuildXSLT.nix  | 23 +++++++++++++++++++++++
 pkgs/KaTeX.nix      |  1 -
 pkgs/StaticXSLT.nix | 23 +++++++++++++++++++++++
 pkgs/generate.nix   |  9 +++++++++
 pkgs/preview.nix    |  9 +++++++++
 shell.nix           | 12 ++++++++----
 6 files changed, 72 insertions(+), 5 deletions(-)
 create mode 100644 pkgs/BuildXSLT.nix
 create mode 100644 pkgs/StaticXSLT.nix
 create mode 100644 pkgs/generate.nix
 create mode 100644 pkgs/preview.nix

diff --git a/pkgs/BuildXSLT.nix b/pkgs/BuildXSLT.nix
new file mode 100644
index 0000000..4e5dcb6
--- /dev/null
+++ b/pkgs/BuildXSLT.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "BuildXSLT";
+
+  src = fetchFromGitHub {
+    owner = "KnairdA";
+    repo = "BuildXSLT";
+    rev = "master";
+    sha256 = "09kxhvhzn0r62l39zgj1kc21rb565fnc1y3sg48p4gi4v15xjmc6";
+  };
+
+  installPhase = ''
+    mkdir $out
+    cp -r * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "BuildXSLT";
+    homepage    = https://github.com/KnairdA/BuildXSLT/;
+    license     = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/pkgs/KaTeX.nix b/pkgs/KaTeX.nix
index 6565b13..37fe63a 100644
--- a/pkgs/KaTeX.nix
+++ b/pkgs/KaTeX.nix
@@ -13,7 +13,6 @@ let
 
     installPhase = ''
       mkdir -p $out/share/katex
-
       cp katex.min.js $out/share/katex/
     '';
 
diff --git a/pkgs/StaticXSLT.nix b/pkgs/StaticXSLT.nix
new file mode 100644
index 0000000..3caee06
--- /dev/null
+++ b/pkgs/StaticXSLT.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "StaticXSLT";
+
+  src = fetchFromGitHub {
+    owner = "KnairdA";
+    repo = "StaticXSLT";
+    rev = "master";
+    sha256 = "17gd181cw9yyc4h1fn7fikcgm8g7fdwm7d7fxwib4aynm18kwqad";
+  };
+
+  installPhase = ''
+    mkdir $out
+    cp -r * $out/
+  '';
+
+  meta = with stdenv.lib; {
+    description = "StaticXSLT";
+    homepage    = https://github.com/KnairdA/StaticXSLT/;
+    license     = stdenv.lib.licenses.mit;
+  };
+}
diff --git a/pkgs/generate.nix b/pkgs/generate.nix
new file mode 100644
index 0000000..bb7d45a
--- /dev/null
+++ b/pkgs/generate.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+
+let
+  InputXSLT  = pkgs.callPackage ./InputXSLT.nix {};
+  StaticXSLT = pkgs.callPackage ./StaticXSLT.nix {};
+  BuildXSLT  = pkgs.callPackage ./BuildXSLT.nix {};
+in pkgs.writeScriptBin
+  "generate"
+  "${InputXSLT}/bin/ixslt --input make.xml --transformation ${BuildXSLT}/build.xsl --include ${StaticXSLT}/"
diff --git a/pkgs/preview.nix b/pkgs/preview.nix
new file mode 100644
index 0000000..7162838
--- /dev/null
+++ b/pkgs/preview.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }:
+
+pkgs.writeScriptBin
+  "preview"
+  ''
+    pushd target/99_result
+    ${pkgs.python3}/bin/python -m http.server 8080
+    popd
+  ''
diff --git a/shell.nix b/shell.nix
index 706a893..81fb80a 100644
--- a/shell.nix
+++ b/shell.nix
@@ -3,14 +3,18 @@ with import <nixpkgs> {};
 stdenv.mkDerivation rec {
   name = "env";
   env = buildEnv { name = name; paths = buildInputs; };
+
   buildInputs = let
-    InputXSLT = callPackage ./pkgs/InputXSLT.nix {};
-    KaTeX     = callPackage ./pkgs/KaTeX.nix {};
+    InputXSLT = pkgs.callPackage ./pkgs/InputXSLT.nix {};
+    KaTeX     = pkgs.callPackage ./pkgs/KaTeX.nix {};
+    generate  = pkgs.callPackage ./pkgs/generate.nix {};
+    preview   = pkgs.callPackage ./pkgs/preview.nix {};
   in [
+    generate
+    preview
     InputXSLT
     pandoc
-    highlight
     KaTeX
-    python3
+    highlight
   ];
 }
-- 
cgit v1.2.3