We use angle brackets since they look a lot like a placeholder while also being valid nix code, as suggested by roberth here: https://github.com/NixOS/nixpkgs/pull/299554#discussion_r1541797970
2.6 KiB
CHICKEN
CHICKEN is a R⁵RS-compliant Scheme compiler. It includes an interactive mode and a custom package format, "eggs".
Using Eggs
Eggs described in nixpkgs are available inside the
chickenPackages.chickenEggs
attrset. Including an egg as a build input is
done in the typical Nix fashion. For example, to include support for SRFI
189 in a derivation, one
might write:
{
buildInputs = [
chicken
chickenPackages.chickenEggs.srfi-189
];
}
Both chicken
and its eggs have a setup hook which configures the environment
variables CHICKEN_INCLUDE_PATH
and CHICKEN_REPOSITORY_PATH
.
Updating Eggs
nixpkgs only knows about a subset of all published eggs. It uses egg2nix to generate a package set from a list of eggs to include.
The package set is regenerated by running the following shell commands:
$ nix-shell -p chickenPackages.egg2nix
$ cd pkgs/development/compilers/chicken/5/
$ egg2nix eggs.scm > eggs.nix
Adding Eggs
When we run egg2nix
, we obtain one collection of eggs with
mutually-compatible versions. This means that when we add new eggs, we may
need to update existing eggs. To keep those separate, follow the procedure for
updating eggs before including more eggs.
To include more eggs, edit pkgs/development/compilers/chicken/5/eggs.scm
.
The first section of this file lists eggs which are required by egg2nix
itself; all other eggs go into the second section. After editing, follow the
procedure for updating eggs.
Override Scope
The chicken package and its eggs, respectively, reside in a scope. This means, the scope can be overridden to effect other packages in it.
This example shows how to use a local copy of srfi-180
and have it affect
all the other eggs:
let
myChickenPackages = pkgs.chickenPackages.overrideScope' (self: super: {
# The chicken package itself can be overridden to effect the whole ecosystem.
# chicken = super.chicken.overrideAttrs {
# src = ...
# };
chickenEggs = super.chickenEggs.overrideScope' (eggself: eggsuper: {
srfi-180 = eggsuper.srfi-180.overrideAttrs {
# path to a local copy of srfi-180
src = <...>;
};
});
});
in
# Here, `myChickenPackages.chickenEggs.json-rpc`, which depends on `srfi-180` will use
# the local copy of `srfi-180`.
<...>