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
This commit is contained in:
parent
17e1764ef8
commit
3d6130c7cf
3 changed files with 67 additions and 18 deletions
|
@ -3,13 +3,46 @@
|
||||||
Apply a series of transforms to a QWERTY keyboard then use the new keyboard to
|
Apply a series of transforms to a QWERTY keyboard then use the new keyboard to
|
||||||
re-type a passage of text.
|
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
|
## Usage
|
||||||
|
|
||||||
Here are some `--help` and usage examples:
|
Here are some `--help` and usage examples:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ runhaskell Main.hs --help
|
$ ./result/transform-keyboard --help
|
||||||
Usage: Main.hs (-t|--transforms ARG) (-p|--passage ARG)
|
Usage: transform-keyboard (-t|--transforms ARG) (-p|--passage ARG)
|
||||||
Transform a QWERTY keyboard using a string of commands
|
Transform a QWERTY keyboard using a string of commands
|
||||||
|
|
||||||
Available options:
|
Available options:
|
||||||
|
@ -21,7 +54,7 @@ Available options:
|
||||||
Now a working example:
|
Now a working example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ runhaskell Main.hs --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant.'
|
$ ./result/transform-keyboard --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant.'
|
||||||
Typing: "Hello,Brilliant."
|
Typing: "Hello,Brilliant."
|
||||||
On this keyboard:
|
On this keyboard:
|
||||||
[N][M][,][.][/][Z][X][C][V][B]
|
[N][M][,][.][/][Z][X][C][V][B]
|
||||||
|
@ -34,7 +67,7 @@ Result: QKRRF30LDRRDY1;4
|
||||||
...and an example with an erroneous input (i.e. `!`):
|
...and an example with an erroneous input (i.e. `!`):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ runhaskell Main.hs --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant!'
|
$ ./result/transform-keyboard --transforms=HHVS12VHVHS3 --passage='Hello,Brilliant!'
|
||||||
Typing: "Hello,Brilliant!"
|
Typing: "Hello,Brilliant!"
|
||||||
On this keyboard:
|
On this keyboard:
|
||||||
[N][M][,][.][/][Z][X][C][V][B]
|
[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][;]
|
[A][S][D][F][G][H][J][K][L][;]
|
||||||
[Z][X][C][V][B][N][M][,][.][/]
|
[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
|
|
||||||
```
|
|
||||||
|
|
25
scratch/brilliant/default.nix
Normal file
25
scratch/brilliant/default.nix
Normal file
|
@ -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
|
||||||
|
'';
|
||||||
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
let
|
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 {
|
in pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
(haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [
|
(haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [
|
||||||
|
|
Loading…
Add table
Reference in a new issue