- Notifications
You must be signed in to change notification settings - Fork36
Turn opam-based OCaml projects into Nix derivations
License
tweag/opam-nix
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Turn opam-based OCaml projects intoNix derivations,automatically resolving both OCaml and system dependencies.
opam-nix
can build packages
- from
opam
anddune-project
files, - for Linux and macOS,
- on x86_64 and aarch64 (including M1 macs),
- using a compiler fromnixpkgs or fromopam-repository,
- with either dynamic or static linking.
It also comes with the power of Nix, allowing you to effortlessly managemultiple projects with different dependency versions, override dependencies,cache builds, and more.
For a quick introduction toopam-nix
and a guide to get you started, readthis blog post on the Tweag blog.
opam-nix
comes with some templates that can help you package opam packages with Nix.
Note
All of these templates assume that you already have an OCamlproject packaged with opam, and just want to package it with Nix. If you'restarting from scratch, you have to set up the opam files separately.
- A simple package build, no frills:
nix flake init -t github:tweag/opam-nix
- A more featured flake, building an executable and providing a shell in which you can conveniently work on it:
nix flake init -t github:tweag/opam-nix#executable
- Build multiple packages from the same workspace, and have a shell in which you can work on them:
nix flake init -t github:tweag/opam-nix#multi-package
Note
If you're using Git, you should
git add flake.nix
after initializing, as Nix operates on the git index contents.
There are also some examples which can give you some ideas of what is possible withopam-nix
:
- Building a package from opam-repository
- Building a package from a custom github repository
- Building a package from a multi-package github repository with submodules
- Building a Coq package
- Building a static version of a package using compiler from nixpkgs
- Building a static version of a package using the compiler from opam
- Building a GUI package
- Building the entirety of Tezos
All examples are checks and packages, so you can do e.g.nix build github:tweag/opam-nix#opam-ed
to try them out individually, ornix flake check github:tweag/opam-nix
to build them all.
opam-nix
provides all packages fromopam-repository
in itslegacyPackages
flake output.You can use this to quickly check out some package, or get a shell with particular version without messing with opam switches.
For example:
nix build 'github:tweag/opam-nix#utop."2.10.0"'
to build a specific version of utop (available in./result
),nix shell github:tweag/opam-nix#camyll.latest
to get a shell with the latest version ofcamyll
.
Complete documentation foropam-nix
is available in theDOCUMENTATION.md file.
You can reach out to us via theDiscussions page or directly to the maintainervia email.
About
Turn opam-based OCaml projects into Nix derivations