Skip to content

Instantly share code, notes, and snippets.

@chessai
Last active February 13, 2018 23:14
Show Gist options
  • Save chessai/8344d8a769f423f3000839422101d07e to your computer and use it in GitHub Desktop.
Save chessai/8344d8a769f423f3000839422101d07e to your computer and use it in GitHub Desktop.
{ package ? "interface" , test ? false, frontend ? false }:
let fetchNixpkgs = import ./fetchNixpkgs.nix;
nixpkgs = fetchNixpkgs {
rev = "eb857611378576f96022867a9fd15a7a841e518c";
sha256 = "0gnlxsmc7gi06dqlij1bgmcias83isldrvydw4688qpm8h4wdf44";
};
pkgs = import nixpkgs { config = {}; };
fetch-github-json = owner: repo: path:
let commit = builtins.fromJSON (builtins.readFile path);
in pkgs.fetchFromGitHub {
name = "${repo}-${commit.rev}";
inherit owner repo;
inherit (commit) rev sha256;
};
reflex-platform = import (fetch-github-json "reflex-frp" "reflex-platform" ./reflex-platform.json) {};
trasa-src = fetch-github-json "andrewthad" "trasa" ./deps/trasa.json;
colonnade-src = fetch-github-json "andrewthad" "colonnade" ./deps/colonnade.json;
country-src = fetch-github-json "andrewthad" "country" ./deps/country.json;
compiler = if frontend then "ghcjs" else "ghc8_2_1";
filterPredicate = p: type:
let path = baseNameOf p; in !(
(type == "directory" && path == "dist")
|| (type == "symlink" && path == "result")
|| (type == "directory" && path == ".git")
|| (type == "symlink" && pkgs.lib.hasPrefix "result" path)
|| pkgs.lib.hasSuffix "~" path
|| pkgs.lib.hasSuffix ".o" path
|| pkgs.lib.hasSuffix ".so" path
|| pkgs.lib.hasSuffix ".nix" path);
overrides = reflex-platform.${compiler}.override {
overrides = self: super:
with reflex-platform;
with reflex-platform.lib;
with reflex-platform.nixpkgs.haskell.lib;
with reflex-platform.nixpkgs.haskellPackages;
let
build-from-json = name: str: self.callCabal2nix name str {};
build = name: path: self.callCabal2nix name (builtins.filterSource filterPredicate path) {};
doList = list: pkgs.lib.mapAttrsToList (name: value: value) list;
doMap = fn: list: pkgs.lib.listToAttrs (map fn list);
filterHoogle = pset: key: value: (! pkgs.lib.elem key pset && (value ? isHaskellLibrary));
trasaMapFn = name: {
inherit name;
value = build-from-json name "${trasa-src}/${name}";
};
trasa-pkgs = doMap trasaMapFn [ "trasa" "trasa-server" "trasa-client" "trasa-reflex" "trasa-th" ];
depsMapFn = name: {
inherit name;
value = super.callPackage (./deps + "/${name}.nix") {};
};
deps-pkgs = doMap depsMapFn [ "ip"
"chronos"
"torsor"
"quantification"
"quickcheck-classes"
"bloodhound"
"impure-containers"
"xmlhtml"
"vector-mmap"
"prim-array"
"wreq"
"btree"
"cryptonite"
"reflex-dom-semui"
"heist"
];
in trasa-pkgs //
deps-pkgs //
{
mkDerivation = args: super.mkDerivation (args // {
doCheck = pkgs.lib.elem args.pname [ "service" ];
doHaddock = false;
});
colonnade = build-from-json "colonnade" "${colonnade-src}/colonnade";
siphon = build-from-json "siphon" "${colonnade-src}/siphon";
reflex-dom-colonnade = build-from-json "reflex-dom-colonnade" "${colonnade-src}/reflex-dom-colonnade";
country = build-from-json "country" "${country-src}/country";
frank = build "frank" ../common/frank;
routes = build "routes" ../common/routes;
service = build "service" ../backend/service;
server = build "server" ../backend/server;
interface = build "interface" ../frontend/interface;
hastache = overrideCabal super.hastache (old: { postInstall = ""; });
hooglePackages = (import ./hoogle/packages.nix).hooglePackagesSet (reflex-platform.nixpkgs.haskell.packages.ghc821);
allPackages = (doList ((import ./hoogle/packages.nix).allPackagesSet (reflex-platform.nixpkgs.haskell.packages.ghc821)));
hoogle = hoogleLocal {
packages
= pkgs.lib.attrValues
(pkgs.lib.filterAttrs (filterHoogle self.allPackages) self.hooglePackages);
};
};
};
in rec {
inherit reflex-platform fetch-github-json overrides;
drv = overrides.${package};
grove =
if reflex-platform.nixpkgs.lib.inNixShell
then reflex-platform.workOn overrides drv
else drv;
service = overrides.service;
server = overrides.server;
interface = overrides.interface;
hoogle = overrides.hoogle;
}
let
hooglePackagesSet = p: {
aeson = p.aeson;
aeson-pretty = p.aeson-pretty;
attoparsec = p.attoparsec;
base = p.base;
base64-bytestring = p.base64-bytestring;
binary = p.binary;
blaze-html = p.blaze-html;
blaze-markup = p.blaze-markup;
bloodhound = p.bloodhound;
btree = p.btree;
bytestring = p.bytestring;
case-insensitive = p.case-insensitive;
cereal = p.cereal;
chronos = p.chronos;
clock = p.clock;
colonnade = p.colonnade;
constraints = p.constraints;
containers = p.containers;
country = p.country;
cron = p.cron;
crypto-pubkey-openssh = p.crypto-pubkey-openssh;
crypto-pubkey-types = p.crypto-pubkey-types;
cryptonite = p.cryptonite;
deepseq = p.deepseq;
dependent-map = p.dependent-map;
dependent-sum = p.dependent-sum;
directory = p.directory;
dlist = p.dlist;
either = p.either;
errors = p.errors;
exceptions = p.exceptions;
fast-logger = p.fast-logger;
flow = p.flow;
foldl = p.foldl;
free = p.free;
ghc-prim = p.ghc-prim;
ghcjs-dom = p.ghcjs-dom;
groundhog = p.groundhog;
groundhog-th = p.groundhog-th;
groundhog-postgresql = p.groundhog-postgresql;
hashable = p.hashable;
hedgehog = p.hedgehog;
heist = p.heist;
http-api-data = p.http-api-data;
http-client = p.http-client;
http-client-tls = p.http-client-tls;
http-types = p.http-types;
ip = p.ip;
jsaddle = p.jsaddle;
lens = p.lens;
lens-aeson = p.lens-aeson;
list-transformer = p.list-transformer;
map-syntax = p.map-syntax;
memory = p.memory;
microlens = p.microlens;
mtl = p.mtl;
network = p.network;
optparse-applicative = p.optparse-applicative;
quantification = p.quantification;
parallel = p.parallel;
path-pieces = p.path-pieces;
pipes = p.pipes;
prim-array = p.prim-array;
primitive = p.primitive;
profunctors = p.profunctors;
reflex = p.reflex;
reflex-dom = p.reflex-dom;
#reflex-dom-semui = p.reflex-dom-semui;
ref-tf = p.ref-tf;
resource-pool = p.resource-pool;
resourcet = p.resourcet;
scientific = p.scientific;
semigroupoids = p.semigroupoids;
siphon = p.siphon;
stm = p.stm;
streaming = p.streaming;
streaming-bytestring = p.streaming-bytestring;
text = p.text;
these = p.these;
time = p.time;
#torsor = p.torsor;
transformers = p.transformers;
trasa = p.trasa;
trasa-client = p.trasa-client;
trasa-reflex = p.trasa-reflex;
trasa-server = p.trasa-server;
unordered-containers = p.unordered-containers;
uuid = p.uuid;
vector = p.vector;
vector-algorithms = p.vector-algorithms;
vector-mmap = p.vector-mmap;
vinyl = p.vinyl;
witherable = p.witherable;
wai = p.wai;
wai-app-static = p.wai-app-static;
wai-extra = p.wai-extra;
warp = p.warp;
wreq = p.wreq;
xmlhtml = p.xmlhtml;
yaml = p.yaml;
};
allPackagesSet = p: {
aeson = p.aeson;
aeson-pretty = p.aeson-pretty;
attoparsec = p.attoparsec;
base = p.base;
base64-bytestring = p.base64-bytestring;
binary = p.binary;
blaze-html = p.blaze-html;
blaze-markup = p.blaze-markup;
bloodhound = p.bloodhound;
btree = p.btree;
bytestring = p.bytestring;
case-insensitive = p.case-insensitive;
cereal = p.cereal;
chronos = p.chronos;
clock = p.clock;
colonnade = p.colonnade;
constraints = p.constraints;
containers = p.containers;
country = p.country;
cron = p.cron;
crypto-pubkey-openssh = p.crypto-pubkey-openssh;
crypto-pubkey-types = p.crypto-pubkey-types;
cryptonite = p.cryptonite;
deepseq = p.deepseq;
dependent-map = p.dependent-map;
dependent-sum = p.dependent-sum;
directory = p.directory;
dlist = p.dlist;
either = p.either;
errors = p.errors;
exceptions = p.exceptions;
fast-logger = p.fast-logger;
flow = p.flow;
foldl = p.foldl;
free = p.free;
ghc-prim = p.ghc-prim;
ghcjs-dom = p.ghcjs-dom;
groundhog = p.groundhog;
groundhog-th = p.groundhog-th;
groundhog-postgresql = p.groundhog-postgresql;
hashable = p.hashable;
hedgehog = p.hedgehog;
heist = p.heist;
http-api-data = p.http-api-data;
http-client = p.http-client;
http-client-tls = p.http-client-tls;
http-types = p.http-types;
ip = p.ip;
jsaddle = p.jsaddle;
lens = p.lens;
lens-aeson = p.lens-aeson;
list-transformer = p.list-transformer;
map-syntax = p.map-syntax;
memory = p.memory;
microlens = p.microlens;
mtl = p.mtl;
network = p.network;
optparse-applicative = p.optparse-applicative;
quantification = p.quantification;
parallel = p.parallel;
path-pieces = p.path-pieces;
pipes = p.pipes;
prim-array = p.prim-array;
primitive = p.primitive;
profunctors = p.profunctors;
reflex = p.reflex;
reflex-dom = p.reflex-dom;
#reflex-dom-semui = p.reflex-dom-semui;
ref-tf = p.ref-tf;
resource-pool = p.resource-pool;
resourcet = p.resourcet;
scientific = p.scientific;
semigroupoids = p.semigroupoids;
siphon = p.siphon;
stm = p.stm;
streaming = p.streaming;
streaming-bytestring = p.streaming-bytestring;
text = p.text;
these = p.these;
time = p.time;
#torsor = p.torsor;
transformers = p.transformers;
trasa = p.trasa;
trasa-client = p.trasa-client;
trasa-reflex = p.trasa-reflex;
trasa-server = p.trasa-server;
unordered-containers = p.unordered-containers;
uuid = p.uuid;
vector = p.vector;
vector-algorithms = p.vector-algorithms;
vector-mmap = p.vector-mmap;
vinyl = p.vinyl;
witherable = p.witherable;
wai = p.wai;
wai-app-static = p.wai-app-static;
wai-extra = p.wai-extra;
warp = p.warp;
wreq = p.wreq;
xmlhtml = p.xmlhtml;
yaml = p.yaml;
};
groveSet = p: {
interface = p.interface;
frank = p.frank;
routes = p.routes;
server = p.server;
service = p.service;
};
in rec {
inherit groveSet hooglePackagesSet allPackagesSet;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment