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
		Add a link
		
	
		Reference in a new issue