Skip to content

Add haskell.nix shell #1386

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions haskell.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# This file is an alternative to shell.nix that uses haskell.nix
# instead of the haskell from nixpkgs.
#
# To run a shell use the shell from this file run:
#
# nix-shell haskell.nix -A shell
#
# Significant differnces to shell.nix:
#
# * It uses the `nixpkgs-unstable` pin of nixpkgs from haskell.nix
# instead of the niv pin (this will increase the chances of getting
# a cache hit when using the haskell.nix binary cache).
#
# * Haskell.nix reads the `source-repository-package` config from
# the `cabal.project` and other info from `plan.json`. This means
# it does not depend on `nix/default.nix` and there is no list
# of the projects packages in this file to update.
#
# Maintaining this file
#
# * Bump the haskell.nix version using `niv update haskell.nix`.
# This will update the hackage snapshot used to build the
# dependencies of the project and any `tools` set to `latest` below
# will be updated to the latest version in that snapshot.
#
{ compiler-nix-name ? "ghc8104"
, withHoogle ? false
} :
let
sources = import nix/sources.nix;
haskellNix = import sources."haskell.nix" {};
pkgs = import haskellNix.sources.nixpkgs-unstable haskellNix.nixpkgsArgs;
project = pkgs.haskell-nix.cabalProject' {
inherit compiler-nix-name;
src = pkgs.haskell-nix.haskellLib.cleanGit {
name = "haskell-language-server";
src = ./.;
};
};
in project // {
shell = project.shellFor {
inherit withHoogle;
packageSetupDeps = false;
buildInputs = with pkgs; [
# Add tools from nixpkgs here
] ++ builtins.attrValues (
# Because the exe name is not the pacakge name
# we can't put `opentelemetry-extra` in the `tools`
pkgs.haskell-nix.hackage-package {
inherit compiler-nix-name;
name = "opentelemetry-extra";
version = "latest";
}).components.exes;
tools = {
# Tools from hackage (replace `latest` with a version number to pin)
cabal = "latest";
hlint = "latest";
ormolu = "latest";
stylish-haskell = "latest";
};
};
}

12 changes: 12 additions & 0 deletions nix/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@
"url": "https://github.com/hercules-ci/gitignore/archive/c4662e662462e7bf3c2a968483478a665d00e717.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"haskell.nix": {
"branch": "master",
"description": "Alternative Haskell Infrastructure for Nixpkgs",
"homepage": "https://input-output-hk.github.io/haskell.nix",
"owner": "input-output-hk",
"repo": "haskell.nix",
"rev": "5d3975e33886b2b9945b98859a4ab629b63055e1",
"sha256": "014zgqqm98zwhirlww5qkqh0lwqx2b38rx83vcnx8svkz7qgiqbj",
"type": "tarball",
"url": "https://github.com/input-output-hk/haskell.nix/archive/5d3975e33886b2b9945b98859a4ab629b63055e1.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
"branch": "master",
"description": "Easy dependency management for Nix projects",
Expand Down