Skip to content

Instantly share code, notes, and snippets.

@sorki
Created August 20, 2018 00:55
Show Gist options
  • Save sorki/61eac41054ce2d1aa1a0631fc96b08d7 to your computer and use it in GitHub Desktop.
Save sorki/61eac41054ce2d1aa1a0631fc96b08d7 to your computer and use it in GitHub Desktop.
miso ghcjs8.4
{ pkgs ? import ((import <nixpkgs> {}).fetchFromGitHub {
owner = "NixOS";
repo = "nixpkgs";
rev = "a0aeb23";
sha256 = "04dgg0f2839c1kvlhc45hcksmjzr8a22q1bgfnrx71935ilxl33d";
}){}
}:
let
inherit (pkgs) runCommand closurecompiler;
repo = pkgs.fetchFromGitHub {
owner = "dmjio";
repo = "miso";
sha256 = "0q0m105c7jj913vh4mc9qsnc9ddvldff1np364z6acw6fyslnn5r";
rev = "5c3d01780bce2f803bf10d531c876250be5eebc6";
#sha256 = "0v4p41i45mnhpfrqw3n0394w0g9pglylxy66vbaqyfx6vvmbwzs4";
#rev = "d6fd3fa96cf5adca9052460328be888c64df52d8";
};
result = import (repo) {};
ghcjsSrc = pkgs.fetchFromGitHub {
owner = "sorki";
repo = "ghcjs";
rev = "5acb3a2b83663da308196dee0bacb2577d86db32";
sha256 = "1gqa1ilh92f2rd0zkc4lj4z3ys924x18k3mwfik3lq690mcz9vx3";
fetchSubmodules = true;
};
overlays = [
(self: super:
{
haskell = super.haskell // {
compiler = super.haskell.compiler // {
ghcjs84 = super.haskell.compiler.ghcjs84.override { inherit ghcjsSrc; };
};
};
}
)
];
syspkgs = import <nixpkgs> { inherit overlays; };
#syspkgs = import <nixpkgs> { };
makeOverrides = function: names: haskellPackagesNew: haskellPackagesOld:
let toPackage = name: {
inherit name;
value = function haskellPackagesOld.${name};
};
in builtins.listToAttrs (map toPackage names);
composeExtensionsList = syspkgs.lib.fold syspkgs.lib.composeExtensions (_: _: {});
dontChecks = [
"directory-tree"
"comonad"
"Glob"
"semigroupoids"
"mockery"
"servant"
"unix-time"
"word8"
"lens"
"wai-extra"
"jsaddle"
"wai-app-static"
];
doJailbreak = [
#"jsaddle"
];
ghcCallPackage = syspkgs.haskell.packages.ghc843.callPackage;
ghcJSCallPackage = let
overrides = composeExtensionsList [
(makeOverrides syspkgs.haskell.lib.dontCheck dontChecks)
(makeOverrides syspkgs.haskell.lib.doJailbreak doJailbreak)
(self: super: {
doctest = self.callPackage ./spheres-and-points/modifiedDeps/doctest/doctest.nix {};
#jsaddle = super.jsaddle.overrideAttrs (old: rec { libraryHaskellDepends = [ super.ghcjs-base ]; });
jsaddle = self.callPackage ../jsaddle/jsaddle {};
})
];
in (syspkgs.haskell.packages.ghcjs84.override { inherit overrides; }).callPackage;
# deps
mqtt-hs = ghcCallPackage ./mqtt-hs.nix { };
cayene-lpp = ghcCallPackage ../data-cayene-lpp { };
cayene-lpp-js = ghcJSCallPackage ../data-cayene-lpp { };
ttn = ghcCallPackage ../data-ttn { };
ttn-js = ghcJSCallPackage ../data-ttn { };
ttn-client = ghcCallPackage ../ttn-client {
inherit ttn cayene-lpp mqtt-hs;
};
miso-ghc = ghcCallPackage "${repo}/miso-ghc.nix" { };
miso-ghcjs = ghcJSCallPackage "${repo}/miso-ghcjs.nix" { };
# toplevel
server = ghcCallPackage ./server {
inherit ttn ttn-client;
miso = miso-ghc;
#miso = result.miso-ghc;
};
client = ghcJSCallPackage ./client {
ttn = ttn-js;
#miso = result.miso-ghcjs;
miso = miso-ghcjs;
};
in
runCommand "ttn-om-out" { inherit client server; } ''
mkdir -p $out/{bin,static}
${closurecompiler}/bin/closure-compiler ${client}/bin/client.jsexe/all.js > $out/static/all.js
cp ${server}/bin/* $out/bin
''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment