{ lib, inputs, ... }: let stable-pkgs = inputs.nixos-stable.legacyPackages.x86_64-linux; unstable-pkgs = inputs.nixos-unstable.legacyPackages.x86_64-linux; inherit (unstable-pkgs.haskell.lib.compose) overrideCabal; includePatterns = [ ".hs" ".cabal" "LICENSE" "default.nix" "CHANGELOG.md" ]; cleanCabalPackage = source: { extraPatterns ? [ ], overrides ? _: { }, }: hpkgs: let cleanSource = lib.sourceFilesBySuffices source (includePatterns ++ extraPatterns); in lib.pipe { } [ (hpkgs.callPackage source) (overrideCabal (old: { src = cleanSource; preConfigure = '' echo "Checking that default.nix is up-to-date …" ${lib.getExe hpkgs.cabal2nix} . > fresh-default.nix cp ${cleanSource}/default.nix . chmod u+w default.nix ${lib.getExe unstable-pkgs.nixfmt} fresh-default.nix default.nix ${stable-pkgs.diffutils}/bin/diff -w default.nix fresh-default.nix echo "default.nix confirmed to be up-to-date." ''; } // overrides old)) hpkgs.buildFromCabalSdist ]; haskellPackagesOverlay = final: _prev: lib.mapAttrs (_: package: package final) myHaskellPackages // { streamly = final.streamly_0_9_0; }; selectHaskellPackages = attrs: lib.mapAttrs (name: _: attrs.${name}) myHaskellPackages; myHaskellPackages = { wizards-dialog = cleanCabalPackage ./wizards-dialog { }; rssfeeds = cleanCabalPackage ./rssfeeds { }; kassandra = cleanCabalPackage ./kassandra/kassandra { overrides = _: { doHaddock = false; }; }; kassandra-standalone = cleanCabalPackage ./kassandra/standalone { }; nixpkgs-bot = cleanCabalPackage ./nixpkgs-bot { }; builders-configurator = cleanCabalPackage ./builders-configurator { }; status-script = cleanCabalPackage ./status-script { overrides = _: { buildDepends = builtins.attrValues { inherit (stable-pkgs) git khal playerctl notmuch jq tailscale; inherit (unstable-pkgs) nix nix-diff; }; }; }; }; hpkgs = unstable-pkgs.haskellPackages.override { overrides = haskellPackagesOverlay; }; packages = selectHaskellPackages hpkgs; in { flake = { lib = { inherit selectHaskellPackages; }; overlays = { inherit haskellPackagesOverlay; }; }; perSystem = { inherit packages; }; }