]> Git — Sourcephile - julm/AoC-2020.git/blob - flake.nix
add Day07
[julm/AoC-2020.git] / flake.nix
1 {
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
11 haskellPackages =
12 if ghc == null
13 then pkgs.haskellPackages
14 else pkgs.haskell.packages.${ghc};
15 days = [ "04" "05" "06" "07" ];
16 hs = haskellPackages.extend (with pkgs.haskell.lib;
17 hfinal: hprev:
18 listToAttrs (map (day: nameValuePair
19 "AoC2020${day}" (hfinal.callCabal2nix "AoC2020" (./. + "/Day"+day) {})
20 ) days)
21 );
22 in rec {
23 devShell = hs.shellFor {
24 packages = ps: map (day: ps."AoC2020${day}") days;
25 withHoogle = false;
26 nativeBuildInputs = [
27 hs.cabal-install
28 hs.haskell-language-server
29 #hs.hpc
30 ];
31 buildInputs = [
32 #hs.ghcid
33 #hs.ormolu
34 #hs.hlint
35 #pkgs.nixpkgs-fmt
36 ];
37 };
38 packages = listToAttrs (map (day: nameValuePair "Day${day}" hs."AoC2020${day}") days);
39 defaultApp = {
40 type = "app";
41 program = (pkgs.writeShellScript "run" ''
42 cd ${inputs.self}
43 ${pkgs.gnumake}/bin/make run
44 '').outPath;
45 };
46 apps = listToAttrs (map (day: nameValuePair "Day${day}" {
47 type = "app";
48 program = "${packages."Day${day}"}/bin/Day";
49 }) days);
50 }
51 );
52 }