{
inputs = {
nixpkgs.url = "flake:nixpkgs";
pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = inputs:
let
pkg = "symantic-base";
lib = inputs.nixpkgs.lib;
forAllSystems = f: lib.genAttrs lib.systems.flakeExposed (system: f rec {
inherit system;
pkgs = inputs.nixpkgs.legacyPackages.${system};
haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; hfinal: hsuper: {
${pkg} = buildFromSdist (hfinal.callCabal2nix pkg ./. { });
});
});
in
rec {
# nix -L build
defaultPackage = forAllSystems ({ haskellPackages, ... }: haskellPackages.${pkg});
# nix -L develop or direnv allow
devShell = forAllSystems ({ pkgs, haskellPackages, system, ... }:
haskellPackages.shellFor {
packages = ps: [ ps.${pkg} ];
nativeBuildInputs = [
haskellPackages.cabal-install
haskellPackages.ghcid
haskellPackages.haskell-language-server
haskellPackages.hlint
pkgs.git-chglog
pkgs.reuse
];
withHoogle = false;
inherit (checks.${system}.pre-commit-check) shellHook;
});
# nix flake check
checks = forAllSystems (args: with args; {
pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
src = ./.;
#settings.ormolu.cabalDefaultExtensions = true;
settings.ormolu.defaultExtensions = [
"ImportQualifiedPost"
"TypeApplications"
];
hooks = {
hlint.enable = true;
nixpkgs-fmt.enable = true;
fourmolu.enable = true;
cabal-fmt.enable = true;
};
};
});
};
}