2 # Reuse any local nixpkgs, at cost of reproductibility
 
   3 #inputs.nixpkgs.url = "flake:nixpkgs";
 
   4 # Can be overriden by passing --override-input nixpkgs flake:nixpkgs to nix
 
   5 inputs.nixpkgs.url = "github:NixOS/nixpkgs/8585991bfb629edda1e42c191bef935d9d70d690";
 
   6 inputs.flake-utils.url = "github:numtide/flake-utils";
 
   7 outputs = inputs: inputs.flake-utils.lib.eachDefaultSystem (system: let
 
   8   inherit (pkgs.lib) listToAttrs nameValuePair;
 
   9   pkgs = inputs.nixpkgs.legacyPackages.${system};
 
  10   ghc = null; # Use default ghc, but could have been ghc901
 
  13     then pkgs.haskellPackages
 
  14     else pkgs.haskell.packages.${ghc};
 
  15   days = [ "04" "05" "06" ];
 
  16   hs = haskellPackages.extend (with pkgs.haskell.lib;
 
  18       listToAttrs (map (day: nameValuePair
 
  19         "AoC2020${day}" (hfinal.callCabal2nix "AoC2020" (./. + "/Day"+day) {})
 
  23     devShell = hs.shellFor {
 
  24       packages = p: map (day: p."AoC2020${day}") days;
 
  28         hs.haskell-language-server
 
  38     packages = listToAttrs (map (day: nameValuePair "Day${day}" hs."AoC2020${day}") days);
 
  41       program = (pkgs.writeShellScript "run" ''
 
  43         ${pkgs.gnumake}/bin/make run
 
  46     apps = listToAttrs (map (day: nameValuePair "Day${day}" {
 
  48       program = "${packages."Day${day}"}/bin/Day";