A flake-parts Nix module for Haskell development
Go to file
github-actions[bot] a6631d0324 example: Update flake.lock
Flake lock file updates:

• Updated input 'haskell-flake':
    'github:srid/haskell-flake/10c49135759d45f1e2619b0321d7ad8a90ccf7c1' (2024-03-14)
  → 'github:srid/haskell-flake/785956b3d77cf5e9ed304cd6514ad2f45750188e' (2024-03-29)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/9af9c1c87ed3e3ed271934cb896e0cdd33dae212' (2024-03-15)
  → 'github:nixos/nixpkgs/807c549feabce7eddbf259dbdcec9e0600a0660d' (2024-03-29)
2024-08-04 14:37:30 -04:00
.github/workflows ci: Use nixci's github actions matrix generator (#280) 2024-03-25 10:26:26 -04:00
.vscode Add dev flake (#179) 2023-07-03 16:56:27 -04:00
dev dev: explicitly use haskell-flake input 2024-03-27 15:27:24 -04:00
doc docs: Update buildFromSdist default 2024-03-29 12:25:10 -04:00
example example: Update flake.lock 2024-08-04 14:37:30 -04:00
nix buildFromSdist: deal with breakage of removeReferencesTo 2024-03-29 12:21:55 -04:00
test Add otherOverlays option (#277) 2024-03-27 15:39:41 -04:00
.envrc envrc: reload on dev/flake.nix change 2024-03-27 15:26:59 -04:00
.gitignore Add dev flake (#179) 2023-07-03 16:56:27 -04:00
CHANGELOG.md changelog: edit 2024-03-29 12:10:33 -04:00
flake.nix Add otherOverlays option (#277) 2024-03-27 15:39:41 -04:00
justfile Nixify rundoc.sh 2024-02-29 17:47:17 -05:00
LICENSE Initial commit 2022-05-30 09:01:58 -04:00
README.md readme: add zulip badge 2024-02-21 12:12:33 -05:00

project chat Harmeless Code of Conduct

haskell-flake - Manage Haskell projects conveniently with Nix

There are several ways to manage Haskell packages using Nix with varying degrees of integration. haskell-flake makes Haskell development, packaging and deployment with Nix flakes a lot simpler than other existing approaches. This project is set up as a modern flake-parts module to integrate easily into other Nix projects and shell development environments in a lightweight and modular way.

To see more background information, guides and best practices, visit https://community.flake.parts/haskell-flake

Caveat: haskell-flake only supports the Haskell package manager Cabal, so your project must have a top-level .cabal file (single package project) or a cabal.project file (multi-package project).

Getting started

The minimal changes to your flake.nix to introduce the haskell-flake and flake-parts modules will look similar to:

# file: flake.nix
{
  inputs = {
    ...
    flake-parts.url = "github:hercules-ci/flake-parts";
    haskell-flake.url = "github:srid/haskell-flake";
  };

  outputs = inputs:
    inputs.flake-parts.lib.mkFlake { inherit inputs; } {
      systems = [ "x86_64-linux", ... ];
      imports = [
        ...
        inputs.haskell-flake.flakeModule
      ];
      perSystem = { self', system, lib, config, pkgs, ... }: {
        haskellProjects.default = {
          # basePackages = pkgs.haskellPackages;

          # Packages to add on top of `basePackages`, e.g. from Hackage
          packages = {
            aeson.source = "1.5.0.0" # Hackage version
          };

          # my-haskell-package development shell configuration
          devShell = {
            hlsCheck.enable = false;
          };

          # What should haskell-flake add to flake outputs?
          autoWire = [ "packages" "apps" "checks" ]; # Wire all but the devShell
        };

        devShells.default = pkgs.mkShell {
          name = "my-haskell-package custom development shell";
          inputsFrom = [
            ...
            config.haskellProjects.default.outputs.devShell
          ];
          nativeBuildInputs = with pkgs; [
            # other development tools.
          ];
        };
      };
    };
}

haskell-flake scans your folder automatically for a .cabal or cabal.project file. In this example an imaginary my-haskell-package.cabal project is used.

To see in more detail how to use haskell-flake in a realistic Haskell project with several other development tools, take a look at the corresponding Haskell single-package project Nix template and this Haskell multi-package project Nix example.

Documentation

https://community.flake.parts/haskell-flake

Discussion

Zulip is the primary venue for discussion; we also have Github Discussions enabled.