libnix: Bindings to the nix package manager

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Use the nix package manager from Haskell. All modules are designed to be imported qualified.


[Skip to Readme]

Properties

Versions 0.2.0.0, 0.2.0.1, 0.3.0.0, 0.3.0.0, 0.4.0.1, 0.4.1.0
Change log CHANGELOG.md
Dependencies aeson (>=1.0.0.0), base (>=4.9 && <5.0), bytestring, deepseq, errors (>=2.2.0), filepath, process, text [details]
License GPL-3.0-only
Author Profpatsch
Maintainer mail@profpatsch.de
Category Foreign, Nix
Home page https://github.com/Profpatsch/libnix-haskell#readme
Bug tracker https://github.com/Profpatsch/libnix-haskell/issues
Source repo head: git clone https://github.com/Profpatsch/libnix-haskell
Uploaded by Profpatsch at 2021-11-16T11:33:14Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for libnix-0.3.0.0

[back to package description]

libnix

Haskell bindings to the nix package manager

This project aims to provide an interface to call nix functionality from the safe haven that is Haskell. As much type safety as possible should be guaranteed to the user.

The project consists of two broad steps:

  1. bindings to the command line tools
  2. bindings to the nix libraries themselves

At the moment, an beta version of 1. is implemented, together with a small number of tests to check for possible changes in the interface, which consists mainly of three functions:

parseNixExpr :: Text                 -> NixAction ParseError NixExpr
instantiate  :: NixExpr              -> NixAction InstantiateError (StorePath Derivation)
realize      :: StorePath Derivation -> NixAction RealizeError (StorePath Realized)

which do what you’d expect; and two helper functions

eval             :: NixExpr -> NixAction InstantiateError ()
parseInstRealize :: Text    -> NixAction NixError (StorePath Realized)

where parseInstRealize performs all three steps at once.

Nix Prefetch Wrappers

We implement an additional module that creates nicely typed wrappers for nix-prefetch-X tools, please see the module documentation what is supported exactly.

url :: UrlOptions -> NixAction PrefetchError (Sha256, StorePath Realized)
git :: GitOptions -> NixAction PrefetchError GitOutput

C++ bindings

The second steps would be to directly bind into the C++ library. That could either mean writing a C wrapper and using Haskell’s native FFI, or generating bindings with Hoppy, which we’d prefer. Hoppy would need to be able to handle C++ exceptions first, though.

Other nix libraries on hackage

It doesn’t look like the scope of libnix collides with any of these packages.