--- /dev/null
+## Developer setup
+
+### Nix / NixOS
+
+If you're using `Nix` or `NixOS`, the provided `flake.nix` should give you a good start.
+You'll need a recent Rust toolchain, for which you can use [`rustup`](https://rustup.sh).
+Currently that's assumed to be included on the system.
+Also, the test scripts currently assume binfmt is set up for RISC-V 64 (or that you're running on RISC-V 64).
+Assuming you're not on RISC-V 64 (most people aren't), you can add the following to your Nix `configuration.nix`:
+
+```
+
+ boot.binfmt.emulatedSystems = [
+ "riscv64-linux"
+ # ....
+ ];
+```
+
+### Ubuntu
+
+```
+# On non RISC-V 64 systems:
+apt install -y build-essential gdb crossbuild-essential-riscv64 qemu-system qemu-user qemu-user-binfmt
+```
+
+## Building the Compiler
+
+The compiler is written in Rust, and can be compiled with
+
+```
+cargo build
+```
+
+This puts the compiler binary at `target/debug/sorelc`.
+Release builds can also be created in the usual Rust/`cargo` fasion.
+
+Note that if you change any stdlib files, you'll need to rebuild.
+
+## Compiling a Sorel Program
+
+Currently, `sorelc` takes only one argument, and that's an entrypoint for your program.
+Any words in that file outside word definitions will constitute the "main" of your program.
+
+This will create a file of the same name alongside it, with the extension changed to `asm`.
+This is a RISC-V 64 assembly file, suitable for use with GNU Assembler.
+You can assemble this as normal, and run your program.
+
+## Testing
+
+The `tests` directory contains a shell script you can invoke with `sh test.sh`.
+It should run just fine given the above setup, provided you've done a `cargo build` to build the compiler.
+This will compile the test binary using `sorelc` and your local `riscv64` assembler.
+It will run the binary using binfmt, which instructs the kernel to run your binary using `qemu-user`.
+
+### Debugging
+
+You can use `gdb`!
+Unfortunately, with `qemu-user` we can't just load the binary directly into `gdb`.
+Instead, we'll need to run `qemu-user` on a RISC-V 64 binary with a debugger port open:
+
+```
+qemu-riscv64 -g 4567 ./test1.out
+```
+
+Then, you can fire up `gdb`, and once inside it's prompt, connect to the "remote" port.
+
+```
+target remote :4567
+```
+
+Then you can use normal gdb commands!
+The `tui layout asm` is highly recommended.
+Note that if you'l linking `putstack.c`, that will use libc, which drastically inflates the binary and hijack's init.
+This can make things quite a pain in `gdb`, so try to build without it (i.e. uncomment the LD line and comment out the CC line in `test.sh`, and remove all references to `putstack` in code).