Last active
February 13, 2018 23:14
-
-
Save chessai/8344d8a769f423f3000839422101d07e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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