about summary refs log tree commit diff
path: root/scratch/brilliant
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-08-12T09·28+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-08-12T09·28+0100
commit3d6130c7cfb31d3a5eb5510d3aec55000b7df230 (patch)
treea4d1a9aa154e4afae493d7b7636aea8033b84f91 /scratch/brilliant
parent17e1764ef8cfa7ebf6b8f1c6b4d4f6edd335e10d (diff)
Provide more useful instructions for building this project
TL;DR:
- include a default.nix to allow users to build an named executable
- emphasize in the README that the user needs Nix to build this project
- pin nixpkgs to a specific commit and fetch it from GitHub
Diffstat (limited to 'scratch/brilliant')
-rw-r--r--scratch/brilliant/README.md54
-rw-r--r--scratch/brilliant/default.nix25
-rw-r--r--scratch/brilliant/shell.nix6
3 files changed, 67 insertions, 18 deletions
diff --git a/scratch/brilliant/README.md b/scratch/brilliant/README.md
index ef97a63f8659..a9019a0f4fc4 100644
--- a/scratch/brilliant/README.md
+++ b/scratch/brilliant/README.md
@@ -3,13 +3,46 @@
 Apply a series of transforms to a QWERTY keyboard then use the new keyboard to
 re-type a passage of text.
 
+## Environment
+
+You will need [Nix][nix] to build this program on your machine. The good news is
+that you won't need any Haskell-specific dependencies like `ghc`, `cabal`, or
+`stack`: just Nix.
+
+Once you have Nix installed, to build the program, run the following from this
+project's top-level directory:
+
+```shell
+$ nix-build
+```
+
+This should output an executable named `transform-keyboard` within a `result`
+directory:
+
+```shell
+$ tree result
+result
+└── transform-keyboard
+```
+
+### Testing
+
+To run the test suite, run the following from the project's top-level directory:
+
+```shell
+$ nix-shell
+$ runhaskell Spec.hs
+```
+
+[nix]: https://nixos.org/download.html
+
 ## Usage
 
 Here are some `--help` and usage examples:
 
 ```shell
-$ runhaskell Main.hs --help
-Usage: Main.hs (-t|--transforms ARG) (-p|--passage ARG)
+$ ./result/transform-keyboard --help
+Usage: transform-keyboard (-t|--transforms ARG) (-p|--passage ARG)
   Transform a QWERTY keyboard using a string of commands
 
 Available options:
@@ -21,7 +54,7 @@ Available options:
 Now a working example:
 
 ```shell
-$ runhaskell Main.hs --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant.'
+$ ./result/transform-keyboard --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant.'
 Typing: "Hello,Brilliant."
 On this keyboard:
 [N][M][,][.][/][Z][X][C][V][B]
@@ -34,7 +67,7 @@ Result: QKRRF30LDRRDY1;4
 ...and an example with an erroneous input (i.e. `!`):
 
 ```shell
-$ runhaskell Main.hs --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant!'
+$ ./result/transform-keyboard --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant!'
 Typing: "Hello,Brilliant!"
 On this keyboard:
 [N][M][,][.][/][Z][X][C][V][B]
@@ -47,16 +80,3 @@ Looks like at least one of the characters in your input passage doesn't fit on o
 [A][S][D][F][G][H][J][K][L][;]
 [Z][X][C][V][B][N][M][,][.][/]
 ```
-
-## Environment
-
-You'll need `runhaskell` and a few other Haskell libraries, so call `nix-shell`
-from this project's root directory.
-
-## Testing
-
-To run the test suite:
-
-```shell
-$ runhaskell Spec.hs
-```
diff --git a/scratch/brilliant/default.nix b/scratch/brilliant/default.nix
new file mode 100644
index 000000000000..83c62a3d2eba
--- /dev/null
+++ b/scratch/brilliant/default.nix
@@ -0,0 +1,25 @@
+let
+  pkgs = import (builtins.fetchGit {
+    url = "https://github.com/NixOS/nixpkgs-channels";
+    ref = "nixos-20.03";
+    rev = "afa9ca61924f05aacfe495a7ad0fd84709d236cc";
+  }) {};
+
+  ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: [
+    hpkgs.optparse-applicative
+    hpkgs.unordered-containers
+  ]);
+in pkgs.stdenv.mkDerivation {
+  name = "transform-keyboard";
+  buildInputs = [];
+  src = builtins.path {
+    path = ./.;
+    name = "transform-keyboard-src";
+  };
+  buildPhase = ''
+    ${ghc}/bin/ghc ./Main.hs
+  '';
+  installPhase = ''
+    mkdir -p $out && mv Main $out/transform-keyboard
+  '';
+}
diff --git a/scratch/brilliant/shell.nix b/scratch/brilliant/shell.nix
index be1ecf3ca77f..02d69d3be01b 100644
--- a/scratch/brilliant/shell.nix
+++ b/scratch/brilliant/shell.nix
@@ -1,5 +1,9 @@
 let
-  pkgs = import /home/wpcarro/nixpkgs {};
+  pkgs = import (builtins.fetchGit {
+    url = "https://github.com/NixOS/nixpkgs-channels";
+    ref = "nixos-20.03";
+    rev = "afa9ca61924f05aacfe495a7ad0fd84709d236cc";
+  }) {};
 in pkgs.mkShell {
   buildInputs = with pkgs; [
     (haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [