# nix support for racket implements nix helpers for building racket packages and environments this is a complete new implementation of this functionality. i did not use racket2nix because racket2nix is messy and hasn't been updated for a while. this is a significantly simpler implementation owning to better use of stdenv utilities and racket features ## how to use ### make nix packages for racket packages ```nix pkgs.racketPackages.callPackage ( { lib, buildRacketPackage, fetchFromGitHub, }: buildRacketPackage { pname = "ansi-color"; version = "0.2"; src = final.fetchFromGitHub { owner = "renatoathaydes"; repo = "ansi-color"; rev = "0.2"; hash = "sha256-7WDW+4R9K+XLb9nMNGQlU+zAi2Gq7cUqzO3csN+AJvI="; }; } ) {} ``` ### build a racket environment unfortunately, due to racket limitations, `nix-shell`/`nix develop` will not work at all for racket packages that are created using this nix code. instead, similar to `python.buildEnv` / `python.withPackages`, you can create a racket environment with a given set of packages in it. this functions somewhat like a python "virtualenv" for racket. it is implemented by creating a "tethered installation" -- see . ```nix with pkgs.racketPackages; makeRacketEnv { packages = [ ansi-color ]; }; ``` the resulting environment will have a `bin/racket` executable which has the declared packages available ## future work - automatically convert info.rkt into packaging. this should be doable for most of the catalog that is currently building on the CI, and perhaps some additional steps are needed for native library dependencies declared in info.rkt - allow using either racket or racket-minimal as a base (currently only racket non-minimal is supported) - instead of having 2 separate packages, rework racket to be a layered installation on top of racket-minimal, reducing duplication. this is similar to how guix does it - split outputs or have an option to not build the docs for every package, because it can take a while and results in 20+MB of additional disk space