about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-04-17T14·08+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-04-17T14·08+0100
commit277ad983d4d9caf51679d3c1c615ecc7134539be (patch)
treee90dd4771dff6555bc3c0c5326ac939f5fed79e1
parentbdb16c11bac3c1de7aa0b03a49da75d2bdc2d569 (diff)
Nixify build for Chord Drill Sergeant
Thankfully @tazjin builds Gemma (an Elm project) with Nix, so I could reference
Gemma's default.nix to help me with mine. Elm problematically attempts to
HTTP-fetch a list of packages to verify my project's dependencies. Because Nix
builds derivations in a sandbox without network access, I need to use some
escape hatches (i.e. NIX_REDIRECTS, LD_PRELOAD,
SYSTEM_CERTIFICATE_PATH). Welp... it's packaged now...

I'm also pointing learnpianochords.app to this project's index.html. It will be
live soon! :)

TODO(wpcarro): Rename "Chord Drill Sergeant" -> "Learn Piano Chords" (KISS)
-rw-r--r--nixos/socrates/configuration.nix5
-rw-r--r--website/sandbox/chord-drill-sergeant/default.nix24
-rw-r--r--website/sandbox/chord-drill-sergeant/src/Main.elm2
3 files changed, 30 insertions, 1 deletions
diff --git a/nixos/socrates/configuration.nix b/nixos/socrates/configuration.nix
index fb0964aaea37..8d3149df8a05 100644
--- a/nixos/socrates/configuration.nix
+++ b/nixos/socrates/configuration.nix
@@ -177,6 +177,11 @@ in {
         enableACME = true;
         root = briefcase.website.sandbox;
       };
+      "learnpianochords.app" = {
+        addSSL = true;
+        enableACME = true;
+        root = briefcase.website.sandbox.chord-drill-sergeant;
+      };
     };
   };
 
diff --git a/website/sandbox/chord-drill-sergeant/default.nix b/website/sandbox/chord-drill-sergeant/default.nix
new file mode 100644
index 000000000000..7ea92c29f5c1
--- /dev/null
+++ b/website/sandbox/chord-drill-sergeant/default.nix
@@ -0,0 +1,24 @@
+{ pkgs, ... }:
+
+pkgs.stdenv.mkDerivation {
+  name = "learn-piano-chords";
+  src = ./.;
+  buildInputs = with pkgs; [
+    elmPackages.elm
+    nodejs
+  ];
+  outputHashMode = "recursive";
+  outputHashAlgo = "sha256";
+  outputHash = "0diya7q8ird56jsbf2p49fyvldsay6m9z251zr2rq1i4qs7idy0j";
+  phases = [ "unpackPhase" "buildPhase" ];
+  buildPhase = ''
+    export NIX_REDIRECTS=/etc/protocols=${pkgs.iana-etc}/etc/protocols
+    export LD_PRELOAD=${pkgs.libredirect}/lib/libredirect.so
+    export SYSTEM_CERTIFICATE_PATH=${pkgs.cacert}/etc/ssl/certs
+
+    mkdir -p $out
+    cp index.html $out
+    elm make src/Main.elm --optimize --output=$out/elm.js
+    npx tailwindcss build index.css -o $out/output.css
+  '';
+}
diff --git a/website/sandbox/chord-drill-sergeant/src/Main.elm b/website/sandbox/chord-drill-sergeant/src/Main.elm
index c4c7a36653a2..054d318a08b1 100644
--- a/website/sandbox/chord-drill-sergeant/src/Main.elm
+++ b/website/sandbox/chord-drill-sergeant/src/Main.elm
@@ -123,7 +123,7 @@ init =
     , whitelistedKeys = keys
     , selectedChord = Nothing
     , isPaused = True
-    , tempo = 30
+    , tempo = 20
     , firstNote = firstNote
     , lastNote = lastNote
     , view = Preferences