3     nixpkgs.url = "flake:nixpkgs";
 
   4     git-hooks.url = "github:cachix/git-hooks.nix";
 
   5     git-hooks.inputs.nixpkgs.follows = "nixpkgs";
 
   6     symantic-base = { url = "git://git.sourcephile.fr/haskell/symantic-base"; flake = false; };
 
  11       lib = inputs.nixpkgs.lib;
 
  12       fileInputs = with lib.fileset; toSource {
 
  19           (fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
 
  20           (fileFilter (file: lib.any file.hasExt [ "hs" "golden" ]) ./tests)
 
  23       perSystem = f: lib.genAttrs lib.systems.flakeExposed (system: f rec {
 
  25         pkgs = inputs.nixpkgs.legacyPackages.${system};
 
  26         haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; finalHaskellPkgs: previousHaskellPkgs: {
 
  27           ${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
 
  28           symantic-base = finalHaskellPkgs.callCabal2nix "symantic-base" inputs.symantic-base { };
 
  29           mvc = dontCheck (doJailbreak (unmarkBroken hsuper.mvc));
 
  30           mvc-updates = dontCheck (doJailbreak (unmarkBroken (
 
  31             appendPatch hsuper.mvc-updates ./0001-mvc-updates-fix-L.pretraverseM.patch
 
  38       packages = perSystem ({ haskellPackages, ... }: {
 
  39         default = haskellPackages.${pkg};
 
  41       # nix -L develop  or  direnv allow
 
  42       devShells = perSystem ({ pkgs, haskellPackages, system, ... }: {
 
  44           haskellPackages.shellFor {
 
  45             packages = ps: [ ps.${pkg} ];
 
  47               haskellPackages.cabal-fmt
 
  48               haskellPackages.cabal-install
 
  50               haskellPackages.haskell-language-server
 
  56             inherit (checks.${system}.git-hooks-check) shellHook;
 
  60       checks = perSystem (args: with args; {
 
  61         git-hooks-check = inputs.git-hooks.lib.${system}.run {
 
  64             cabal-fmt.enable = true;
 
  65             fourmolu.enable = true;
 
  67             nixpkgs-fmt.enable = true;
 
  68             ormolu.settings.cabalDefaultExtensions = true;
 
  69             ormolu.settings.defaultExtensions = [
 
  75               entry = "${pkgs.reuse}/bin/reuse lint";
 
  76               pass_filenames = false;