# Horizon Haskell Platform Core [horizon-haskell.net](https://horizon-haskell.net). Horizon is a haskell package set targetting new builds of GHC. This is the core subset required to bootstrap horizon-gen-nix. ## Package Set Policy This package set has the following policy: * GHC will advance as often as possible. * Nonversioned locations (git, unversioned tarballs) are permitted to allow GHC to advance. * The following applications must always build: * cabal-install * cabal2nix * dhall * dhall-docs * dhall-nixpkgs * foliage * horizon-gen-nix * hpack * jailbreak-cabal * sydtest * The following applications are scheduled to be added as requirements to this set. * flake-to-gitlab-ci * feedback ## Updating the Package Set Generating the nix expressions for the package set is a two step process. 1. Edit the `horizon.dhall` file. 2. Generate the nix expressions with `nix run develop/#horizon-gen-nix`. You can edit the `horizon.dhall` file in one of two ways: manually using a text editor, or programatically using `horizon-shell`. ### Using horizon-shell. To use `horizon-shell`. ``` nix run develop/#horizon-shell ``` This is a haskell interpreter with a few shortcut functions available. Running `tryToUpgradeEverything` will poll hackage for any potential updates and add them to the dhall file. This will only modify the dhall, not the nix expressions. You must remember to run `nix run develop/#horizon-gen-nix` afterwards. To quickly add a new package to the dhall, use the `addHackage` function. For example `addHackage "optics"`. ### GHC ``` nix-prefetch-git https://gitlab.haskell.org/ghc/ghc --fetch-submodules > ghc.json ``` ## Tweaking & Hacking If you need to do additional manual overrides to the nix code, such as `addPkgconfigDepends`, edit the `configuration/common.nix` overlay, which is applied over the generated derivations. If you need to nullify libraries, use the `configuration/hacking.nix` overlay. Try to leave a note as to why this library has been nullified. ## Feedback To build all packages, run ``` nix run develop/#feedback -- build ``` ## Hoogle To run a hoogle server containing the entire package set. Do ``` nix run .#run-hoogle ```