2021-01-01 17:45:43 +00:00
# Idris {#idris}
2018-03-24 14:47:41 +00:00
2021-06-05 20:22:45 +01:00
## Installing Idris {#installing-idris}
2018-03-24 14:47:41 +00:00
2018-11-10 14:58:25 +00:00
The easiest way to get a working idris version is to install the `idris` attribute:
2018-03-24 14:47:41 +00:00
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ # On NixOS
$ nix-env -i nixos.idris
$ # On non-NixOS
$ nix-env -i nixpkgs.idris
```
2018-03-24 14:47:41 +00:00
2019-06-15 16:11:24 +01:00
This however only provides the `prelude` and `base` libraries. To install idris with additional libraries, you can use the `idrisPackages.with-packages` function, e.g. in an overlay in `~/.config/nixpkgs/overlays/my-idris.nix` :
2018-03-24 14:47:41 +00:00
2019-06-15 16:11:24 +01:00
```nix
self: super: {
myIdris = with self.idrisPackages; with-packages [ contrib pruviloj ];
}
2018-11-10 14:58:25 +00:00
```
2019-06-15 16:11:24 +01:00
And then:
2021-06-05 20:22:45 +01:00
```ShellSession
2019-06-15 16:11:24 +01:00
$ # On NixOS
$ nix-env -iA nixos.myIdris
$ # On non-NixOS
$ nix-env -iA nixpkgs.myIdris
2018-11-10 14:58:25 +00:00
```
2018-03-24 14:47:41 +00:00
2018-11-10 14:58:25 +00:00
To see all available Idris packages:
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ # On NixOS
$ nix-env -qaPA nixos.idrisPackages
$ # On non-NixOS
$ nix-env -qaPA nixpkgs.idrisPackages
```
2018-03-24 14:47:41 +00:00
2018-11-10 14:58:25 +00:00
Similarly, entering a `nix-shell` :
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ nix-shell -p 'idrisPackages.with-packages (with idrisPackages; [ contrib pruviloj ])'
```
2018-03-24 14:47:41 +00:00
2021-06-05 20:22:45 +01:00
## Starting Idris with library support {#starting-idris-with-library-support}
2018-03-24 14:47:41 +00:00
2018-11-10 14:58:25 +00:00
To have access to these libraries in idris, call it with an argument `-p <library name>` for each library:
2018-03-24 14:47:41 +00:00
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ nix-shell -p 'idrisPackages.with-packages (with idrisPackages; [ contrib pruviloj ])'
[nix-shell:~]$ idris -p contrib -p pruviloj
```
2018-03-24 14:47:41 +00:00
2018-11-10 14:58:25 +00:00
A listing of all available packages the Idris binary has access to is available via `--listlibs` :
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ idris --listlibs
00prelude-idx.ibc
pruviloj
base
contrib
prelude
00pruviloj-idx.ibc
00base-idx.ibc
00contrib-idx.ibc
```
2021-06-05 20:22:45 +01:00
## Building an Idris project with Nix {#building-an-idris-project-with-nix}
2018-11-10 14:58:25 +00:00
As an example of how a Nix expression for an Idris package can be created, here is the one for `idrisPackages.yaml` :
```nix
2021-01-21 00:07:16 +00:00
{ lib
, build-idris-package
2018-11-10 14:58:25 +00:00
, fetchFromGitHub
, contrib
, lightyear
}:
build-idris-package {
name = "yaml";
version = "2018-01-25";
# This is the .ipkg file that should be built, defaults to the package name
# In this case it should build `Yaml.ipkg` instead of `yaml.ipkg`
# This is only necessary because the yaml packages ipkg file is
# different from its package name here.
ipkgName = "Yaml";
# Idris dependencies to provide for the build
idrisDeps = [ contrib lightyear ];
src = fetchFromGitHub {
owner = "Heather";
repo = "Idris.Yaml";
rev = "5afa51ffc839844862b8316faba3bafa15656db4";
sha256 = "1g4pi0swmg214kndj85hj50ccmckni7piprsxfdzdfhg87s0avw7";
};
2021-01-21 00:07:16 +00:00
meta = with lib; {
2018-11-10 14:58:25 +00:00
description = "Idris YAML lib";
2020-02-16 16:31:03 +00:00
homepage = "https://github.com/Heather/Idris.Yaml";
2021-01-21 00:07:16 +00:00
license = licenses.mit;
maintainers = [ maintainers.brainrape ];
2018-11-10 14:58:25 +00:00
};
}
```
Assuming this file is saved as `yaml.nix` , it's buildable using
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ nix-build -E '(import < nixpkgs > {}).idrisPackages.callPackage ./yaml.nix {}'
```
Or it's possible to use
```nix
with import < nixpkgs > {};
{
yaml = idrisPackages.callPackage ./yaml.nix {};
}
```
in another file (say `default.nix` ) to be able to build it with
2021-06-05 20:22:45 +01:00
```ShellSession
2018-11-10 14:58:25 +00:00
$ nix-build -A yaml
```
2019-07-31 16:15:06 +01:00
2021-06-05 20:22:45 +01:00
## Passing options to `idris` commands {#passing-options-to-idris-commands}
2019-07-31 16:15:06 +01:00
The `build-idris-package` function provides also optional input values to set additional options for the used `idris` commands.
Specifically, you can set `idrisBuildOptions` , `idrisTestOptions` , `idrisInstallOptions` and `idrisDocOptions` to provide additional options to the `idris` command respectively when building, testing, installing and generating docs for your package.
For example you could set
2021-03-13 23:30:36 +00:00
```nix
2019-07-31 16:15:06 +01:00
build-idris-package {
idrisBuildOptions = [ "--log" "1" "--verbose" ]
...
}
```
to require verbose output during `idris` build phase.