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
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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
 | 
			
		||||
  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; [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue