2016-02-08 02:53:22 +03:00
|
|
|
# hnix
|
|
|
|
|
2020-08-03 23:24:02 +03:00
|
|
|
| [![Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/haskell-nix/Lobby) | CI |
|
|
|
|
| :--- | :--- |
|
|
|
|
| [![Hackage](https://img.shields.io/hackage/v/hnix?color=%235e5086&label=Latest%20release)](https://hackage.haskell.org/package/hnix) | [![Hackage, Cabal, Linux](https://github.com/haskell-nix/hnix/workflows/Hackage,%20Cabal,%20Linux/badge.svg)](https://github.com/haskell-nix/hnix/actions?query=workflow%3A"Hackage%2C+Cabal%2C+Linux"+branch%3Amaster) |
|
|
|
|
| [![Hackage Matrix Builder](https://img.shields.io/badge/Hackage%20Matrix-Builder-%235e5086)](https://matrix.hackage.haskell.org/package/hnix) | [![Nixpkgs, Linux, main](https://github.com/haskell-nix/hnix/workflows/Nixpkgs,%20Linux,%20main/badge.svg)](https://github.com/haskell-nix/hnix/actions?query=workflow%3A%22Nixpkgs%2C+Linux%2C+main%22+branch%3Amaster) |
|
|
|
|
| [![Nixpkgs Hydra CI](https://img.shields.io/badge/Nixpkgs%20Hydra-CI-%234f72bb)](https://hydra.nixos.org/job/nixpkgs/trunk/haskellPackages.hnix.x86_64-linux#tabs-status) | [![Nixpkgs, Linux, additional](https://github.com/haskell-nix/hnix/workflows/Nixpkgs,%20Linux,%20additional/badge.svg)](https://github.com/haskell-nix/hnix/actions?query=workflow%3A%22Nixpkgs%2C+Linux%2C+additional%22+branch%3Amaster) |
|
2020-08-03 23:49:35 +03:00
|
|
|
| [![Release dependencies](https://img.shields.io/hackage-deps/v/hnix?label=Release%20dependencies)](https://packdeps.haskellers.com/feed?needle=hnix) | [![Nixpkgs, macOS](https://github.com/haskell-nix/hnix/workflows/Nixpkgs,%20macOS/badge.svg)](https://github.com/haskell-nix/hnix/actions?query=workflow%3A%22Nixpkgs%2C+macOS%22+branch%3Amaster) |
|
2020-08-03 23:24:02 +03:00
|
|
|
| [![Repology page](https://img.shields.io/badge/Repology-page-%23005500)](https://repology.org/project/haskell:hnix/versions) | |
|
2018-04-24 07:48:19 +03:00
|
|
|
|
2018-04-03 10:33:30 +03:00
|
|
|
Haskell parser, evaluator and type checker for the Nix language.
|
2016-02-08 02:53:22 +03:00
|
|
|
|
|
|
|
## Prerequisites
|
|
|
|
|
2018-04-05 01:05:58 +03:00
|
|
|
Nix is installed and in your `$PATH`. This is so that `nix-store` can be used
|
|
|
|
for interacting with store paths, until `hnix-store` is ready.
|
2016-02-08 02:53:22 +03:00
|
|
|
|
|
|
|
## Getting Started
|
|
|
|
|
2020-04-18 11:59:05 +03:00
|
|
|
```
|
2018-04-24 07:48:19 +03:00
|
|
|
$ git clone --recursive https://github.com/haskell-nix/hnix.git
|
2016-02-08 02:53:22 +03:00
|
|
|
...
|
|
|
|
$ cd hnix
|
|
|
|
$ nix-shell
|
2020-04-18 11:22:31 +03:00
|
|
|
$ cabal v2-configure --enable-tests
|
|
|
|
$ cabal v2-build
|
|
|
|
$ cabal v2-test
|
2018-04-12 20:28:16 +03:00
|
|
|
# To run all of the tests, which takes up to a minute:
|
2020-04-18 11:22:31 +03:00
|
|
|
$ env ALL_TESTS=yes cabal v2-test
|
2018-05-15 00:47:58 +03:00
|
|
|
# To run only specific tests (see `tests/Main.hs` for a list)
|
2020-04-18 11:22:31 +03:00
|
|
|
$ env NIXPKGS_TESTS=yes PRETTY_TESTS=1 cabal v2-test
|
2018-04-03 10:33:30 +03:00
|
|
|
$ ./dist/build/hnix/hnix --help
|
2016-02-08 02:53:22 +03:00
|
|
|
```
|
2018-05-07 22:45:37 +03:00
|
|
|
|
2020-07-03 18:00:03 +03:00
|
|
|
## Using the REPL
|
|
|
|
|
|
|
|
To enter the `hnix` REPL use
|
|
|
|
|
|
|
|
```
|
|
|
|
hnix --repl
|
|
|
|
```
|
|
|
|
|
|
|
|
To evaluate an expression and make it available in the REPL
|
|
|
|
as the `input` variable use
|
|
|
|
|
|
|
|
```
|
|
|
|
hnix --eval -E '(import <nixpkgs> {}).pkgs.hello' --repl
|
|
|
|
```
|
|
|
|
|
|
|
|
Use the `:help` command for a list of all available REPL commands.
|
|
|
|
|
2018-04-19 02:28:21 +03:00
|
|
|
## Building with full debug info
|
|
|
|
|
|
|
|
To build `hnix` for debugging, and with full tracing output and stack traces,
|
|
|
|
use:
|
|
|
|
|
|
|
|
```
|
2018-05-30 22:10:31 +03:00
|
|
|
$ nix-shell
|
2020-04-18 11:56:13 +03:00
|
|
|
$ cabal v2-configure --enable-tests --enable-profiling --flags=profiling --flags=tracing
|
|
|
|
$ cabal v2-build
|
2018-05-07 22:45:37 +03:00
|
|
|
$ ./dist/build/hnix/hnix -v5 --trace <args> +RTS -xc
|
2018-04-19 02:28:21 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
Note that this will run quite slowly, but will give the most information as to
|
|
|
|
what might potentially be going wrong during parsing or evaluation.
|
|
|
|
|
2018-04-13 10:06:45 +03:00
|
|
|
## Building with benchmarks enabled
|
|
|
|
|
|
|
|
To build `hnix` with benchmarks enabled:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ nix-shell --arg doBenchmarks true
|
2020-04-18 11:56:13 +03:00
|
|
|
$ cabal v2-configure --enable-tests --enable-benchmarks
|
|
|
|
$ cabal v2-build
|
|
|
|
$ cabal v2-bench
|
2018-04-13 10:06:45 +03:00
|
|
|
```
|
|
|
|
|
2018-04-10 21:49:18 +03:00
|
|
|
## Building with profiling enabled
|
|
|
|
|
|
|
|
To build `hnix` with profiling enabled:
|
|
|
|
|
|
|
|
```
|
2018-05-30 22:10:31 +03:00
|
|
|
$ nix-shell
|
2020-04-18 11:56:13 +03:00
|
|
|
$ cabal v2-configure --enable-tests --enable-profiling --flags=profiling
|
|
|
|
$ cabal v2-build
|
2018-04-10 21:49:18 +03:00
|
|
|
$ ./dist/build/hnix/hnix <args> +RTS -p
|
|
|
|
```
|
|
|
|
|
2018-05-14 00:17:55 +03:00
|
|
|
## Building with GHCJS
|
|
|
|
|
|
|
|
From the project root directory, run:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ NIX_CONF_DIR=$PWD/ghcjs nix-build ghcjs
|
|
|
|
```
|
|
|
|
|
|
|
|
This will build an `hnix` library that can be linked to your GHCJS
|
|
|
|
application.
|
|
|
|
|
2018-07-25 20:38:11 +03:00
|
|
|
## Using the Cachix binary cache
|
|
|
|
|
|
|
|
If you're on macOS, you can use the binary cache at Cachix to avoid building
|
2018-07-25 21:52:59 +03:00
|
|
|
the specific dependencies used by hnix. Just use these commands:
|
2018-07-25 20:38:11 +03:00
|
|
|
|
2020-04-18 11:59:05 +03:00
|
|
|
```
|
|
|
|
$ nix-env -iA cachix -f https://github.com/NixOS/nixpkgs/tarball/db557aab7b690f5e0e3348459f2e4dc8fd0d9298
|
|
|
|
$ cachix use hnix
|
|
|
|
```
|
2018-07-25 20:38:11 +03:00
|
|
|
|
2018-04-04 08:57:23 +03:00
|
|
|
## How you can help
|
|
|
|
|
2018-11-18 19:44:52 +03:00
|
|
|
### Issue Tracker Backlog
|
|
|
|
|
2018-04-13 07:20:23 +03:00
|
|
|
If you're looking for a way to help out, try taking a look
|
2018-04-24 07:48:19 +03:00
|
|
|
[here](https://github.com/haskell-nix/hnix/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+no%3Aassignee).
|
2018-04-13 07:20:23 +03:00
|
|
|
When you find an issue that looks interesting to you, comment on the ticket to
|
|
|
|
let others know you're working on it; look for others who might have done the
|
|
|
|
same. You can talk with everyone live on
|
2018-05-03 21:41:49 +03:00
|
|
|
[Gitter](https://gitter.im/haskell-nix/Lobby).
|
2018-04-04 08:57:23 +03:00
|
|
|
|
|
|
|
When you're ready to submit a pull request, test it with:
|
2020-04-18 11:59:05 +03:00
|
|
|
|
2018-04-04 08:57:23 +03:00
|
|
|
```
|
2020-04-18 11:59:05 +03:00
|
|
|
$ git submodule update --init --recursive
|
|
|
|
$ nix-shell --run "LANGUAGE_TESTS=yes cabal v2-test"
|
2018-04-04 08:57:23 +03:00
|
|
|
```
|
|
|
|
|
2018-04-13 07:20:23 +03:00
|
|
|
Make sure that all the tests that were passing prior to your PR are still
|
|
|
|
passing afterwards; it's OK if no new tests are passing.
|
2018-11-18 19:44:52 +03:00
|
|
|
|
|
|
|
### Evaluating Nixpkgs with HNix
|
|
|
|
|
|
|
|
Currently the main high-level goal is to be able to evaluate all of nixpkgs. To
|
|
|
|
run this yourself, first build hnix with `nix-build`, then run the following
|
|
|
|
command:
|
|
|
|
|
|
|
|
```
|
2020-04-18 11:59:05 +03:00
|
|
|
$ ./result/bin/hnix --eval -E "import <nixpkgs> {}" --find
|
2018-11-18 19:44:52 +03:00
|
|
|
```
|