@@ -2,16 +2,53 @@
22 inputs = {
33 nixpkgs.url = "nixpkgs/nixos-unstable";
44 flake-utils.url = "flake-utils";
5+ stacklock2nix.url = "github:cdepillabout/stacklock2nix";
56 };
67
7− outputs = { self, flake-utils, nixpkgs }:
8+ outputs = { self, flake-utils, nixpkgs, stacklock2nix }:
89 let
910 supportedSystems =
1011 [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" "aarch64-linux" ];
1112 compilerVersion = "966";
1213 in flake-utils.lib.eachSystem supportedSystems (system:
13− let pkgs = import nixpkgs { inherit system; };
14+ let
15+ pkgs = import nixpkgs {
16+ inherit system;
17+ overlays = [ stacklock2nix.overlay ];
18+ };
19+ appendGhcFlags = opts: drv:
20+ pkgs.haskell.lib.appendBuildFlag drv
21+ ''--ghc-options="${builtins.concatStringsSep " " opts}"'';
22+ insaneOptimizationFlags =
23+ [ "-O2" "-fexpose-all-unfoldings" "-fspecialise-aggressively" ];
24+ justStatic = package:
25+ (pkgs.haskell.lib.overrideCabal
26+ (pkgs.haskell.lib.justStaticExecutables package)
27+ (drv: { disallowGhcReference = false; }));
1428 in {
29+ packages = {
30+ default = justStatic (pkgs.stacklock2nix {
31+ stackYaml = ./stack.yaml;
32+ baseHaskellPkgSet = pkgs.haskell.packages."ghc${compilerVersion}";
33+ additionalHaskellPkgSetOverrides = (hfinal: hprev:
34+ builtins.mapAttrs (name: value:
35+ if (builtins.tryEval (!(builtins.isAttrs value)
36+ || !(value ? pname))).value or true then
37+ value
38+ else if value ? doCheck && value.pname != "ghc" then
39+ pkgs.lib.pipe value (with pkgs.haskell.lib; [
40+ dontCheck
41+ dontHaddock
42+ doJailbreak
43+ doStrip
44+ disableLibraryProfiling
45+ disableExecutableProfiling
46+ (appendGhcFlags insaneOptimizationFlags)
47+ ])
48+ else
49+ value) hprev);
50+ }).pkgSet.project-m36-rest;
51+ };
1552 devShells.default = pkgs.mkShell {
1653 buildInputs = with pkgs; [
1754 haskell.compiler."ghc${compilerVersion}"
@@ -21,4 +58,9 @@
2158 ];
2259 };
2360 });
61+ nixConfig = {
62+ extra-substituters = [ "https://cache.garnix.io" ];
63+ extra-trusted-public-keys =
64+ [ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" ];
65+ };
2466}