flake-parts
Nix module for Haskell development
Flake lock file updates: • Updated input 'cfp': 'github:flake-parts/community.flake.parts/d4096a735618337db3d2869de83849cc7bb9989b?narHash=sha256-6FSuhdg6wRBEXhV4PSaXvgeG5XRgcygy4HhrDn0tlM4%3D' (2024-06-22) → 'github:flake-parts/community.flake.parts/c246ed26cdfa351dd32e577776d0742fabd83589?narHash=sha256-SK9zTPNFTExIKo8ea%2B3PAzxkKcveuteMDtTkEEvKebM%3D' (2024-06-27) • Updated input 'cfp/haskell-flake': 'github:srid/haskell-flake/3f76199d42d55e3a36bf8e8e0544e715d6a3f007?narHash=sha256-6CToXT/jcbYBi3EMAZZtyPj14NsMbdAwq%2BZeQtfu5P0%3D' (2024-06-20) → 'github:srid/haskell-flake/dfea80e8a907a7818f11090788f84f1a62985694?narHash=sha256-ytIvs6dq1dD3eicwhmqMyhIDH52DfqhOiCpmJbjBYVI%3D' (2024-06-24) • Updated input 'cfp/hercules-ci-effects': 'github:hercules-ci/hercules-ci-effects/0ab08b23ce3c3f75fe9a5598756b6fb8bcf0b414?narHash=sha256-03rLBd/lKecgaKz0j5ESUf9lDn5R0SJatZTKLL5unWE%3D' (2024-06-10) → 'github:hercules-ci/hercules-ci-effects/11e4b8dc112e2f485d7c97e1cee77f9958f498f5?narHash=sha256-YNkUMcCUCpnULp40g%2BsvYsaH1RbSEj6s4WdZY/SHe38%3D' (2024-06-24) • Updated input 'cfp/nixos-flake': 'github:srid/nixos-flake/6335b2f05f007b95ac2438b0a55498f9f20e73f7?narHash=sha256-A3JUcPH00buqBgjmi0lWUZIql9%2B8Y7CMSXGoUXcm%2Byk%3D' (2024-06-22) → 'github:srid/nixos-flake/32e6c1b3d311aca92d302cebc4ecef84a01df69a?narHash=sha256-hjVTFAL9WnNbcIXXWhU/a/Q2oFrDDJmCaKqkSiYf5YE%3D' (2024-06-27) • Updated input 'cfp/services-flake': 'github:juspay/services-flake/c371cd53829e973a7dd0d065d183c68b26203c27?narHash=sha256-BHiV/z8pufVLi7ibDXbkYWBQh%2BP2fKyutp%2Bch8%2BiRPc%3D' (2024-06-21) → 'github:juspay/services-flake/f276f5985a718f89e997b136299aef65a24a3ec6?narHash=sha256-DGBi9F0V7ojhZJLZzLI7Ad4dF79DS8hjcJFTQcltpdA%3D' (2024-06-25) • Updated input 'flake-parts-website': 'github:hercules-ci/flake.parts-website/21e34b7855974026e33f1f4833d19ec3867f8f8c?narHash=sha256-va%2B220WFHXVioP1fwP08AdeP0b/raVcAIcKbtDuGXP4%3D' (2024-06-22) → 'github:hercules-ci/flake.parts-website/386446e5d5c21c904cd388136b0541301732f164?narHash=sha256-IWurgFdygec4RcNgL%2BVPu97FYVr/Fp%2BoC8azWq6kB2s%3D' (2024-06-29) • Updated input 'flake-parts-website/hercules-ci-effects': 'github:hercules-ci/hercules-ci-effects/0ab08b23ce3c3f75fe9a5598756b6fb8bcf0b414?narHash=sha256-03rLBd/lKecgaKz0j5ESUf9lDn5R0SJatZTKLL5unWE%3D' (2024-06-10) → 'github:hercules-ci/hercules-ci-effects/11e4b8dc112e2f485d7c97e1cee77f9958f498f5?narHash=sha256-YNkUMcCUCpnULp40g%2BsvYsaH1RbSEj6s4WdZY/SHe38%3D' (2024-06-24) • Updated input 'flake-parts-website/nix-cargo-integration': 'github:yusdacra/nix-cargo-integration/1b6813a0b86878118f92291cff2e314945e4e8f7?narHash=sha256-lMITB8KabGyvcqs5wVfEsnZ/xJjuMG0mZ5bFeIpct/c%3D' (2024-06-22) → 'github:yusdacra/nix-cargo-integration/13a25422b2071e5d1bb1ed072eecc407362d51ac?narHash=sha256-sfqb6iQqzL2VRM/p39jJxKoCl4bbEnmGxLg5UUdvSzI%3D' (2024-06-29) • Updated input 'flake-parts-website/nix-cargo-integration/rust-overlay': 'github:oxalica/rust-overlay/ff019b65a656d36dca3e57b43c40c44eec7852c5?narHash=sha256-ZDS8x9XpFeSBs9gMTHoujKWPn%2Bi9ecqE9NWEUF07Yuc%3D' (2024-06-22) → 'github:oxalica/rust-overlay/5be53be9e5c766fc72fc5d65ba8a566cc0c3217f?narHash=sha256-LBfULF%2B2sCaWmkjmj1LkkGrAS/E9ZdXU1A5wWKjt9p0%3D' (2024-06-29) • Updated input 'flake-parts-website/nix-cargo-integration/treefmt': 'github:numtide/treefmt-nix/68eb1dc333ce82d0ab0c0357363ea17c31ea1f81?narHash=sha256-ULzoKzEaBOiLRtjeY3YoGFJMwWSKRYOic6VNw2UyTls%3D' (2024-06-16) → 'github:numtide/treefmt-nix/065a23edceff48f948816b795ea8cc6c0dee7cdf?narHash=sha256-9T9mSY35EZSM1KAwb7K9zwQ78qTlLjosZgtUGnw4rn4%3D' (2024-06-24) • Updated input 'flake-parts-website/pre-commit-hooks-nix': 'github:cachix/pre-commit-hooks.nix/8cd35b9496d21a6c55164d8547d9d5280162b07a?narHash=sha256-RTyqP4fBX2MdhNuMP%2BfnR3lIwbdtXhyj7w7fwtvgspc%3D' (2024-06-20) → 'github:cachix/pre-commit-hooks.nix/0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07?narHash=sha256-F1h%2BXIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4%3D' (2024-06-24) • Updated input 'flake-parts-website/pre-commit-hooks-nix/nixpkgs-stable': 'github:NixOS/nixpkgs/842253bf992c3a7157b67600c2857193f126563a?narHash=sha256-JHuXsrC9pr4kA4n7LuuPfWFJUVlDBVJ1TXDVpHEuUgM%3D' (2024-06-15) → 'github:NixOS/nixpkgs/03d771e513ce90147b65fe922d87d3a0356fc125?narHash=sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90%2B%2BqRN3lukGaIk%3D' (2024-06-19) • Updated input 'flake-parts-website/treefmt-nix': 'github:numtide/treefmt-nix/68eb1dc333ce82d0ab0c0357363ea17c31ea1f81?narHash=sha256-ULzoKzEaBOiLRtjeY3YoGFJMwWSKRYOic6VNw2UyTls%3D' (2024-06-16) → 'github:numtide/treefmt-nix/065a23edceff48f948816b795ea8cc6c0dee7cdf?narHash=sha256-9T9mSY35EZSM1KAwb7K9zwQ78qTlLjosZgtUGnw4rn4%3D' (2024-06-24) • Updated input 'haskell-flake': 'github:srid/haskell-flake/3f76199d42d55e3a36bf8e8e0544e715d6a3f007?narHash=sha256-6CToXT/jcbYBi3EMAZZtyPj14NsMbdAwq%2BZeQtfu5P0%3D' (2024-06-20) → 'github:srid/haskell-flake/dfea80e8a907a7818f11090788f84f1a62985694?narHash=sha256-ytIvs6dq1dD3eicwhmqMyhIDH52DfqhOiCpmJbjBYVI%3D' (2024-06-24) |
||
---|---|---|
.github/workflows | ||
.vscode | ||
dev | ||
doc | ||
example | ||
nix | ||
test | ||
.envrc | ||
.gitignore | ||
CHANGELOG.md | ||
flake.nix | ||
justfile | ||
LICENSE | ||
README.md |
haskell-flake - Manage Haskell projects conveniently with Nix
![](/srid/haskell-flake/media/commit/73fd4cdb037d1a37065d7d016533d9856d8e58d4/doc/haskell-flake.webp)
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.