nixpkgs/pkgs/top-level
Gabriel Gonzalez 38f1d70c01 Add Nixpkgs support for Dhall
One of the motivations for this change is the following Discourse
discussion:

https://discourse.dhall-lang.org/t/offline-use-of-prelude/137

Many users have requested Dhall support for "offline" packages
that can be fetched/built/installed using ordinary package
management tools (like Nix) instead of using Dhall's HTTP import system.
I will continue to use the term "offline" to mean Dhall package
builds that do not use Dhall's language support for HTTP imports (and
instead use the package manager's support for HTTP requests, such
as `pkgs.fetchFromGitHub`)

The goal of this change is to document what is the idiomatic way to
implement "offline" Dhall builds by implementing Nixpkgs support
for such builds.  That way when other package management tools ask
me how to package Dhall with their tools I can refer them to how it
is done in Nixpkgs.

This change contains a fully "offline" build for the largest Dhall
package in existence, known as "dhall-packages" (not to be confused
with `dhallPackages`, which is our Nix attribute set containing
Dhall packages).

The trick to implementing offline builds in Dhall is to take
advantage of Dhall's support for semantic integrity checks.  If an
HTTP import is protected by an integrity check and a cached build
product matches the integrity check then the HTTP import is never
resolved and the expression is instead fetched from cache.

By "installing" dependencies in a pre-seeded and isolated cache
we can replace remote HTTP imports with dependencies that have
been built and supplied by Nix instead.

The offline nature of the builds are enforced by compiling the
Haskell interpreter with the `-f-with-http` flag, which disables
the interpreter's support for HTTP imports.  If a user forgets
to supply a necessary dependency as a Nix build product then the
build fails informing them that HTTP imports are disabled.

By default, built packages are "binary distributions", containing
just a cache product and a Dhall expression which can be used to
resolve the corresponding cache product.

Users can also optionally enable a "source distribution" of a package
which already includes the equivalent fully-evaluated Dhall code (for
convenience), but this is disabled by default to keep `/nix/store`
utilization as compact as possible.
2020-02-11 22:02:53 -08:00
..
aliases.nix pinentry_qt5: alias to pinentry-qt 2020-02-11 16:10:01 +01:00
all-packages.nix Add Nixpkgs support for Dhall 2020-02-11 22:02:53 -08:00
beam-packages.nix lfe: 1.2.1 -> 1.3 2020-02-10 20:03:47 +01:00
config.nix
coq-packages.nix coqPackages_8_11.coq: 8.11+β1 → 8.11.0 2020-01-31 14:09:51 +01:00
darwin-packages.nix xcode: Add more hashes, and fix some old ones 2020-01-03 15:19:08 -05:00
default.nix
dhall-packages.nix Add Nixpkgs support for Dhall 2020-02-11 22:02:53 -08:00
dotnet-packages.nix
emacs-packages.nix
emscripten-packages.nix Fix package metadata like version and homepage 2019-11-07 17:20:33 +01:00
haskell-packages.nix ghc: add 8.10.1-alpha2 2019-12-27 20:58:23 +01:00
haxe-packages.nix
impure.nix Revert "stdenv/check-meta: getEnv if the attribute is unset (#72376)" (#72752) 2019-11-03 20:38:35 -05:00
java-packages.nix
lua-packages.nix Merge remote-tracking branch 'upstream/master' into wrapper-pname-support 2019-11-24 17:25:07 +00:00
make-tarball.nix Fix 'nix flake check' 2020-02-10 16:26:33 +01:00
metrics.nix
ocaml-packages.nix ocamlPackages.npy: init at unstable-2019-04-02 2020-02-11 07:33:42 +01:00
perl-packages.nix Merge pull request #65397 from mmilata/sympa 2020-02-10 01:23:45 +01:00
php-packages.nix phpPackages.pdo_sqlsrv: 5.6.1 -> 5.8.0 2020-01-31 21:37:33 -05:00
pure-packages.nix octaveHg: drop 2020-02-09 19:24:18 +01:00
python-packages.nix gunicorn: add 19.x branch for python2.7 support 2020-02-10 19:26:21 -08:00
release-cross.nix Merge branch 'ghcjs-cross-without-cc-19.09' into ghcjs-cross-without-cc 2019-12-24 17:55:35 -05:00
release-lib.nix
release-python.nix
release-small.nix release.nix and release-small.nix: remove unar, fixes #76927 2020-01-13 15:53:49 +01:00
release.nix Fix 'nix flake check' 2020-02-10 16:26:33 +01:00
ruby-packages.nix rubyPackages: update 2020-02-09 09:18:47 +01:00
splice.nix
stage.nix symlinkJoin: fix cross 2019-12-25 12:17:09 -05:00
static.nix gcc5: remove 2020-01-28 20:11:00 +01:00
unix-tools.nix
wine-packages.nix