-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
50 lines (47 loc) · 1.68 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
description = "develop environment with VM emulators";
inputs = { nixpkgs.url = "nixpkgs/nixpkgs-unstable"; };
outputs = { self, nixpkgs, ... }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
nand2tetris = builtins.fetchurl {
# see https://www.nand2tetris.org/software
name = "nand2tetris.zip";
url = "https://drive.google.com/uc?export=download&id=1xZzcMIUETv3u3sdpM_oTJSTetpVee3KZ";
sha256 = "1nfv7qani0x3vih93gqhhs5yykzvfq4p4zchb0hpkjscsq51djyj";
};
in {
packages.${system} = {
# `nix run .#setup`
# download testsuites and unpack
setup = pkgs.writeScriptBin "setup" ''
unzip ${nand2tetris}
cp -r nand2tetris/tools .
chmod a+x tools/VMEmulator.sh
chmod a+x tools/CPUmulator.sh
cp -r nand2tetris/tools/OS .
'';
# e.g. `nix run .#compile jack-compiler/tests/fixtures/{project}`
# generates compiled vm files in `runtime` directory.
compile = pkgs.writeScriptBin "compile" ''
mkdir -p runtime
cp OS/*.vm runtime
cargo run -p jack-compiler -- "$1"
cp "$1"/*.vm runtime
rm "$1"/*.vm
'';
};
devShell.${system} = pkgs.mkShell {
name = "nand2tetris";
buildInputs = with pkgs; [ jdk11 ];
shellHook = ''
export JAVA_HOME=${pkgs.jdk11}
# launch VM emulator in 4K
export GDK_SCALE=2
# see https://wiki.archlinux.org/title/Java 5.3 GTK LookAndFeel
export JAVA_TOOL_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
'';
};
};
}