-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdefault.nix
57 lines (52 loc) · 1.78 KB
/
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
let
nixpkgs =
# updated 28/08/20
builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs-channels/archive/c59ea8b.tar.gz";
sha256 = "1ak7jqx94fjhc68xh1lh35kh3w3ndbadprrb762qgvcfb8351x8v";
};
config = {
packageOverrides = pkgs: rec {
elm =
import ./nix/client.nix { inherit nixpkgs; };
# Build docker container
# Using staticaly liked version
# This makes a huge difference in container size
# - Dynamically linked build container: 664M
# - Statically linked build container: 12M
docker-container =
pkgs.dockerTools.buildImage {
name = "planning-game";
tag = "latest";
extraCommands = ''
ln -s ${haskellPackages.planningGame-mini}/bin/planning-game ./planning-game
cp -r ${elm}/public ./public
'';
config.Cmd = [ "${haskellPackages.planningGame-mini}/bin/planning-game" "-qg" ];
};
haskellPackages =
pkgs.haskellPackages.override {
overrides = haskellPackagesNew: haskellPackagesOld: rec {
planningGame =
haskellPackagesNew.callPackage ./nix/server.nix {};
# statically liked version (used for docker)
planningGame-mini =
pkgs.haskell.lib.justStaticExecutables
(haskellPackagesNew.callPackage ./nix/server.nix {});
};
};
};
};
pkgs = import nixpkgs { inherit config; };
in
with pkgs;
rec {
server = haskellPackages.planningGame;
server-mini = haskellPackages.planningGame-mini;
client = elm;
docker = docker-container;
shell = mkShell {
inputsFrom = [ server.env client ];
buildInputs = [ haskellPackages.ghcid elmPackages.elm haskellPackages.hlint ];
};
}