/
default.nix
36 lines (30 loc) · 997 Bytes
/
default.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{ pkgs ? import (fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/80738ed9dc0ce48d7796baed5364eef8072c794d.tar.gz";
sha256 = "0anmvr6b47gbbyl9v2fn86mfkcwgpbd5lf0yf3drgm8pbv57c1dc";
}) {}
}:
let
inherit (pkgs) lib;
hpkgs = pkgs.haskellPackages.extend extension;
days = lib.filter (day: builtins.pathExists (./. + "/${day}")) (map (n: "aoc" + toString n) (lib.range 1 25));
extension = self: super: lib.genAttrs days (name:
self.callCabal2nix name (lib.sourceByRegex (./. + "/${name}") [
"^src.*$"
"^input$"
"^letters$"
"^.*\\.cabal$"
]) {}
);
packages = lib.genAttrs days (name: hpkgs.${name});
combinedBinary = pkgs.writeScriptBin "aoc" (''
#!${pkgs.stdenv.shell}
'' + lib.concatMapStrings (day: ''
${packages.${day}}/bin/${day}
'') days);
combined = pkgs.symlinkJoin {
name = "aoc";
paths = [combinedBinary] ++ lib.attrValues packages;
};
in combined // packages // {
inherit pkgs lib hpkgs;
}