2021-09-03 13:52:29 +00:00
|
|
|
# Nim {#nim}
|
|
|
|
|
|
|
|
## Overview {#nim-overview}
|
|
|
|
|
|
|
|
The Nim compiler, a builder function, and some packaged libraries are available
|
|
|
|
in Nixpkgs. Until now each compiler release has been effectively backwards
|
|
|
|
compatible so only the latest version is available.
|
|
|
|
|
|
|
|
## Nim program packages in Nixpkgs {#nim-program-packages-in-nixpkgs}
|
|
|
|
|
|
|
|
Nim programs can be built using `nimPackages.buildNimPackage`. In the
|
|
|
|
case of packages not containing exported library code the attribute
|
|
|
|
`nimBinOnly` should be set to `true`.
|
|
|
|
|
|
|
|
The following example shows a Nim program that depends only on Nim libraries:
|
|
|
|
|
|
|
|
```nix
|
2023-06-14 09:43:26 +00:00
|
|
|
{ lib, nimPackages, fetchFromGitHub }:
|
2021-09-03 13:52:29 +00:00
|
|
|
|
2023-06-14 09:43:26 +00:00
|
|
|
nimPackages.buildNimPackage (finalAttrs: {
|
|
|
|
pname = "ttop";
|
|
|
|
version = "1.0.1";
|
2021-09-03 13:52:29 +00:00
|
|
|
nimBinOnly = true;
|
|
|
|
|
2023-06-14 09:43:26 +00:00
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "inv2004";
|
|
|
|
repo = "ttop";
|
|
|
|
rev = "v${finalAttrs.version}";
|
|
|
|
hash = "sha256-x4Uczksh6p3XX/IMrOFtBxIleVHdAPX9e8n32VAUTC4=";
|
2021-09-03 13:52:29 +00:00
|
|
|
};
|
|
|
|
|
2023-06-14 09:43:26 +00:00
|
|
|
buildInputs = with nimPackages; [ asciigraph illwill parsetoml zippy ];
|
2021-09-03 13:52:29 +00:00
|
|
|
|
2023-06-14 09:43:26 +00:00
|
|
|
})
|
2021-09-03 13:52:29 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## Nim library packages in Nixpkgs {#nim-library-packages-in-nixpkgs}
|
|
|
|
|
|
|
|
|
|
|
|
Nim libraries can also be built using `nimPackages.buildNimPackage`, but
|
|
|
|
often the product of a fetcher is sufficient to satisfy a dependency.
|
|
|
|
The `fetchgit`, `fetchFromGitHub`, and `fetchNimble` functions yield an
|
|
|
|
output that can be discovered during the `configurePhase` of `buildNimPackage`.
|
|
|
|
|
|
|
|
Nim library packages are listed in
|
|
|
|
[pkgs/top-level/nim-packages.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/nim-packages.nix) and implemented at
|
|
|
|
[pkgs/development/nim-packages](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/nim-packages).
|
|
|
|
|
|
|
|
The following example shows a Nim library that propagates a dependency on a
|
|
|
|
non-Nim package:
|
|
|
|
```nix
|
|
|
|
{ lib, buildNimPackage, fetchNimble, SDL2 }:
|
|
|
|
|
2023-06-14 09:43:26 +00:00
|
|
|
buildNimPackage (finalAttrs: {
|
2021-09-03 13:52:29 +00:00
|
|
|
pname = "sdl2";
|
|
|
|
version = "2.0.4";
|
|
|
|
src = fetchNimble {
|
2023-06-14 09:43:26 +00:00
|
|
|
inherit (finalAttrs) pname version;
|
|
|
|
hash = "sha256-Vtcj8goI4zZPQs2TbFoBFlcR5UqDtOldaXSH/+/xULk=";
|
2021-09-03 13:52:29 +00:00
|
|
|
};
|
|
|
|
propagatedBuildInputs = [ SDL2 ];
|
2023-06-14 09:43:26 +00:00
|
|
|
})
|
2021-09-03 13:52:29 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## `buildNimPackage` parameters {#buildnimpackage-parameters}
|
|
|
|
|
|
|
|
All parameters from `stdenv.mkDerivation` function are still supported. The
|
|
|
|
following are specific to `buildNimPackage`:
|
|
|
|
|
|
|
|
* `nimBinOnly ? false`: If `true` then build only the programs listed in
|
|
|
|
the Nimble file in the packages sources.
|
|
|
|
* `nimbleFile`: Specify the Nimble file location of the package being built
|
|
|
|
rather than discover the file at build-time.
|
|
|
|
* `nimRelease ? true`: Build the package in *release* mode.
|
|
|
|
* `nimDefines ? []`: A list of Nim defines. Key-value tuples are not supported.
|
|
|
|
* `nimFlags ? []`: A list of command line arguments to pass to the Nim compiler.
|
|
|
|
Use this to specify defines with arguments in the form of `-d:${name}=${value}`.
|
|
|
|
* `nimDoc` ? false`: Build and install HTML documentation.
|
|
|
|
|
|
|
|
* `buildInputs` ? []: The packages listed here will be searched for `*.nimble`
|
|
|
|
files which are used to populate the Nim library path. Otherwise the standard
|
|
|
|
behavior is in effect.
|