Janet implementation of Lox from the book Crafting Interpreters
at main 2.4 kB view raw
1{ 2 description = "Janet implementation of Lox, from the book Crafting Interpreters"; 3 4 inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; 5 6 outputs = 7 { self, nixpkgs }: 8 let 9 forAllSystems = 10 mkOutputs: 11 nixpkgs.lib.genAttrs [ 12 "aarch64-linux" 13 "aarch64-darwin" 14 "x86_64-darwin" 15 "x86_64-linux" 16 ] (system: mkOutputs nixpkgs.legacyPackages.${system}); 17 in 18 { 19 packages = forAllSystems (pkgs: rec { 20 spork = pkgs.stdenv.mkDerivation rec { 21 pname = "spork"; 22 version = "1.0.0"; 23 src = pkgs.fetchFromGitHub { 24 owner = "janet-lang"; 25 repo = pname; 26 rev = "v${version}"; 27 sha256 = "sha256-na1A3JT8FmtsbdAVAXf+MCMdi0dCdBGqmyNg5wZLy6k="; 28 }; 29 dontConfigure = true; 30 buildInputs = [ pkgs.janet ]; 31 dontBuild = true; 32 installPhase = '' 33 mkdir $out 34 JANET_PATH=$out janet --install . 35 ''; 36 doInstallCheck = true; 37 installCheckPhase = '' 38 $out/bin/janet-pm --help 39 ''; 40 }; 41 lox = pkgs.stdenv.mkDerivation { 42 pname = "lox"; 43 version = "0.0.1"; 44 src = ./.; 45 dontConfigure = true; 46 buildInputs = [ pkgs.janet ]; 47 nativeBuildInputs = [ pkgs.makeWrapper ]; 48 installPhase = '' 49 mkdir $out 50 JANET_PATH=$out janet --install . 51 mkdir -p $out/bin 52 mv bin/lox $out/bin/lox 53 wrapProgram $out/bin/lox --set JANET_PATH $out 54 ''; 55 doInstallCheck = true; 56 installCheckPhase = '' 57 $out/bin/lox << EOF 58 fun add(x, y) { 59 return x + y; 60 } 61 print add(10, 5); 62 EOF | grep 15 63 ''; 64 meta.mainProgram = "lox"; 65 }; 66 default = lox; 67 }); 68 69 apps = forAllSystems (pkgs: { 70 lox = { 71 type = "app"; 72 program = pkgs.lib.getExe self.packages.${pkgs.system}.lox; 73 }; 74 default = self.apps.${pkgs.system}.lox; 75 }); 76 77 devShells = forAllSystems (pkgs: { 78 default = pkgs.mkShell { 79 packages = with self.packages.${pkgs.system}; [ 80 pkgs.janet 81 spork 82 lox 83 ]; 84 }; 85 }); 86 }; 87}