A flake-parts Nix module for Haskell development
Go to file
github-actions[bot] e61c0edd77 chore(doc): Update flake.lock
Flake lock file updates:

• Updated input 'cfp':
    'github:flake-parts/community.flake.parts/76edcd33f1d9d8dc387a35d5ae7d413fde1ef94b?narHash=sha256-2orBLFCI7h9fpo9kkjRGygSZIerzuFdptSTtV9M7Npw%3D' (2024-07-06)
  → 'github:flake-parts/community.flake.parts/4b72ca8d7a37d9c64cc40863f236998d789017ed?narHash=sha256-zhqCTDr/jRbuR6jcS3AGPP/7MQXWNieYz9aJrwNVSBs%3D' (2024-07-10)
• Updated input 'cfp/haskell-flake':
    'github:srid/haskell-flake/64bd0f328e5a424b65aafdde3901b64f4f390b0f?narHash=sha256-MtatlRdAy7eWdgZI8JgW/OmY/aqF%2BSvRucqlsLHzX80%3D' (2024-07-03)
  → 'github:srid/haskell-flake/a1506861ce09cca2d233d014fd03dd97ed03e3b9?narHash=sha256-U1vZkKOy7bB/qMRwS8cz4c8sy68Jq8yzRMV4G40U3Us%3D' (2024-07-07)
• Updated input 'cfp/services-flake':
    'github:juspay/services-flake/b02b6c802548cb7814cd4d03098d1414c99652b9?narHash=sha256-vvVMtCXzCSlGnFV4pJlAsekCC72WRRM0Aa/tlkx4e4w%3D' (2024-07-06)
  → 'github:juspay/services-flake/340d1a94cc5770c9fd921371f5c642367dc2e4d0?narHash=sha256-sv6DbDQ0gYvGatAQTUeb2GR1IvIAmQxW5OXBLrBwEKc%3D' (2024-07-09)
• Updated input 'flake-parts-website':
    'github:hercules-ci/flake.parts-website/9c33cf14dd5c2b5ebd0d56f7560d59f409f53ba5?narHash=sha256-LODA4TMEqei2roAaTHz9%2BhcuY4lQv2KC84DdJf9Z05w%3D' (2024-07-06)
  → 'github:hercules-ci/flake.parts-website/62ed4f98b3709f78c4af86527b06099d2a61e9ae?narHash=sha256-7pxk8AD%2B3Dq0OXc5OqrRPPo2ofOHQ6SrWnah2%2Bh7VH4%3D' (2024-07-13)
• Updated input 'flake-parts-website/agenix-rekey':
    'github:oddlama/agenix-rekey/4551006c2807ab361ea4db5e171afb4798da4fc2?narHash=sha256-vN/pfiAzYH4i3cUb5pLqkXgPoAPtaxjUXv5aRpbKShU%3D' (2024-06-09)
  → 'github:oddlama/agenix-rekey/c071067f7d972552f5170cf8665643ed0ec19a6d?narHash=sha256-vI92Y%2Bf4iTDsoy%2Bxg0n0I/bIY1xatvZ807spIgTjTc0%3D' (2024-07-08)
• Updated input 'flake-parts-website/nix-cargo-integration':
    'github:yusdacra/nix-cargo-integration/74ce1ba52ecdc6b5a2ab845eea94bb2d80d21074?narHash=sha256-qh1Thi7tQdqSFwKUxNhlh4uog2p3DuqTw1SUZJpo1/A%3D' (2024-07-06)
  → 'github:yusdacra/nix-cargo-integration/070925af393f15d0b3895ad5d8501e6d9288bac2?narHash=sha256-P0LN%2BBNaFGE4rwp2/5PwSeNYC%2BTX/pxGQxieZc%2BC0go%3D' (2024-07-13)
• Updated input 'flake-parts-website/nix-cargo-integration/rust-overlay':
    'github:oxalica/rust-overlay/05ccbe21233d4e9110fc6428d2c3d74b430c3c69?narHash=sha256-eR5glZHS2bLpzUgTDhWGm04j%2Bj5KMYKoDsY5DXAiuKQ%3D' (2024-07-06)
  → 'github:oxalica/rust-overlay/92f0608ab66c9770e931056b1c7a1b6249dbc43a?narHash=sha256-WMwo/kZ3o2h5Bls4dEyQ3XFZ4nw2UbbOUFpq3aVlkms%3D' (2024-07-13)
• Updated input 'flake-parts-website/nix-cargo-integration/treefmt':
    'github:numtide/treefmt-nix/bdb6355009562d8f9313d9460c0d3860f525bc6c?narHash=sha256-p0B2r98UtZzRDM5miGRafL4h7TwGRC4DII%2BXXHDHqek%3D' (2024-07-02)
  → 'github:numtide/treefmt-nix/5b002f8a53ed04c1a4177e7b00809d57bd2c696f?narHash=sha256-f52x9srIcqQm1Df3T%2BxYR5P6VfdnDFa2vkkcLhlTp6U%3D' (2024-07-12)
• Updated input 'flake-parts-website/pre-commit-hooks-nix':
    'github:cachix/pre-commit-hooks.nix/0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07?narHash=sha256-F1h%2BXIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4%3D' (2024-06-24)
  → 'github:cachix/pre-commit-hooks.nix/8d6a17d0cdf411c55f12602624df6368ad86fac1?narHash=sha256-ni/87oHPZm6Gv0ECYxr1f6uxB0UKBWJ6HvS7lwLU6oY%3D' (2024-07-09)
• Updated input 'flake-parts-website/pre-commit-hooks-nix/nixpkgs-stable':
    'github:NixOS/nixpkgs/03d771e513ce90147b65fe922d87d3a0356fc125?narHash=sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90%2B%2BqRN3lukGaIk%3D' (2024-06-19)
  → 'github:NixOS/nixpkgs/194846768975b7ad2c4988bdb82572c00222c0d7?narHash=sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo%3D' (2024-07-07)
• Updated input 'flake-parts-website/std':
    'github:divnix/std/b6924a7d37a46fc1dda8efe405040e27ecf1bbd6?narHash=sha256-LcLYV5CDhIiJs3MfxGZFKsXPR4PtfnY4toZ75GM%2B2Pw%3D' (2024-05-08)
  → 'github:divnix/std/4e20f558f00bc8d52b0fadc468b872d280ca2d34?narHash=sha256-8HgfMr07vNTB2xp%2BvRBVmJ0A6ctX/oa/QqFBlqqmz4M%3D' (2024-07-06)
• Updated input 'flake-parts-website/treefmt-nix':
    'github:numtide/treefmt-nix/bdb6355009562d8f9313d9460c0d3860f525bc6c?narHash=sha256-p0B2r98UtZzRDM5miGRafL4h7TwGRC4DII%2BXXHDHqek%3D' (2024-07-02)
  → 'github:numtide/treefmt-nix/5b002f8a53ed04c1a4177e7b00809d57bd2c696f?narHash=sha256-f52x9srIcqQm1Df3T%2BxYR5P6VfdnDFa2vkkcLhlTp6U%3D' (2024-07-12)
• Updated input 'haskell-flake':
    'github:srid/haskell-flake/64bd0f328e5a424b65aafdde3901b64f4f390b0f?narHash=sha256-MtatlRdAy7eWdgZI8JgW/OmY/aqF%2BSvRucqlsLHzX80%3D' (2024-07-03)
  → 'github:srid/haskell-flake/a1506861ce09cca2d233d014fd03dd97ed03e3b9?narHash=sha256-U1vZkKOy7bB/qMRwS8cz4c8sy68Jq8yzRMV4G40U3Us%3D' (2024-07-07)
2024-07-14 00:18:11 +00:00
.github/workflows chore(ci): Add workflow_dispatch 2024-06-24 10:21:27 -04:00
.vscode Add dev flake (#179) 2023-07-03 16:56:27 -04:00
dev chore: Fix broken link 2024-06-20 16:28:11 -04:00
doc chore(doc): Update flake.lock 2024-07-14 00:18:11 +00:00
example chore(example): Update flake.lock 2024-07-06 23:01:56 -04:00
nix fix: support older nixpkgs 2024-04-25 02:19:06 -04:00
test feat: Add granular settings defaults (#275) 2024-04-20 03:44:10 -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 chore: Tag release 2024-06-24 13:16:27 -04:00
flake.nix feat: Add granular settings defaults (#275) 2024-04-20 03:44:10 -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.