Skip to content
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

build: add flake.nix #533

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
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
60 changes: 60 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

47 changes: 47 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
description = "Generate Nix build instructions from a Cabal file";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";

flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};

outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system: let

pkgs = nixpkgs.legacyPackages.${system};

ghc8107 = pkgs.haskell.packages."ghc8107";

# modifier used in haskellPackages.developPackage
myModifier = hsPkgs: drv:
pkgs.haskell.lib.addBuildTools drv ([
hsPkgs.cabal-install
hsPkgs.haskell-language-server
]);

mkPackage = hsPkgs:
hsPkgs.developPackage {
root = pkgs.lib.cleanSource ./. ;
name = "cabal2nix";
returnShellEnv = false;
withHoogle = true;
modifier = myModifier hsPkgs;
};

in {
packages = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't want a flake, if any, to expose a cabal2nix package. The supported and maintained ways to get cabal2nix are hackage and nixpkgs. If you want something closer to HEAD, use haskellPackages.cabal2nix-unstable or override it yourself.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like having the possibility to build in a sandbox from scratch (i.e. more powerful than what cabal does). It helps me check it really works. Could be useful in a CI too.
I can remove it if you dont like it.

cabal2nix = self.packages.${system}.cabal2nix-8107;
cabal2nix-8107 = mkPackage ghc8107;
};

devShell = self.packages.${system}.cabal2nix.envFunc {};

defaultPackage = self.packages.${system}.cabal2nix;
});
}
38 changes: 8 additions & 30 deletions shell.nix
Original file line number Diff line number Diff line change
@@ -1,31 +1,9 @@
{ pkgs ? import <nixpkgs> {} }:

(import (
let
haskellPackages = pkgs.haskellPackages;
ghc = haskellPackages.ghcWithHoogle (hps: [
hps.ansi-wl-pprint
hps.distribution-nixpkgs
hps.hackage-db
hps.hopenssl
hps.hpack
hps.language-nix
hps.lens
hps.optparse-applicative
hps.pretty
hps.split
hps.yaml
hps.monad-par
hps.monad-par-extras
hps.tasty
hps.tasty-golden
]);

in pkgs.stdenv.mkDerivation {
name = "shell";
buildInputs = [
ghc
haskellPackages.cabal-install
haskellPackages.haskell-language-server
(pkgs.lib.getLib pkgs.openssl)
];
}
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash; }
) {
src = ./.;
}).shellNix