{ description = "Haskell file poger (Effective Haskell)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, flake-utils, pre-commit-hooks }: flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: let pkgs = nixpkgs.legacyPackages.${system}; overlay = final: prev: { hcat = final.callCabal2nix "hcat" ./. { }; }; haskellPackages = pkgs.haskell.packages.ghc924.extend overlay; in { packages.default = haskellPackages.hcat; apps = { # run with: nix run #.hcat hcat = { type = "app"; program = "${self.packages.${system}.default}/bin/hcat"; }; # run with: nix run default = self.apps.${system}.hcat; }; checks = { pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; settings = { ormolu.defaultExtensions = [ "GHC2021" ]; }; tools.fourmolu = haskellPackages.fourmolu; hooks = { nixfmt.enable = true; fourmolu.enable = true; hpack.enable = true; hlint.enable = true; doctest = { enable = false; name = "Run documentation tests"; entry = "${haskellPackages.doctest}/bin/doctest src app"; files = "\\.l?hs$"; pass_filenames = false; }; }; }; }; devShells.default = haskellPackages.shellFor { inherit (self.checks.${system}.pre-commit-check) shellHook; packages = p: [ p.hcat ]; withHoogle = true; nativeBuildInputs = with pkgs; [ haskellPackages.haskell-language-server haskellPackages.fourmolu haskellPackages.hspec-discover haskellPackages.doctest cabal-install ghcid nixfmt hpack hlint ]; }; }); }