-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
127 lines (124 loc) · 4.22 KB
/
flake.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{
description = "website";
nixConfig = {
substituters = [
https://hydra.iohk.io
];
trusted-public-keys = [
hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=
];
bash-prompt = "\\[\\033[1m\\][dev-website]\\[\\033\[m\\]\\040\\w$\\040";
};
inputs = {
nixpkgs.follows = "haskell-nix/nixpkgs-unstable";
haskell-nix = {
url = "github:input-output-hk/haskell.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
utils.follows = "haskell-nix/flake-utils";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
slick = {
url = "github:ChrisPenner/slick?ref=51d4849e8fe3dad93ef8c10707975068f797fd28";
flake = false;
};
llvm-hs = {
url = "github:llvm-hs/llvm-hs?ref=llvm-12";
flake = false;
};
dex-lang = {
url = "github:google-research/dex-lang?ref=a80b2b0c53356817ea1252be546a9f560d4d9d9f";
flake = false;
};
};
outputs = inputs@{ self, nixpkgs, haskell-nix, utils, ... }:
utils.lib.eachDefaultSystem (system:
let
overlays = [
haskell-nix.overlay
(final: prev: {
websiteProject =
final.haskell-nix.project' {
src = pkgs.haskell-nix.haskellLib.cleanGit {
name = "website";
src = ./.;
};
compiler-nix-name = "ghc8107";
shell.tools = {
cabal = { };
haskell-language-server = { };
};
shell.buildInputs = with pkgs; [
nodePackages.serve
pandoc
nixpkgs-fmt
];
shell.exactDeps = true;
shell.additional = ps: [
ps.slick
ps.llvm-hs-pure
ps.llvm-hs
ps.dex
];
cabalProjectLocal = ''
packages:
${inputs.slick}
${inputs.llvm-hs}/llvm-hs-pure
${inputs.llvm-hs}/llvm-hs
${inputs.dex-lang}
'';
modules = [
{
packages.slick.src = inputs.slick.outPath;
packages.llvm-hs-pure.src = "${inputs.llvm-hs.outPath}/llvm-hs-pure";
packages.llvm-hs.src = "${inputs.llvm-hs.outPath}/llvm-hs";
packages.llvm-hs.components."library".build-tools = [
final.buildPackages.llvm_12
];
# packages.llvm-hs.configureFlags = [
# "--with-gcc=${final.clang_12}/bin/cc"
# "--with-ld=${final.clang_12}/bin/ld"
# ];
packages.dex.src =
final.runCommand "build-dexrt" { } ''
mkdir -p $out
cp -r ${inputs.dex-lang.outPath}/* $out
chmod u+w $out/src/lib
set -x
${final.clang_12}/bin/clang++ \
-fPIC -std=c++11 -fno-exceptions -fno-rtti \
-c -emit-llvm \
-I ${final.libpng}/include \
$out/src/lib/dexrt.cpp \
-o $out/src/lib/dexrt.bc
set +x
chmod u-w $out/src/lib/dexrt.bc
chmod u-w $out/src/lib
'';
packages.dex.doHaddock = false;
}
];
};
})
];
pkgs = import nixpkgs { inherit system overlays; inherit (haskell-nix) config; };
flake = pkgs.websiteProject.flake { };
in
flake // rec {
defaultPackage = flake.packages."website:exe:website";
apps.website = utils.lib.mkApp {
drv = defaultPackage;
exePath = "/bin/website";
};
defaultApp = apps.website;
check = pkgs.runCommand "combined-test"
{
checksss = builtins.attrValues flake.checks.${system};
} ''
echo $checksss
touch $out
'';
});
}