diff options
author | William Carroll <wpcarro@gmail.com> | 2020-08-12T09·28+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-08-12T09·28+0100 |
commit | 3d6130c7cfb31d3a5eb5510d3aec55000b7df230 (patch) | |
tree | a4d1a9aa154e4afae493d7b7636aea8033b84f91 /scratch | |
parent | 17e1764ef8cfa7ebf6b8f1c6b4d4f6edd335e10d (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')
-rw-r--r-- | scratch/brilliant/README.md | 54 | ||||
-rw-r--r-- | scratch/brilliant/default.nix | 25 | ||||
-rw-r--r-- | scratch/brilliant/shell.nix | 6 |
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; [ |