Skip to content

Instantly share code, notes, and snippets.

@wd15
Last active February 25, 2024 21:56
Show Gist options
  • Save wd15/ee4beac60b4efb4b1d7c581ee435eccd to your computer and use it in GitHub Desktop.
Save wd15/ee4beac60b4efb4b1d7c581ee435eccd to your computer and use it in GitHub Desktop.
Nix files to build PFHub

Trying to use Nix to build the PFHub website based on the exisisting travis.yml, which doesn't use Nix.

Usage

Install Nix.

and then clone PFHub and this Gist.

$ git clone https://github.com/usnistgov/chimad-phase-field.git
$ git clone https://gist.github.com/wd15/ee4beac60b4efb4b1d7c581ee435eccd pfhub-nix
$ cd pfhub-nix
$ nix-shell
[nix-shell]$ cd ../chimad-phase-field
[nix-shell]$ jekyll serve

Update Packages

The dependencies are all fixed in the above installation. To update the Python, Ruby and Javascript dependencies use the following

Ruby

Using Bundix.

Update the Gemfile if necessary and then

$ nix-shell -p bundler
[nix-shell]$ bundler package --no-install --path vendor
[nix-shell]$ rm -rf .bundler vendor
[nix-shell]$ exit
$ $(nix-build '<nixpkgs>' -A bundix)/bin/bundix
$ rm result

This updates the installed gems.

Python

Using pypi2nix.

$ pypi2nix -V "3.6" -r requirements.txt

Javascript

Install node2nix.

$ nix-env -f '<nixpkgs>' -iA nodePackages.node2nix

Then run

$ node2nix --input node-packages.json --output node-packages.nix --composition node.nix

Edit node.nix and replace nodejs-4_x with nodejs in the 5th line.

# { nixpkgs ? import <nixpkgs> {} }:
{
nixpkgs ? import (fetchTarball "https://github.com/jb55/nixpkgs/archive/1bc5bf4beb759e563ffc7a8a3067f10a00b45a7d.tar.gz") {}
}:
let
jekyll_env = nixpkgs.bundlerEnv rec {
name = "jekyll_env";
ruby = nixpkgs.ruby;
gemfile = ./Gemfile;
lockfile = ./Gemfile.lock;
gemset = ./gemset.nix;
};
pkgs = nixpkgs.pkgs;
python36Packages = nixpkgs.python36Packages;
pypi2nix = import ./requirements.nix { inherit pkgs; };
nbval = import ./nbval.nix { inherit pkgs; };
node = import ./node.nix { inherit pkgs; };
in
nixpkgs.stdenv.mkDerivation rec {
name = "pfhub";
env = nixpkgs.buildEnv { name=name; paths=buildInputs; };
buildInputs = [
jekyll_env
nbval
python36Packages.jupyter
python36Packages.pillow
python36Packages.numpy
python36Packages.toolz
python36Packages.bokeh
python36Packages.matplotlib
python36Packages.flake8
python36Packages.pylint
pypi2nix.packages."pykwalify"
pypi2nix.packages."vega"
pypi2nix.packages."progressbar2"
python36Packages.pytest
node.mocha
node.coffeelint
node."assert"
node.surge
];
src=./.;
}
From ubuntu:17.04
MAINTAINER Daniel Wheeler <[email protected]>
ENV DEBIAN_FRONTEND noninteractive
USER root
RUN apt-get -y update
RUN apt-get install -y git && apt-get clean
RUN apt-get install -y sudo && apt-get clean
RUN apt-get install -y bzip2 && apt-get clean
RUN apt-get install -y curl && apt-get clean
RUN apt-get -y update
RUN useradd -m -s /bin/bash main
RUN echo "main:main" | chpasswd
RUN adduser main sudo
EXPOSE 8888
USER main
ENV HOME /home/main
ENV SHELL /bin/bash
ENV USER main
WORKDIR $HOME
USER root
RUN chown -R main:main /home/main
RUN echo "main ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN mkdir /etc/nix
RUN echo "build-users-group =" > /etc/nix/nix.conf
USER main
## Install Nix
RUN curl https://nixos.org/nix/install > ./install.sh
RUN bash ./install.sh
RUN nix-store --init
# RUN sudo chmod 1777 /nix/var/nix/profiles/per-user
# RUN sudo mkdir -m 1777 -p /nix/var/nix/gcroots/per-user
# RUN sudo chmod 1777 /nix/var/nix/gcroots/per-user
# RUN sudo chmod 1777 /home/main/.nix-defexpr
# RUN cp /nix/var/nix/profiles/default/etc/profile.d/nix.sh ~/nix.sh
# RUN chmod +w ~/nix.sh
# RUN echo "unset PATH" | cat - ~/nix.sh > temp && mv temp ~/nix.sh
# # RUN echo -e "unset PATH\n$(cat ~/nix.sh)" > ~/nix.sh
# RUN echo "export PATH=\$PATH:/nix/var/nix/profiles/default/bin:/bin:/usr/bin" >> ~/nix.sh
# RUN echo "export NIX_USER_PROFILE_DIR=/nix/var/nix/profiles/per-user/\$USER " >> ~/nix.sh
ENV SHELL /bin/bash
# ENV ANACONDAPATH $HOME/anaconda
# ENV PATH "$ANACONDAPATH/bin:${PATH}"
# RUN wget https://repo.continuum.io/miniconda/Miniconda2-4.3.11-Linux-x86_64.sh
# RUN bash Miniconda2-4.3.11-Linux-x86_64.sh -b -p $ANACONDAPATH
# RUN conda update conda
# RUN conda install libgfortran=1.0 && conda clean --all
# RUN conda install matplotlib && conda clean --all
# RUN conda install --channel guyer scipy gmsh && conda clean --all
# RUN conda install --channel guyer pysparse openmpi mpi4py && conda clean --all
# RUN conda install --channel guyer trilinos && conda clean --all
# ENV PIP "pip --no-cache-dir"
# RUN $PIP install scikit-fmm
# RUN git config --global user.name "Main"
# RUN git config --global user.email "[email protected]"
# ## Install FiPy
# RUN git clone https://github.com/usnistgov/fipy
# WORKDIR $HOME/fipy
# RUN git checkout ecbe868f2aff6dbc43fb8ed532e581a03ebab5d5
# RUN python setup.py develop
# ## Install Jupyter
# WORKDIR $HOME
# RUN conda install jupyter=1.0.0 && conda clean --all
# ## Setup
# EXPOSE 8888
# ENV SHELL /bin/bash
source 'https://rubygems.org'
gem 'jekyll'
gem 'jekyll-coffeescript'
gem 'html-proofer'
gem 'jekyll-redirect-from'
GEM
remote: https://rubygems.org/
specs:
activesupport (5.1.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (~> 0.7)
minitest (~> 5.1)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.11.1)
colorator (1.1.0)
colorize (0.8.1)
concurrent-ruby (1.0.5)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
ethon (0.11.0)
ffi (>= 1.3.0)
eventmachine (1.2.5)
execjs (2.7.0)
ffi (1.9.18)
forwardable-extended (2.6.0)
html-proofer (3.8.0)
activesupport (>= 4.2, < 6.0)
addressable (~> 2.3)
colorize (~> 0.8)
mercenary (~> 0.3.2)
nokogiri (~> 1.8.1)
parallel (~> 1.3)
typhoeus (~> 1.3)
yell (~> 2.0)
http_parser.rb (0.6.0)
i18n (0.9.1)
concurrent-ruby (~> 1.0)
jekyll (3.7.0)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (~> 1.14)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-coffeescript (1.1.0)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-redirect-from (0.13.0)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.1)
sass (~> 3.4)
jekyll-watch (2.0.0)
listen (~> 3.0)
kramdown (1.16.2)
liquid (4.0.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
mini_portile2 (2.3.0)
minitest (5.11.1)
nokogiri (1.8.1)
mini_portile2 (~> 2.3.0)
parallel (1.12.1)
pathutil (0.16.1)
forwardable-extended (~> 2.6)
public_suffix (3.0.1)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rouge (3.1.0)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.5.5)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
thread_safe (0.3.6)
typhoeus (1.3.0)
ethon (>= 0.9.0)
tzinfo (1.2.4)
thread_safe (~> 0.1)
yell (2.0.7)
PLATFORMS
ruby
DEPENDENCIES
html-proofer
jekyll
jekyll-coffeescript
jekyll-redirect-from
BUNDLED WITH
1.14.6
{
activesupport = {
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0sgf4rsfr7jcaqsx0wwzx4l4k9xsjlwv0mzl08pxiyp1qzyx8scr";
type = "gem";
};
version = "5.1.4";
};
addressable = {
dependencies = ["public_suffix"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
type = "gem";
};
version = "2.5.2";
};
coffee-script = {
dependencies = ["coffee-script-source" "execjs"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
type = "gem";
};
version = "2.4.1";
};
coffee-script-source = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xfshhlz808f8639wc88wgls1mww35sid8rd55vn0a4yqajf4vh9";
type = "gem";
};
version = "1.11.1";
};
colorator = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
type = "gem";
};
version = "1.1.0";
};
colorize = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
type = "gem";
};
version = "0.8.1";
};
concurrent-ruby = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
type = "gem";
};
version = "1.0.5";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
type = "gem";
};
version = "0.5.1";
};
ethon = {
dependencies = ["ffi"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48";
type = "gem";
};
version = "0.11.0";
};
eventmachine = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
type = "gem";
};
version = "1.2.5";
};
execjs = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
type = "gem";
};
version = "2.7.0";
};
ffi = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0";
type = "gem";
};
version = "1.9.18";
};
forwardable-extended = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
type = "gem";
};
version = "2.6.0";
};
html-proofer = {
dependencies = ["activesupport" "addressable" "colorize" "mercenary" "nokogiri" "parallel" "typhoeus" "yell"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "06ggsx2fhsis1iw0sw12a709h99ksbs9kbmv0j05kvbak7b9m51a";
type = "gem";
};
version = "3.8.0";
};
"http_parser.rb" = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
type = "gem";
};
version = "0.6.0";
};
i18n = {
dependencies = ["concurrent-ruby"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "032wbfixfpwa67c893x5sn02ab0928vfqfshcs02bwkkxpqy9x8s";
type = "gem";
};
version = "0.9.1";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1xgyq8fjvvcrp8n2hkxfv8r6y6vk3cjw93cy7pj5chsga5gla2rj";
type = "gem";
};
version = "3.7.0";
};
jekyll-coffeescript = {
dependencies = ["coffee-script" "coffee-script-source"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0rbr39rkr3lzzk7m6kvw6mn52snkxfjxdn91mlj9ac746s82gbim";
type = "gem";
};
version = "1.1.0";
};
jekyll-redirect-from = {
dependencies = ["jekyll"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1crm5xqgv5asbbbaxfgky4ppib5rih59yzpa3yc94gh8b9cjixrj";
type = "gem";
};
version = "0.13.0";
};
jekyll-sass-converter = {
dependencies = ["sass"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0vwaaqpm9zn9jqkysj6gh9zv7mskx53bqgl0bjyh95sln1qk67d9";
type = "gem";
};
version = "1.5.1";
};
jekyll-watch = {
dependencies = ["listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
type = "gem";
};
version = "2.0.0";
};
kramdown = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mkrqpp01rrfn3rx6wwsjizyqmafp0vgg8ja1dvbjs185r5zw3za";
type = "gem";
};
version = "1.16.2";
};
liquid = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
type = "gem";
};
version = "4.0.0";
};
listen = {
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
type = "gem";
};
version = "3.1.5";
};
mercenary = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
type = "gem";
};
version = "0.3.6";
};
mini_portile2 = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
type = "gem";
};
version = "2.3.0";
};
minitest = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "12mhxwabzxh0hp8k3pywsq5kywb3pn45wjipp0amn18mqb930875";
type = "gem";
};
version = "5.11.1";
};
nokogiri = {
dependencies = ["mini_portile2"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "105xh2zkr8nsyfaj2izaisarpnkrrl9000y3nyflg9cbzrfxv021";
type = "gem";
};
version = "1.8.1";
};
parallel = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67";
type = "gem";
};
version = "1.12.1";
};
pathutil = {
dependencies = ["forwardable-extended"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
type = "gem";
};
version = "0.16.1";
};
public_suffix = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mvzd9ycjw8ydb9qy3daq3kdzqs2vpqvac4dqss6ckk4rfcjc637";
type = "gem";
};
version = "3.0.1";
};
rb-fsevent = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fbpmjypwxkb8r7y1kmhmyp6gawa4byw0yb3jc3dn9ly4ld9lizf";
type = "gem";
};
version = "0.10.2";
};
rb-inotify = {
dependencies = ["ffi"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
type = "gem";
};
version = "0.9.10";
};
rouge = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ibw38faway64k89kn7apw41ws773nd964bmpympjpwr1xckjrw5";
type = "gem";
};
version = "3.1.0";
};
ruby_dep = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
type = "gem";
};
version = "1.5.0";
};
safe_yaml = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
type = "gem";
};
version = "1.0.4";
};
sass = {
dependencies = ["sass-listen"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10401m2xlv6vaxfwzy4xxmk51ddcnkvwi918cw3jkki0qqdl7d8v";
type = "gem";
};
version = "3.5.5";
};
sass-listen = {
dependencies = ["rb-fsevent" "rb-inotify"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
type = "gem";
};
version = "4.0.0";
};
thread_safe = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
type = "gem";
};
version = "0.3.6";
};
typhoeus = {
dependencies = ["ethon"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01pd16n6bvknyip42r1r7js0j8x8ly37gmr72z3695zcczh1blyq";
type = "gem";
};
version = "1.3.0";
};
tzinfo = {
dependencies = ["thread_safe"];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09dpbrih054mn42flbbcdpzk2727mzfvjrgqb12zdafhx7p9rrzp";
type = "gem";
};
version = "1.2.4";
};
yell = {
source = {
remotes = ["https://rubygems.org"];
sha256 = "1m3q1l33sznrl86myjhd2l7chma1wdcdrdmnf2fi7aydapwd4vib";
type = "gem";
};
version = "2.0.7";
};
}
with import <nixpkgs> { };
let nbval = import ./nbval.nix;
in stdenv.mkDerivation rec {
name = "env";
buildInputs = [
nbval
python36Packages.pytest
];
}
{ pkgs ? import <nixpkgs> {}
}:
let
pypi2nix = import ./requirements.nix { inherit pkgs; };
python36Packages = pkgs.python36Packages;
in
pypi2nix.mkDerivation {
name = "nbval-0.9.0";
src = pkgs.fetchurl {
url = "https://pypi.python.org/packages/58/ce/d705c865bdec10ab94c1c57b76e77f07241ef5c11c4976ec7e00de259f92/nbval-0.9.0.tar.gz";
sha256 = "dec2a26bb32a29f92a577554b7142f960b8a91bca8cfaf23f4238718197bf7f3";
};
doCheck=false;
buildInputs = [
python36Packages.ipython
python36Packages.jupyter_client
python36Packages.tornado
python36Packages.nbformat
python36Packages.ipykernel
python36Packages.coverage
python36Packages.pytest
];
}
# This file originates from node2nix
{stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}:
let
python = if nodejs ? python then nodejs.python else python2;
# Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
tarWrapper = runCommand "tarWrapper" {} ''
mkdir -p $out/bin
cat > $out/bin/tar <<EOF
#! ${stdenv.shell} -e
$(type -p tar) "\$@" --warning=no-unknown-keyword
EOF
chmod +x $out/bin/tar
'';
# Function that generates a TGZ file from a NPM project
buildNodeSourceDist =
{ name, version, src, ... }:
stdenv.mkDerivation {
name = "node-tarball-${name}-${version}";
inherit src;
buildInputs = [ nodejs ];
buildPhase = ''
export HOME=$TMPDIR
tgzFile=$(npm pack)
'';
installPhase = ''
mkdir -p $out/tarballs
mv $tgzFile $out/tarballs
mkdir -p $out/nix-support
echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
'';
};
includeDependencies = {dependencies}:
stdenv.lib.optionalString (dependencies != [])
(stdenv.lib.concatMapStrings (dependency:
''
# Bundle the dependencies of the package
mkdir -p node_modules
cd node_modules
# Only include dependencies if they don't exist. They may also be bundled in the package.
if [ ! -e "${dependency.name}" ]
then
${composePackage dependency}
fi
cd ..
''
) dependencies);
# Recursively composes the dependencies of a package
composePackage = { name, packageName, src, dependencies ? [], ... }@args:
''
DIR=$(pwd)
cd $TMPDIR
unpackFile ${src}
# Make the base dir in which the target dependency resides first
mkdir -p "$(dirname "$DIR/${packageName}")"
if [ -f "${src}" ]
then
# Figure out what directory has been unpacked
packageDir="$(find . -maxdepth 1 -type d | tail -1)"
# Restore write permissions to make building work
find "$packageDir" -type d -print0 | xargs -0 chmod u+x
chmod -R u+w "$packageDir"
# Move the extracted tarball into the output folder
mv "$packageDir" "$DIR/${packageName}"
elif [ -d "${src}" ]
then
# Get a stripped name (without hash) of the source directory.
# On old nixpkgs it's already set internally.
if [ -z "$strippedName" ]
then
strippedName="$(stripHash ${src})"
fi
# Restore write permissions to make building work
chmod -R u+w "$strippedName"
# Move the extracted directory into the output folder
mv "$strippedName" "$DIR/${packageName}"
fi
# Unset the stripped name to not confuse the next unpack step
unset strippedName
# Include the dependencies of the package
cd "$DIR/${packageName}"
${includeDependencies { inherit dependencies; }}
cd ..
${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
'';
pinpointDependencies = {dependencies, production}:
let
pinpointDependenciesFromPackageJSON = writeTextFile {
name = "pinpointDependencies.js";
text = ''
var fs = require('fs');
var path = require('path');
function resolveDependencyVersion(location, name) {
if(location == process.env['NIX_STORE']) {
return null;
} else {
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
if(fs.existsSync(dependencyPackageJSON)) {
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
if(dependencyPackageObj.name == name) {
return dependencyPackageObj.version;
}
} else {
return resolveDependencyVersion(path.resolve(location, ".."), name);
}
}
}
function replaceDependencies(dependencies) {
if(typeof dependencies == "object" && dependencies !== null) {
for(var dependency in dependencies) {
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
if(resolvedVersion === null) {
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
} else {
dependencies[dependency] = resolvedVersion;
}
}
}
}
/* Read the package.json configuration */
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
/* Pinpoint all dependencies */
replaceDependencies(packageObj.dependencies);
if(process.argv[2] == "development") {
replaceDependencies(packageObj.devDependencies);
}
replaceDependencies(packageObj.optionalDependencies);
/* Write the fixed package.json file */
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
'';
};
in
''
node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
${stdenv.lib.optionalString (dependencies != [])
''
if [ -d node_modules ]
then
cd node_modules
${stdenv.lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
cd ..
fi
''}
'';
# Recursively traverses all dependencies of a package and pinpoints all
# dependencies in the package.json file to the versions that are actually
# being used.
pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
''
if [ -d "${packageName}" ]
then
cd "${packageName}"
${pinpointDependencies { inherit dependencies production; }}
cd ..
${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
fi
'';
# Extract the Node.js source code which is used to compile packages with
# native bindings
nodeSources = runCommand "node-sources" {} ''
tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
mv node-* $out
'';
# Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
addIntegrityFieldsScript = writeTextFile {
name = "addintegrityfields.js";
text = ''
var fs = require('fs');
var path = require('path');
function augmentDependencies(baseDir, dependencies) {
for(var dependencyName in dependencies) {
var dependency = dependencies[dependencyName];
// Open package.json and augment metadata fields
var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
var packageJSONPath = path.join(packageJSONDir, "package.json");
if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
console.log("Adding metadata fields to: "+packageJSONPath);
var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
if(dependency.integrity) {
packageObj["_integrity"] = dependency.integrity;
} else {
packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
}
packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
}
// Augment transitive dependencies
if(dependency.dependencies !== undefined) {
augmentDependencies(packageJSONDir, dependency.dependencies);
}
}
}
if(fs.existsSync("./package-lock.json")) {
var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
if(packageLock.lockfileVersion !== 1) {
process.stderr.write("Sorry, I only understand lock file version 1!\n");
process.exit(1);
}
if(packageLock.dependencies !== undefined) {
augmentDependencies(".", packageLock.dependencies);
}
}
'';
};
# Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
reconstructPackageLock = writeTextFile {
name = "addintegrityfields.js";
text = ''
var fs = require('fs');
var path = require('path');
var packageObj = JSON.parse(fs.readFileSync("package.json"));
var lockObj = {
name: packageObj.name,
version: packageObj.version,
lockfileVersion: 1,
requires: true,
dependencies: {}
};
function augmentPackageJSON(filePath, dependencies) {
var packageJSON = path.join(filePath, "package.json");
if(fs.existsSync(packageJSON)) {
var packageObj = JSON.parse(fs.readFileSync(packageJSON));
dependencies[packageObj.name] = {
version: packageObj.version,
integrity: "sha1-000000000000000000000000000=",
dependencies: {}
};
processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
}
}
function processDependencies(dir, dependencies) {
if(fs.existsSync(dir)) {
var files = fs.readdirSync(dir);
files.forEach(function(entry) {
var filePath = path.join(dir, entry);
var stats = fs.statSync(filePath);
if(stats.isDirectory()) {
if(entry.substr(0, 1) == "@") {
// When we encounter a namespace folder, augment all packages belonging to the scope
var pkgFiles = fs.readdirSync(filePath);
pkgFiles.forEach(function(entry) {
if(stats.isDirectory()) {
var pkgFilePath = path.join(filePath, entry);
augmentPackageJSON(pkgFilePath, dependencies);
}
});
} else {
augmentPackageJSON(filePath, dependencies);
}
}
});
}
}
processDependencies("node_modules", lockObj.dependencies);
fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
'';
};
# Builds and composes an NPM package including all its dependencies
buildNodePackage = { name, packageName, version, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, bypassCache ? false, preRebuild ? "", ... }@args:
let
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
in
stdenv.lib.makeOverridable stdenv.mkDerivation (builtins.removeAttrs args [ "dependencies" ] // {
name = "node-${name}-${version}";
buildInputs = [ tarWrapper python nodejs ]
++ stdenv.lib.optional (stdenv.isLinux) utillinux
++ stdenv.lib.optional (stdenv.isDarwin) libtool
++ args.buildInputs or [];
dontStrip = args.dontStrip or true; # Striping may fail a build for some package deployments
inherit dontNpmInstall preRebuild;
unpackPhase = args.unpackPhase or "true";
buildPhase = args.buildPhase or "true";
compositionScript = composePackage args;
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
installPhase = args.installPhase or ''
# Create and enter a root node_modules/ folder
mkdir -p $out/lib/node_modules
cd $out/lib/node_modules
# Compose the package and all its dependencies
source $compositionScriptPath
# Pinpoint the versions of all dependencies to the ones that are actually being used
echo "pinpointing versions of dependencies..."
source $pinpointDependenciesScriptPath
# Patch the shebangs of the bundled modules to prevent them from
# calling executables outside the Nix store as much as possible
patchShebangs .
# Deploy the Node.js package by running npm install. Since the
# dependencies have been provided already by ourselves, it should not
# attempt to install them again, which is good, because we want to make
# it Nix's responsibility. If it needs to install any dependencies
# anyway (e.g. because the dependency parameters are
# incomplete/incorrect), it fails.
#
# The other responsibilities of NPM are kept -- version checks, build
# steps, postprocessing etc.
export HOME=$TMPDIR
cd "${packageName}"
runHook preRebuild
${stdenv.lib.optionalString bypassCache ''
if [ ! -f package-lock.json ]
then
echo "No package-lock.json file found, reconstructing..."
node ${reconstructPackageLock}
fi
node ${addIntegrityFieldsScript}
''}
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild
if [ "$dontNpmInstall" != "1" ]
then
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
rm -f npm-shrinkwrap.json
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install
fi
# Create symlink to the deployed executable folder, if applicable
if [ -d "$out/lib/node_modules/.bin" ]
then
ln -s $out/lib/node_modules/.bin $out/bin
fi
# Create symlinks to the deployed manual page folders, if applicable
if [ -d "$out/lib/node_modules/${packageName}/man" ]
then
mkdir -p $out/share
for dir in "$out/lib/node_modules/${packageName}/man/"*
do
mkdir -p $out/share/man/$(basename "$dir")
for page in "$dir"/*
do
ln -s $page $out/share/man/$(basename "$dir")
done
done
fi
# Run post install hook, if provided
runHook postInstall
'';
});
# Builds a development shell
buildNodeShell = { name, packageName, version, src, dependencies ? [], production ? true, npmFlags ? "", dontNpmInstall ? false, bypassCache ? false, ... }@args:
let
forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
nodeDependencies = stdenv.mkDerivation {
name = "node-dependencies-${name}-${version}";
buildInputs = [ tarWrapper python nodejs ]
++ stdenv.lib.optional (stdenv.isLinux) utillinux
++ stdenv.lib.optional (stdenv.isDarwin) libtool
++ args.buildInputs or [];
includeScript = includeDependencies { inherit dependencies; };
pinpointDependenciesScript = pinpointDependenciesOfPackage args;
passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
buildCommand = ''
mkdir -p $out/${packageName}
cd $out/${packageName}
source $includeScriptPath
# Create fake package.json to make the npm commands work properly
cp ${src}/package.json .
chmod 644 package.json
${stdenv.lib.optionalString bypassCache ''
if [ -f ${src}/package-lock.json ]
then
cp ${src}/package-lock.json .
fi
''}
# Pinpoint the versions of all dependencies to the ones that are actually being used
echo "pinpointing versions of dependencies..."
cd ..
source $pinpointDependenciesScriptPath
cd ${packageName}
# Patch the shebangs of the bundled modules to prevent them from
# calling executables outside the Nix store as much as possible
patchShebangs .
export HOME=$PWD
${stdenv.lib.optionalString bypassCache ''
if [ ! -f package-lock.json ]
then
echo "No package-lock.json file found, reconstructing..."
node ${reconstructPackageLock}
fi
node ${addIntegrityFieldsScript}
''}
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} rebuild
${stdenv.lib.optionalString (!dontNpmInstall) ''
# NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
rm -f npm-shrinkwrap.json
npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${stdenv.lib.optionalString production "--production"} install
''}
cd ..
mv ${packageName} lib
ln -s $out/lib/node_modules/.bin $out/bin
'';
};
in
stdenv.lib.makeOverridable stdenv.mkDerivation {
name = "node-shell-${name}-${version}";
buildInputs = [ python nodejs ] ++ stdenv.lib.optional (stdenv.isLinux) utillinux ++ args.buildInputs or [];
buildCommand = ''
mkdir -p $out/bin
cat > $out/bin/shell <<EOF
#! ${stdenv.shell} -e
$shellHook
exec ${stdenv.shell}
EOF
chmod +x $out/bin/shell
'';
# Provide the dependencies in a development shell through the NODE_PATH environment variable
inherit nodeDependencies;
shellHook = stdenv.lib.optionalString (dependencies != []) ''
export NODE_PATH=$nodeDependencies/lib/node_modules
'';
};
in
{ inherit buildNodeSourceDist buildNodePackage buildNodeShell; }
[
"npm",
"coffeelint",
"mocha",
"assert",
"surge"
]
# This file has been generated by node2nix 1.5.3. Do not edit!
{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
let
sources = {
"ajv-5.5.2" = {
name = "ajv";
packageName = "ajv";
version = "5.5.2";
src = fetchurl {
url = "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz";
sha1 = "73b5eeca3fab653e3d3f9422b341ad42205dc965";
};
};
"ansi-escapes-3.1.0" = {
name = "ansi-escapes";
packageName = "ansi-escapes";
version = "3.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz";
sha512 = "1bm72rs09dwjhfif8kqjxnpb5fgmcdgkn5483f11j6791s5161f2kvxy69pkgcq0jdws6kqfmr1bx5189lnvkzgkq851qs3gzq1n02j";
};
};
"ansi-regex-2.1.1" = {
name = "ansi-regex";
packageName = "ansi-regex";
version = "2.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
};
};
"ansi-regex-3.0.0" = {
name = "ansi-regex";
packageName = "ansi-regex";
version = "3.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
};
};
"ansi-styles-3.2.1" = {
name = "ansi-styles";
packageName = "ansi-styles";
version = "3.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
sha512 = "2lgkskkj4c1fsnrksy0yffda0wss84p8lfiazdc7jli7iqnvrxkzbxjzpvx13lm28qw0zkawfxvz2bdiisc72ccy7hx8i8rm4iijgam";
};
};
"asn1-0.2.3" = {
name = "asn1";
packageName = "asn1";
version = "0.2.3";
src = fetchurl {
url = "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz";
sha1 = "dac8787713c9966849fc8180777ebe9c1ddf3b86";
};
};
"assert-plus-1.0.0" = {
name = "assert-plus";
packageName = "assert-plus";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
};
};
"async-0.1.22" = {
name = "async";
packageName = "async";
version = "0.1.22";
src = fetchurl {
url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
};
};
"async-0.2.10" = {
name = "async";
packageName = "async";
version = "0.2.10";
src = fetchurl {
url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
};
};
"asynckit-0.4.0" = {
name = "asynckit";
packageName = "asynckit";
version = "0.4.0";
src = fetchurl {
url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
};
};
"aws-sign2-0.7.0" = {
name = "aws-sign2";
packageName = "aws-sign2";
version = "0.7.0";
src = fetchurl {
url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
};
};
"aws4-1.6.0" = {
name = "aws4";
packageName = "aws4";
version = "1.6.0";
src = fetchurl {
url = "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz";
sha1 = "83ef5ca860b2b32e4a0deedee8c771b9db57471e";
};
};
"balanced-match-1.0.0" = {
name = "balanced-match";
packageName = "balanced-match";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
};
};
"bcrypt-pbkdf-1.0.1" = {
name = "bcrypt-pbkdf";
packageName = "bcrypt-pbkdf";
version = "1.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz";
sha1 = "63bc5dcb61331b92bc05fd528953c33462a06f8d";
};
};
"block-stream-0.0.9" = {
name = "block-stream";
packageName = "block-stream";
version = "0.0.9";
src = fetchurl {
url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz";
sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a";
};
};
"boom-4.3.1" = {
name = "boom";
packageName = "boom";
version = "4.3.1";
src = fetchurl {
url = "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz";
sha1 = "4f8a3005cb4a7e3889f749030fd25b96e01d2e31";
};
};
"boom-5.2.0" = {
name = "boom";
packageName = "boom";
version = "5.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz";
sha512 = "19h20yqpvca08dns1rs4f057f10w63v0snxfml4h5khsk266x3x1im0w72bza4k2xn0kfz6jlv001dhcvxsjr09bmbqnysils9m7437";
};
};
"brace-expansion-1.1.11" = {
name = "brace-expansion";
packageName = "brace-expansion";
version = "1.1.11";
src = fetchurl {
url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
sha512 = "248cnpbbf0p32h53rd3g8wzpgrkaj4p078ra1g6l16f82i6bzkvmhwqan5rk88apbll9ly1476kngd7f7z27i3b3zxpbb3064f8yaw8";
};
};
"browser-stdout-1.3.1" = {
name = "browser-stdout";
packageName = "browser-stdout";
version = "1.3.1";
src = fetchurl {
url = "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz";
sha512 = "21jjhrf3wdmzsfqgva5s7shs1wdmcdxsjvi75p8z7i0q2i6n3654gpxjqlhbnpmzm25cpkshyi8swy13017qkp9m7xnbgw0bwiia45a";
};
};
"caseless-0.12.0" = {
name = "caseless";
packageName = "caseless";
version = "0.12.0";
src = fetchurl {
url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
sha1 = "1b681c21ff84033c826543090689420d187151dc";
};
};
"chalk-2.3.2" = {
name = "chalk";
packageName = "chalk";
version = "2.3.2";
src = fetchurl {
url = "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz";
sha512 = "06jlrzx0nb92910rcfhx55n28jgvhc0qda49scnfyifnmc31dyfqsl5qqiwhsxkrhrc6c07x69q037f1pwg06kkfd1qdzaxz7dj7kk4";
};
};
"chardet-0.4.2" = {
name = "chardet";
packageName = "chardet";
version = "0.4.2";
src = fetchurl {
url = "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz";
sha1 = "b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2";
};
};
"cli-cursor-2.1.0" = {
name = "cli-cursor";
packageName = "cli-cursor";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz";
sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
};
};
"cli-table2-0.2.0" = {
name = "cli-table2";
packageName = "cli-table2";
version = "0.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/cli-table2/-/cli-table2-0.2.0.tgz";
sha1 = "2d1ef7f218a0e786e214540562d4bd177fe32d97";
};
};
"cli-width-2.2.0" = {
name = "cli-width";
packageName = "cli-width";
version = "2.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz";
sha1 = "ff19ede8a9a5e579324147b0c11f0fbcbabed639";
};
};
"co-4.6.0" = {
name = "co";
packageName = "co";
version = "4.6.0";
src = fetchurl {
url = "https://registry.npmjs.org/co/-/co-4.6.0.tgz";
sha1 = "6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184";
};
};
"code-point-at-1.1.0" = {
name = "code-point-at";
packageName = "code-point-at";
version = "1.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
};
};
"coffeescript-2.2.3" = {
name = "coffeescript";
packageName = "coffeescript";
version = "2.2.3";
src = fetchurl {
url = "https://registry.npmjs.org/coffeescript/-/coffeescript-2.2.3.tgz";
sha512 = "1q39sfcl5y4cyqgkgch187q0zrj7jgqw3vmd4q6ijhz7dzbzy1gzvam8ax1nk38f0i7475pwxzi860dwdzf2037n572pd55vw28gsi7";
};
};
"color-convert-1.9.1" = {
name = "color-convert";
packageName = "color-convert";
version = "1.9.1";
src = fetchurl {
url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz";
sha512 = "32rj1090g95xcvm0d2ya6jbqdhiy9w2wv3picdy33fzrm455v0gi7g4n8lw0n31g37wwbdnz7lxjsisgbsaqz1d10j9nh5hi2f9lccs";
};
};
"color-name-1.1.3" = {
name = "color-name";
packageName = "color-name";
version = "1.1.3";
src = fetchurl {
url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
};
};
"colors-0.6.2" = {
name = "colors";
packageName = "colors";
version = "0.6.2";
src = fetchurl {
url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
};
};
"colors-1.2.1" = {
name = "colors";
packageName = "colors";
version = "1.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz";
sha512 = "0m8vssxhc3xlx639gz68425ll6mqh0rib6yr7s2v2vg1hwnqka02zijxmg16iyvzmd5sbsczjs2mqs0n428pc1cgkgj439fsa9b1kxk";
};
};
"combined-stream-1.0.6" = {
name = "combined-stream";
packageName = "combined-stream";
version = "1.0.6";
src = fetchurl {
url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz";
sha1 = "723e7df6e801ac5613113a7e445a9b69cb632818";
};
};
"commander-2.11.0" = {
name = "commander";
packageName = "commander";
version = "2.11.0";
src = fetchurl {
url = "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz";
sha512 = "2yi2hwf0bghfnv1fdgd4wvh7s0acjrgqbgww97ncm6i6s6ffs1zahnj48f6gqpqj6fsf0jigvnr0civ25k2160c38281r80wvg7jkkg";
};
};
"concat-map-0.0.1" = {
name = "concat-map";
packageName = "concat-map";
version = "0.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
};
};
"core-util-is-1.0.2" = {
name = "core-util-is";
packageName = "core-util-is";
version = "1.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
};
};
"cryptiles-3.1.2" = {
name = "cryptiles";
packageName = "cryptiles";
version = "3.1.2";
src = fetchurl {
url = "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz";
sha1 = "a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe";
};
};
"cycle-1.0.3" = {
name = "cycle";
packageName = "cycle";
version = "1.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz";
sha1 = "21e80b2be8580f98b468f379430662b046c34ad2";
};
};
"dashdash-1.14.1" = {
name = "dashdash";
packageName = "dashdash";
version = "1.14.1";
src = fetchurl {
url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
};
};
"debug-3.1.0" = {
name = "debug";
packageName = "debug";
version = "3.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz";
sha512 = "3g1hqsahr1ks2kpvdxrwzr57fj90nnr0hvwwrw8yyyzcv3i11sym8zwibxx67bl1mln0acddrzpkkdjjxnc6n2cm9fazmgzzsl1fzrr";
};
};
"deep-equal-1.0.1" = {
name = "deep-equal";
packageName = "deep-equal";
version = "1.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz";
sha1 = "f5d260292b660e084eff4cdbc9f08ad3247448b5";
};
};
"delayed-stream-1.0.0" = {
name = "delayed-stream";
packageName = "delayed-stream";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
};
};
"diff-3.5.0" = {
name = "diff";
packageName = "diff";
version = "3.5.0";
src = fetchurl {
url = "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz";
sha512 = "32bkv3cfhax4x5zhiyfn63wjhqwkzsjiql3my8p3d9hvv020p8f9hdi7mpqixrkpgs0g9k15mn736s449yad9wq1plhxyhxb2sam3h3";
};
};
"du-0.1.0" = {
name = "du";
packageName = "du";
version = "0.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/du/-/du-0.1.0.tgz";
sha1 = "f26e340a09c7bc5b6fd69af6dbadea60fa8c6f4d";
};
};
"ecc-jsbn-0.1.1" = {
name = "ecc-jsbn";
packageName = "ecc-jsbn";
version = "0.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz";
sha1 = "0fc73a9ed5f0d53c38193398523ef7e543777505";
};
};
"escape-string-regexp-1.0.5" = {
name = "escape-string-regexp";
packageName = "escape-string-regexp";
version = "1.0.5";
src = fetchurl {
url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
};
};
"extend-3.0.1" = {
name = "extend";
packageName = "extend";
version = "3.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz";
sha1 = "a755ea7bc1adfcc5a31ce7e762dbaadc5e636444";
};
};
"external-editor-2.1.0" = {
name = "external-editor";
packageName = "external-editor";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz";
sha512 = "366albydy3glqs8h6y7rdpdhmyffn7vaig5snw8cb1zmn22mgvfywr08jfbmqjiqc9pyjyaaqv6xz5sfy2j1y18590l4f8mji7j53hk";
};
};
"extsprintf-1.3.0" = {
name = "extsprintf";
packageName = "extsprintf";
version = "1.3.0";
src = fetchurl {
url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
};
};
"eyes-0.1.8" = {
name = "eyes";
packageName = "eyes";
version = "0.1.8";
src = fetchurl {
url = "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz";
sha1 = "62cf120234c683785d902348a800ef3e0cc20bc0";
};
};
"fast-deep-equal-1.1.0" = {
name = "fast-deep-equal";
packageName = "fast-deep-equal";
version = "1.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz";
sha1 = "c053477817c86b51daa853c81e059b733d023614";
};
};
"fast-json-stable-stringify-2.0.0" = {
name = "fast-json-stable-stringify";
packageName = "fast-json-stable-stringify";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
};
};
"figures-2.0.0" = {
name = "figures";
packageName = "figures";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz";
sha1 = "3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962";
};
};
"forever-agent-0.6.1" = {
name = "forever-agent";
packageName = "forever-agent";
version = "0.6.1";
src = fetchurl {
url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
};
};
"form-data-2.3.2" = {
name = "form-data";
packageName = "form-data";
version = "2.3.2";
src = fetchurl {
url = "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";
sha1 = "4970498be604c20c005d4f5c23aecd21d6b49099";
};
};
"fs.realpath-1.0.0" = {
name = "fs.realpath";
packageName = "fs.realpath";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
};
};
"fstream-1.0.11" = {
name = "fstream";
packageName = "fstream";
version = "1.0.11";
src = fetchurl {
url = "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz";
sha1 = "5c1fb1f117477114f0632a0eb4b71b3cb0fd3171";
};
};
"fstream-ignore-1.0.2" = {
name = "fstream-ignore";
packageName = "fstream-ignore";
version = "1.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.2.tgz";
sha1 = "18c891db01b782a74a7bff936a0f24997741c7ab";
};
};
"getpass-0.1.7" = {
name = "getpass";
packageName = "getpass";
version = "0.1.7";
src = fetchurl {
url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
};
};
"glob-7.1.2" = {
name = "glob";
packageName = "glob";
version = "7.1.2";
src = fetchurl {
url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";
sha512 = "08vjxzixc9dwc1hn5pd60yyij98krk2pr758aiga97r02ncvaqx1hidi95wk470k1v84gg4alls9bm52m77174z128bgf13b61x951h";
};
};
"graceful-fs-4.1.11" = {
name = "graceful-fs";
packageName = "graceful-fs";
version = "4.1.11";
src = fetchurl {
url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
};
};
"growl-1.10.3" = {
name = "growl";
packageName = "growl";
version = "1.10.3";
src = fetchurl {
url = "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz";
sha512 = "3aibvz85l13j140w4jjdk8939q6r7dnf8ay2licxgkaaldk7wbm093c1p5g7k5cg80rl0xslmczyraawfgdr82hhxn7rfsm1rn6rac4";
};
};
"har-schema-2.0.0" = {
name = "har-schema";
packageName = "har-schema";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
};
};
"har-validator-5.0.3" = {
name = "har-validator";
packageName = "har-validator";
version = "5.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz";
sha1 = "ba402c266194f15956ef15e0fcf242993f6a7dfd";
};
};
"has-flag-2.0.0" = {
name = "has-flag";
packageName = "has-flag";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz";
sha1 = "e8207af1cc7b30d446cc70b734b5e8be18f88d51";
};
};
"has-flag-3.0.0" = {
name = "has-flag";
packageName = "has-flag";
version = "3.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
};
};
"hawk-6.0.2" = {
name = "hawk";
packageName = "hawk";
version = "6.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz";
sha512 = "1nl2hjr2mnhj5jlaz8mh54z7acwz5j5idkch04qgjk78756gw5d0fjk4a2immil5ij9ijdssb9ndpryvnh2xpcbgcjv8lxybn330als";
};
};
"he-1.1.1" = {
name = "he";
packageName = "he";
version = "1.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/he/-/he-1.1.1.tgz";
sha1 = "93410fd21b009735151f8868c2f271f3427e23fd";
};
};
"hoek-4.2.1" = {
name = "hoek";
packageName = "hoek";
version = "4.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz";
sha512 = "1y8kprb3qldxqj31zai5n8dvhydsl9nn5w4rskhnbzzhldn6pm6n5lcyam3sfkb61a62d5m58k8im7z6ngwbd9cw9zp4zm4y7ckrf20";
};
};
"http-signature-1.2.0" = {
name = "http-signature";
packageName = "http-signature";
version = "1.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
};
};
"i-0.3.6" = {
name = "i";
packageName = "i";
version = "0.3.6";
src = fetchurl {
url = "https://registry.npmjs.org/i/-/i-0.3.6.tgz";
sha1 = "d96c92732076f072711b6b10fd7d4f65ad8ee23d";
};
};
"iconv-lite-0.4.19" = {
name = "iconv-lite";
packageName = "iconv-lite";
version = "0.4.19";
src = fetchurl {
url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz";
sha512 = "0jj1pdq3j9ak8cixn2kjp7ip8hf3xgnb85j4jr32yf9rry620v9072c0kk577mllfk1zl9wzs5ypwzbp7vbhf7j31d5rrqgwb0nldm1";
};
};
"ignore-3.3.7" = {
name = "ignore";
packageName = "ignore";
version = "3.3.7";
src = fetchurl {
url = "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz";
sha512 = "0f6xhxww989yic6hwdm8mbylcyakfkrrn22a39wdcc9k842xxyyhzfxkmi79s9gjk3rp3h07n265lf4n51z8yafpdm78d617dxbfqb0";
};
};
"inflight-1.0.6" = {
name = "inflight";
packageName = "inflight";
version = "1.0.6";
src = fetchurl {
url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
};
};
"inherits-2.0.1" = {
name = "inherits";
packageName = "inherits";
version = "2.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
};
};
"inherits-2.0.3" = {
name = "inherits";
packageName = "inherits";
version = "2.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
sha1 = "633c2c83e3da42a502f52466022480f4208261de";
};
};
"inquirer-5.2.0" = {
name = "inquirer";
packageName = "inquirer";
version = "5.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz";
sha512 = "18q95zmyca97iylvzibh193n81dp71yawcb56ib17inhq7g0nixmbx62j56bdv3d7lxsgwj8zw9zcmmhzjivx3wlb3b6a60jsf6dl0k";
};
};
"is-domain-0.0.1" = {
name = "is-domain";
packageName = "is-domain";
version = "0.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/is-domain/-/is-domain-0.0.1.tgz";
sha1 = "7ffb288d5cced6b07c4f2df91c9be9153511348e";
};
};
"is-fullwidth-code-point-1.0.0" = {
name = "is-fullwidth-code-point";
packageName = "is-fullwidth-code-point";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
};
};
"is-fullwidth-code-point-2.0.0" = {
name = "is-fullwidth-code-point";
packageName = "is-fullwidth-code-point";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
};
};
"is-promise-2.1.0" = {
name = "is-promise";
packageName = "is-promise";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz";
sha1 = "79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa";
};
};
"is-typedarray-1.0.0" = {
name = "is-typedarray";
packageName = "is-typedarray";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
};
};
"isstream-0.1.2" = {
name = "isstream";
packageName = "isstream";
version = "0.1.2";
src = fetchurl {
url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
};
};
"jsbn-0.1.1" = {
name = "jsbn";
packageName = "jsbn";
version = "0.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
};
};
"json-schema-0.2.3" = {
name = "json-schema";
packageName = "json-schema";
version = "0.2.3";
src = fetchurl {
url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
};
};
"json-schema-traverse-0.3.1" = {
name = "json-schema-traverse";
packageName = "json-schema-traverse";
version = "0.3.1";
src = fetchurl {
url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz";
sha1 = "349a6d44c53a51de89b40805c5d5e59b417d3340";
};
};
"json-stringify-safe-5.0.1" = {
name = "json-stringify-safe";
packageName = "json-stringify-safe";
version = "5.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
};
};
"jsprim-1.4.1" = {
name = "jsprim";
packageName = "jsprim";
version = "1.4.1";
src = fetchurl {
url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
};
};
"lodash-3.10.1" = {
name = "lodash";
packageName = "lodash";
version = "3.10.1";
src = fetchurl {
url = "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz";
sha1 = "5bf45e8e49ba4189e17d482789dfd15bd140b7b6";
};
};
"lodash-4.17.5" = {
name = "lodash";
packageName = "lodash";
version = "4.17.5";
src = fetchurl {
url = "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz";
sha512 = "11hikgyas884mz8a58vyixaahxbpdwljdw4cb6qp15xa3sfqikp2mm6wgv41jsl34nzsv1hkx9kw3nwczvas5p73whirmaz4sxggwmj";
};
};
"mime-db-1.33.0" = {
name = "mime-db";
packageName = "mime-db";
version = "1.33.0";
src = fetchurl {
url = "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz";
sha512 = "36xnw59ik9fqym00cmwb5nyzg0l03k70cp413f7639j93wgmzk1mh0xjc7i6zz3r6k9xnwh0g5cm5a1f3y8c6plgy4qld7fm887ywh4";
};
};
"mime-types-2.1.18" = {
name = "mime-types";
packageName = "mime-types";
version = "2.1.18";
src = fetchurl {
url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz";
sha512 = "22krj1kw7n9z10zdyx7smcaim4bzwqsqzhspwha06q58gcrxfp93hw2cd0vk5crhq5p2dwzqlpacg32lrmp5sjzb798zdzy35mdmkwm";
};
};
"mimic-fn-1.2.0" = {
name = "mimic-fn";
packageName = "mimic-fn";
version = "1.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz";
sha512 = "1clrrqw75rmpkw0x53axy8va2hq2gzynz9zb58m0xv1nh3lg81cv4dfdy7pk9vrlb9ydwmj6klpicwkv2bjx3m8aj4fi2ph3jxkizwd";
};
};
"minimatch-2.0.10" = {
name = "minimatch";
packageName = "minimatch";
version = "2.0.10";
src = fetchurl {
url = "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz";
sha1 = "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7";
};
};
"minimatch-3.0.4" = {
name = "minimatch";
packageName = "minimatch";
version = "3.0.4";
src = fetchurl {
url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
sha512 = "1879a3j85h92ypvb7lpv1dqpcxl49rqnbgs5la18zmj1yqhwl60c2m74254wbr5pp3znckqpkg9dvjyrz6hfz8b9vag5a3j910db4f8";
};
};
"minimist-0.0.10" = {
name = "minimist";
packageName = "minimist";
version = "0.0.10";
src = fetchurl {
url = "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz";
sha1 = "de3f98543dbf96082be48ad1a0c7cda836301dcf";
};
};
"minimist-0.0.8" = {
name = "minimist";
packageName = "minimist";
version = "0.0.8";
src = fetchurl {
url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
};
};
"minimist-1.1.1" = {
name = "minimist";
packageName = "minimist";
version = "1.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz";
sha1 = "1bc2bc71658cdca5712475684363615b0b4f695b";
};
};
"mkdirp-0.5.1" = {
name = "mkdirp";
packageName = "mkdirp";
version = "0.5.1";
src = fetchurl {
url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
};
};
"moniker-0.1.2" = {
name = "moniker";
packageName = "moniker";
version = "0.1.2";
src = fetchurl {
url = "https://registry.npmjs.org/moniker/-/moniker-0.1.2.tgz";
sha1 = "872dfba575dcea8fa04a5135b13d5f24beccc97e";
};
};
"ms-2.0.0" = {
name = "ms";
packageName = "ms";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
};
};
"mute-stream-0.0.7" = {
name = "mute-stream";
packageName = "mute-stream";
version = "0.0.7";
src = fetchurl {
url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz";
sha1 = "3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab";
};
};
"ncp-0.4.2" = {
name = "ncp";
packageName = "ncp";
version = "0.4.2";
src = fetchurl {
url = "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz";
sha1 = "abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574";
};
};
"netrc-0.1.4" = {
name = "netrc";
packageName = "netrc";
version = "0.1.4";
src = fetchurl {
url = "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz";
sha1 = "6be94fcaca8d77ade0a9670dc460914c94472444";
};
};
"number-is-nan-1.0.1" = {
name = "number-is-nan";
packageName = "number-is-nan";
version = "1.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
sha1 = "097b602b53422a522c1afb8790318336941a011d";
};
};
"oauth-sign-0.8.2" = {
name = "oauth-sign";
packageName = "oauth-sign";
version = "0.8.2";
src = fetchurl {
url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";
sha1 = "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43";
};
};
"once-1.4.0" = {
name = "once";
packageName = "once";
version = "1.4.0";
src = fetchurl {
url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
};
};
"onetime-2.0.1" = {
name = "onetime";
packageName = "onetime";
version = "2.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz";
sha1 = "067428230fd67443b2794b22bba528b6867962d4";
};
};
"optimist-0.6.1" = {
name = "optimist";
packageName = "optimist";
version = "0.6.1";
src = fetchurl {
url = "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz";
sha1 = "da3ea74686fa21a19a111c326e90eb15a0196686";
};
};
"os-tmpdir-1.0.2" = {
name = "os-tmpdir";
packageName = "os-tmpdir";
version = "1.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
};
};
"path-is-absolute-1.0.1" = {
name = "path-is-absolute";
packageName = "path-is-absolute";
version = "1.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
};
};
"performance-now-2.1.0" = {
name = "performance-now";
packageName = "performance-now";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
};
};
"pkginfo-0.3.1" = {
name = "pkginfo";
packageName = "pkginfo";
version = "0.3.1";
src = fetchurl {
url = "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz";
sha1 = "5b29f6a81f70717142e09e765bbeab97b4f81e21";
};
};
"pkginfo-0.4.1" = {
name = "pkginfo";
packageName = "pkginfo";
version = "0.4.1";
src = fetchurl {
url = "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz";
sha1 = "b5418ef0439de5425fc4995042dced14fb2a84ff";
};
};
"progress-1.1.8" = {
name = "progress";
packageName = "progress";
version = "1.1.8";
src = fetchurl {
url = "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz";
sha1 = "e260c78f6161cdd9b0e56cc3e0a85de17c7a57be";
};
};
"prompt-0.2.14" = {
name = "prompt";
packageName = "prompt";
version = "0.2.14";
src = fetchurl {
url = "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz";
sha1 = "57754f64f543fd7b0845707c818ece618f05ffdc";
};
};
"punycode-1.4.1" = {
name = "punycode";
packageName = "punycode";
version = "1.4.1";
src = fetchurl {
url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
};
};
"qs-6.5.1" = {
name = "qs";
packageName = "qs";
version = "6.5.1";
src = fetchurl {
url = "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz";
sha512 = "3waqapyj1k4g135sgj636rmswiaixq19is1rw0rpv4qp6k7dl0a9nwy06m7yl5lbdk9p6xpwwngnggbzlzaz6rh11c86j2nvnnf273r";
};
};
"read-1.0.5" = {
name = "read";
packageName = "read";
version = "1.0.5";
src = fetchurl {
url = "https://registry.npmjs.org/read/-/read-1.0.5.tgz";
sha1 = "007a3d169478aa710a491727e453effb92e76203";
};
};
"request-2.83.0" = {
name = "request";
packageName = "request";
version = "2.83.0";
src = fetchurl {
url = "https://registry.npmjs.org/request/-/request-2.83.0.tgz";
sha512 = "0by1djkn836sqd9pk2c777wcjvp34qbk1plx7s4lmykljrblpjc64dvn6ni2vyxsbyk33wnl6avym8vgw0ggr4226xakck8mw7y07cm";
};
};
"resolve-0.6.3" = {
name = "resolve";
packageName = "resolve";
version = "0.6.3";
src = fetchurl {
url = "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz";
sha1 = "dd957982e7e736debdf53b58a4dd91754575dd46";
};
};
"restore-cursor-2.0.0" = {
name = "restore-cursor";
packageName = "restore-cursor";
version = "2.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz";
sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
};
};
"revalidator-0.1.8" = {
name = "revalidator";
packageName = "revalidator";
version = "0.1.8";
src = fetchurl {
url = "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz";
sha1 = "fece61bfa0c1b52a206bd6b18198184bdd523a3b";
};
};
"rimraf-2.6.2" = {
name = "rimraf";
packageName = "rimraf";
version = "2.6.2";
src = fetchurl {
url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz";
sha512 = "3kmrqh8xli7rzfm8wc6j9lp0c6vml172iv3z088an9xlwl1xvkvh3fn92za66ms4c9yww80qa5kan31k1z1ypqvkchmh1mznb09xdwn";
};
};
"run-async-2.3.0" = {
name = "run-async";
packageName = "run-async";
version = "2.3.0";
src = fetchurl {
url = "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz";
sha1 = "0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0";
};
};
"rxjs-5.5.8" = {
name = "rxjs";
packageName = "rxjs";
version = "5.5.8";
src = fetchurl {
url = "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz";
sha512 = "32whnkvnay58zbcwimj3lpagg52k7swjdcys6i14a0im2hj1svh602bpvpb3zrqv36k96a1gsjjzbjxvfy6aj89i838l06mxsiflgh7";
};
};
"safe-buffer-5.1.1" = {
name = "safe-buffer";
packageName = "safe-buffer";
version = "5.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz";
sha512 = "1p28rllll1w65yzq5azi4izx962399xdsdlfbaynn7vmp981hiss05jhiy9hm7sbbfk3b4dhlcv0zy07fc59mnc07hdv6wcgqkcvawh";
};
};
"signal-exit-3.0.2" = {
name = "signal-exit";
packageName = "signal-exit";
version = "3.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
};
};
"sntp-2.1.0" = {
name = "sntp";
packageName = "sntp";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz";
sha512 = "0k2smmr24w5hb1cpql6vcgh58vzp4pmh9anf0bgz3arlsgq1mapnlq9fjqr6xs10aq1cmxaw987fwknqi62frax0fvs9bj3q3kmpg8l";
};
};
"split-0.3.1" = {
name = "split";
packageName = "split";
version = "0.3.1";
src = fetchurl {
url = "https://registry.npmjs.org/split/-/split-0.3.1.tgz";
sha1 = "cebcf142bf61bbb64b141628e6db482a2914654c";
};
};
"sshpk-1.14.1" = {
name = "sshpk";
packageName = "sshpk";
version = "1.14.1";
src = fetchurl {
url = "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz";
sha1 = "130f5975eddad963f1d56f92b9ac6c51fa9f83eb";
};
};
"stack-trace-0.0.10" = {
name = "stack-trace";
packageName = "stack-trace";
version = "0.0.10";
src = fetchurl {
url = "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz";
sha1 = "547c70b347e8d32b4e108ea1a2a159e5fdde19c0";
};
};
"string-width-1.0.2" = {
name = "string-width";
packageName = "string-width";
version = "1.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
};
};
"string-width-2.1.1" = {
name = "string-width";
packageName = "string-width";
version = "2.1.1";
src = fetchurl {
url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
sha512 = "29s1fqgr4mnhfxwczgdghfmmc1f792m9hysvcjxw2h5lfj8ndf2b6gm02m96qk5m75g4aisijvng4pk618anwbr8i9ay2jyszkqgslw";
};
};
"stringstream-0.0.5" = {
name = "stringstream";
packageName = "stringstream";
version = "0.0.5";
src = fetchurl {
url = "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz";
sha1 = "4e484cd4de5a0bbbee18e46307710a8a81621878";
};
};
"strip-ansi-3.0.1" = {
name = "strip-ansi";
packageName = "strip-ansi";
version = "3.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
};
};
"strip-ansi-4.0.0" = {
name = "strip-ansi";
packageName = "strip-ansi";
version = "4.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
};
};
"strip-json-comments-1.0.4" = {
name = "strip-json-comments";
packageName = "strip-json-comments";
version = "1.0.4";
src = fetchurl {
url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
};
};
"supports-color-4.4.0" = {
name = "supports-color";
packageName = "supports-color";
version = "4.4.0";
src = fetchurl {
url = "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz";
sha512 = "1flwwfdd7gg94xrc0b2ard3qjx4cpy600q49gx43y8pzvs7j56q78bjhv8mk18vgbggr4fd11jda8ck5cdrkc5jcjs04nlp7kwbg85c";
};
};
"supports-color-5.3.0" = {
name = "supports-color";
packageName = "supports-color";
version = "5.3.0";
src = fetchurl {
url = "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz";
sha512 = "0v9skvg8c5hgqfsm98p7d7hisk11syjdvl3nxid3ik572hbjwv4vyzws7q0n1yz8mvb1asbk00838fi09hyfskrng54icn8nbag98yi";
};
};
"surge-ignore-0.2.0" = {
name = "surge-ignore";
packageName = "surge-ignore";
version = "0.2.0";
src = fetchurl {
url = "https://registry.npmjs.org/surge-ignore/-/surge-ignore-0.2.0.tgz";
sha1 = "5a7f8a20a71188cf9e75a2cfe8eb182de90daf3b";
};
};
"symbol-observable-1.0.1" = {
name = "symbol-observable";
packageName = "symbol-observable";
version = "1.0.1";
src = fetchurl {
url = "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz";
sha1 = "8340fc4702c3122df5d22288f88283f513d3fdd4";
};
};
"tarr-1.0.3" = {
name = "tarr";
packageName = "tarr";
version = "1.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/tarr/-/tarr-1.0.3.tgz";
sha512 = "16yhcqf5l9vhranyz371qx2jrrqvd5bmamfn24rjd76zhrxh6vnvhblrrkd7vra04yqmr61br94sgmiyf68q81a2czihawxqr2kj7bb";
};
};
"through-2.3.8" = {
name = "through";
packageName = "through";
version = "2.3.8";
src = fetchurl {
url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
};
};
"tmp-0.0.33" = {
name = "tmp";
packageName = "tmp";
version = "0.0.33";
src = fetchurl {
url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
sha512 = "0drg2bck1cj8677rgs1l98v7vqaxawcqh6ja87qilwnd719l5y0lzv5ssn3pcwa37fdbg4188y6x15a90vkllyvfpd9v7fai2b8j44d";
};
};
"tough-cookie-2.3.4" = {
name = "tough-cookie";
packageName = "tough-cookie";
version = "2.3.4";
src = fetchurl {
url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz";
sha512 = "0ncm6j3cjq1f26mzjf04k9bkw1b08w53s4qa3a11c1bdj4pgnqv1422c1xs5jyy6y1psppjx52fhagq5zkjkgrcpdkxcdiry96r77jd";
};
};
"tunnel-agent-0.6.0" = {
name = "tunnel-agent";
packageName = "tunnel-agent";
version = "0.6.0";
src = fetchurl {
url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
};
};
"tweetnacl-0.14.5" = {
name = "tweetnacl";
packageName = "tweetnacl";
version = "0.14.5";
src = fetchurl {
url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
};
};
"url-parse-as-address-1.0.0" = {
name = "url-parse-as-address";
packageName = "url-parse-as-address";
version = "1.0.0";
src = fetchurl {
url = "https://registry.npmjs.org/url-parse-as-address/-/url-parse-as-address-1.0.0.tgz";
sha1 = "fb80901883f338b3cbed3538f5faa26adaf7f2e7";
};
};
"util-0.10.3" = {
name = "util";
packageName = "util";
version = "0.10.3";
src = fetchurl {
url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
};
};
"utile-0.2.1" = {
name = "utile";
packageName = "utile";
version = "0.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz";
sha1 = "930c88e99098d6220834c356cbd9a770522d90d7";
};
};
"uuid-3.2.1" = {
name = "uuid";
packageName = "uuid";
version = "3.2.1";
src = fetchurl {
url = "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz";
sha512 = "0843vl1c974n8kw5kn0kvhvhwk8y8jydr0xkwwl2963xxmkw4ingk6xj9c8m48jw2i95giglxzq5aw5v5mij9kv7fzln8pxav1cr6cd";
};
};
"verror-1.10.0" = {
name = "verror";
packageName = "verror";
version = "1.10.0";
src = fetchurl {
url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
};
};
"winston-0.8.3" = {
name = "winston";
packageName = "winston";
version = "0.8.3";
src = fetchurl {
url = "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz";
sha1 = "64b6abf4cd01adcaefd5009393b1d8e8bec19db0";
};
};
"wordwrap-0.0.3" = {
name = "wordwrap";
packageName = "wordwrap";
version = "0.0.3";
src = fetchurl {
url = "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz";
sha1 = "a3d5da6cd5c0bc0008d37234bbaf1bed63059107";
};
};
"wrappy-1.0.2" = {
name = "wrappy";
packageName = "wrappy";
version = "1.0.2";
src = fetchurl {
url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
};
};
};
in
{
npm = nodeEnv.buildNodePackage {
name = "npm";
packageName = "npm";
version = "5.8.0";
src = fetchurl {
url = "https://registry.npmjs.org/npm/-/npm-5.8.0.tgz";
sha512 = "32zs775qksijpj23rwly4h8gs435lbsgaxzw6dmyjjg3i8qd40bmmadv3ac9mdxd0cd2x0m3ncsqa0j5vkmkvh8dknn0j9d1k6ig30f";
};
buildInputs = globalBuildInputs;
meta = {
description = "a package manager for JavaScript";
homepage = https://docs.npmjs.com/;
license = "Artistic-2.0";
};
production = true;
bypassCache = false;
};
coffeelint = nodeEnv.buildNodePackage {
name = "coffeelint";
packageName = "coffeelint";
version = "2.1.0";
src = fetchurl {
url = "https://registry.npmjs.org/coffeelint/-/coffeelint-2.1.0.tgz";
sha1 = "af65df3634e999d9ac01480736c36d3cd2f5dad8";
};
dependencies = [
sources."coffeescript-2.2.3"
(sources."glob-7.1.2" // {
dependencies = [
sources."fs.realpath-1.0.0"
(sources."inflight-1.0.6" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."inherits-2.0.3"
(sources."minimatch-3.0.4" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
(sources."once-1.4.0" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."path-is-absolute-1.0.1"
];
})
sources."ignore-3.3.7"
(sources."optimist-0.6.1" // {
dependencies = [
sources."minimist-0.0.10"
sources."wordwrap-0.0.3"
];
})
sources."resolve-0.6.3"
sources."strip-json-comments-1.0.4"
];
buildInputs = globalBuildInputs;
meta = {
description = "Lint your CoffeeScript";
homepage = http://www.coffeelint.org/;
license = "MIT";
};
production = true;
bypassCache = false;
};
mocha = nodeEnv.buildNodePackage {
name = "mocha";
packageName = "mocha";
version = "5.0.5";
src = fetchurl {
url = "https://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz";
sha512 = "20cyp9x4b3gfrd50w8dcfkm0dv2mc6z0ikvfpkc8dzca6hppslgn0yiw2qdzc4ggf234kzcdvs0hw7lnv7ywilaml4w39vr6r93ghyw";
};
dependencies = [
sources."browser-stdout-1.3.1"
sources."commander-2.11.0"
(sources."debug-3.1.0" // {
dependencies = [
sources."ms-2.0.0"
];
})
sources."diff-3.5.0"
sources."escape-string-regexp-1.0.5"
(sources."glob-7.1.2" // {
dependencies = [
sources."fs.realpath-1.0.0"
(sources."inflight-1.0.6" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."inherits-2.0.3"
(sources."minimatch-3.0.4" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
(sources."once-1.4.0" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."path-is-absolute-1.0.1"
];
})
sources."growl-1.10.3"
sources."he-1.1.1"
(sources."mkdirp-0.5.1" // {
dependencies = [
sources."minimist-0.0.8"
];
})
(sources."supports-color-4.4.0" // {
dependencies = [
sources."has-flag-2.0.0"
];
})
];
buildInputs = globalBuildInputs;
meta = {
description = "simple, flexible, fun test framework";
homepage = https://mochajs.org/;
license = "MIT";
};
production = true;
bypassCache = false;
};
"assert" = nodeEnv.buildNodePackage {
name = "assert";
packageName = "assert";
version = "1.4.1";
src = fetchurl {
url = "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz";
sha1 = "99912d591836b5a6f5b345c0f07eefc08fc65d91";
};
dependencies = [
(sources."util-0.10.3" // {
dependencies = [
sources."inherits-2.0.1"
];
})
];
buildInputs = globalBuildInputs;
meta = {
description = "commonjs assert - node.js api compatible";
homepage = https://github.com/defunctzombie/commonjs-assert;
license = "MIT";
};
production = true;
bypassCache = false;
};
surge = nodeEnv.buildNodePackage {
name = "surge";
packageName = "surge";
version = "0.20.1";
src = fetchurl {
url = "https://registry.npmjs.org/surge/-/surge-0.20.1.tgz";
sha512 = "0ab0v5zrd04qrbxz6v5zizfxgkfbwvg3pvv0giyimgz4cxjn94ri8d05dhziw11k6imkwl0lx9gdsn7n1im9dlakr56636fqk7j4zzw";
};
dependencies = [
(sources."cli-table2-0.2.0" // {
dependencies = [
sources."colors-1.2.1"
sources."lodash-3.10.1"
(sources."string-width-1.0.2" // {
dependencies = [
sources."code-point-at-1.1.0"
(sources."is-fullwidth-code-point-1.0.0" // {
dependencies = [
sources."number-is-nan-1.0.1"
];
})
(sources."strip-ansi-3.0.1" // {
dependencies = [
sources."ansi-regex-2.1.1"
];
})
];
})
];
})
(sources."du-0.1.0" // {
dependencies = [
sources."async-0.1.22"
];
})
(sources."fstream-ignore-1.0.2" // {
dependencies = [
(sources."fstream-1.0.11" // {
dependencies = [
sources."graceful-fs-4.1.11"
(sources."mkdirp-0.5.1" // {
dependencies = [
sources."minimist-0.0.8"
];
})
(sources."rimraf-2.6.2" // {
dependencies = [
(sources."glob-7.1.2" // {
dependencies = [
sources."fs.realpath-1.0.0"
(sources."inflight-1.0.6" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
(sources."minimatch-3.0.4" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
(sources."once-1.4.0" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."path-is-absolute-1.0.1"
];
})
];
})
];
})
sources."inherits-2.0.3"
(sources."minimatch-2.0.10" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
];
})
(sources."inquirer-5.2.0" // {
dependencies = [
sources."ansi-escapes-3.1.0"
(sources."chalk-2.3.2" // {
dependencies = [
(sources."ansi-styles-3.2.1" // {
dependencies = [
(sources."color-convert-1.9.1" // {
dependencies = [
sources."color-name-1.1.3"
];
})
];
})
sources."escape-string-regexp-1.0.5"
(sources."supports-color-5.3.0" // {
dependencies = [
sources."has-flag-3.0.0"
];
})
];
})
(sources."cli-cursor-2.1.0" // {
dependencies = [
(sources."restore-cursor-2.0.0" // {
dependencies = [
(sources."onetime-2.0.1" // {
dependencies = [
sources."mimic-fn-1.2.0"
];
})
sources."signal-exit-3.0.2"
];
})
];
})
sources."cli-width-2.2.0"
(sources."external-editor-2.1.0" // {
dependencies = [
sources."chardet-0.4.2"
sources."iconv-lite-0.4.19"
(sources."tmp-0.0.33" // {
dependencies = [
sources."os-tmpdir-1.0.2"
];
})
];
})
(sources."figures-2.0.0" // {
dependencies = [
sources."escape-string-regexp-1.0.5"
];
})
sources."lodash-4.17.5"
sources."mute-stream-0.0.7"
(sources."run-async-2.3.0" // {
dependencies = [
sources."is-promise-2.1.0"
];
})
(sources."rxjs-5.5.8" // {
dependencies = [
sources."symbol-observable-1.0.1"
];
})
(sources."string-width-2.1.1" // {
dependencies = [
sources."is-fullwidth-code-point-2.0.0"
];
})
(sources."strip-ansi-4.0.0" // {
dependencies = [
sources."ansi-regex-3.0.0"
];
})
sources."through-2.3.8"
];
})
sources."is-domain-0.0.1"
sources."minimist-1.1.1"
sources."moniker-0.1.2"
sources."netrc-0.1.4"
sources."progress-1.1.8"
(sources."prompt-0.2.14" // {
dependencies = [
sources."pkginfo-0.4.1"
sources."revalidator-0.1.8"
(sources."utile-0.2.1" // {
dependencies = [
sources."async-0.2.10"
sources."deep-equal-1.0.1"
sources."i-0.3.6"
(sources."mkdirp-0.5.1" // {
dependencies = [
sources."minimist-0.0.8"
];
})
sources."ncp-0.4.2"
(sources."rimraf-2.6.2" // {
dependencies = [
(sources."glob-7.1.2" // {
dependencies = [
sources."fs.realpath-1.0.0"
(sources."inflight-1.0.6" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."inherits-2.0.3"
(sources."minimatch-3.0.4" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
(sources."once-1.4.0" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."path-is-absolute-1.0.1"
];
})
];
})
];
})
(sources."winston-0.8.3" // {
dependencies = [
sources."async-0.2.10"
sources."colors-0.6.2"
sources."cycle-1.0.3"
sources."eyes-0.1.8"
sources."isstream-0.1.2"
sources."pkginfo-0.3.1"
sources."stack-trace-0.0.10"
];
})
];
})
(sources."read-1.0.5" // {
dependencies = [
sources."mute-stream-0.0.7"
];
})
(sources."request-2.83.0" // {
dependencies = [
sources."aws-sign2-0.7.0"
sources."aws4-1.6.0"
sources."caseless-0.12.0"
(sources."combined-stream-1.0.6" // {
dependencies = [
sources."delayed-stream-1.0.0"
];
})
sources."extend-3.0.1"
sources."forever-agent-0.6.1"
(sources."form-data-2.3.2" // {
dependencies = [
sources."asynckit-0.4.0"
];
})
(sources."har-validator-5.0.3" // {
dependencies = [
(sources."ajv-5.5.2" // {
dependencies = [
sources."co-4.6.0"
sources."fast-deep-equal-1.1.0"
sources."fast-json-stable-stringify-2.0.0"
sources."json-schema-traverse-0.3.1"
];
})
sources."har-schema-2.0.0"
];
})
(sources."hawk-6.0.2" // {
dependencies = [
sources."boom-4.3.1"
(sources."cryptiles-3.1.2" // {
dependencies = [
sources."boom-5.2.0"
];
})
sources."hoek-4.2.1"
sources."sntp-2.1.0"
];
})
(sources."http-signature-1.2.0" // {
dependencies = [
sources."assert-plus-1.0.0"
(sources."jsprim-1.4.1" // {
dependencies = [
sources."extsprintf-1.3.0"
sources."json-schema-0.2.3"
(sources."verror-1.10.0" // {
dependencies = [
sources."core-util-is-1.0.2"
];
})
];
})
(sources."sshpk-1.14.1" // {
dependencies = [
sources."asn1-0.2.3"
sources."bcrypt-pbkdf-1.0.1"
sources."dashdash-1.14.1"
sources."ecc-jsbn-0.1.1"
sources."getpass-0.1.7"
sources."jsbn-0.1.1"
sources."tweetnacl-0.14.5"
];
})
];
})
sources."is-typedarray-1.0.0"
sources."isstream-0.1.2"
sources."json-stringify-safe-5.0.1"
(sources."mime-types-2.1.18" // {
dependencies = [
sources."mime-db-1.33.0"
];
})
sources."oauth-sign-0.8.2"
sources."performance-now-2.1.0"
sources."qs-6.5.1"
sources."safe-buffer-5.1.1"
sources."stringstream-0.0.5"
(sources."tough-cookie-2.3.4" // {
dependencies = [
sources."punycode-1.4.1"
];
})
sources."tunnel-agent-0.6.0"
sources."uuid-3.2.1"
];
})
(sources."split-0.3.1" // {
dependencies = [
sources."through-2.3.8"
];
})
sources."surge-ignore-0.2.0"
(sources."tarr-1.0.3" // {
dependencies = [
sources."block-stream-0.0.9"
(sources."fstream-1.0.11" // {
dependencies = [
sources."graceful-fs-4.1.11"
(sources."mkdirp-0.5.1" // {
dependencies = [
sources."minimist-0.0.8"
];
})
(sources."rimraf-2.6.2" // {
dependencies = [
(sources."glob-7.1.2" // {
dependencies = [
sources."fs.realpath-1.0.0"
(sources."inflight-1.0.6" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
(sources."minimatch-3.0.4" // {
dependencies = [
(sources."brace-expansion-1.1.11" // {
dependencies = [
sources."balanced-match-1.0.0"
sources."concat-map-0.0.1"
];
})
];
})
(sources."once-1.4.0" // {
dependencies = [
sources."wrappy-1.0.2"
];
})
sources."path-is-absolute-1.0.1"
];
})
];
})
];
})
sources."inherits-2.0.3"
];
})
sources."url-parse-as-address-1.0.0"
];
buildInputs = globalBuildInputs;
meta = {
description = "CDN for front-end developers";
homepage = https://github.com/sintaxi/surge;
license = "ISC";
};
production = true;
bypassCache = false;
};
}
# This file has been generated by node2nix 1.5.3. Do not edit!
{pkgs ? import <nixpkgs> {
inherit system;
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs"}:
let
nodeEnv = import ./node-env.nix {
inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
inherit nodejs;
libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
};
in
import ./node-packages.nix {
inherit (pkgs) fetchurl fetchgit;
inherit nodeEnv;
}
# generated using pypi2nix tool (version: 1.8.1)
# See more at: https://github.com/garbas/pypi2nix
#
# COMMAND:
# pypi2nix -V 3.6 -r requirements.txt
#
{ pkgs ? import <nixpkgs> {}
}:
let
inherit (pkgs) makeWrapper;
inherit (pkgs.stdenv.lib) fix' extends inNixShell;
pythonPackages =
import "${toString pkgs.path}/pkgs/top-level/python-packages.nix" {
inherit pkgs;
inherit (pkgs) stdenv;
python = pkgs.python36;
# patching pip so it does not try to remove files when running nix-shell
overrides =
self: super: {
bootstrapped-pip = super.bootstrapped-pip.overrideDerivation (old: {
patchPhase = old.patchPhase + ''
sed -i \
-e "s|paths_to_remove.remove(auto_confirm)|#paths_to_remove.remove(auto_confirm)|" \
-e "s|self.uninstalled = paths_to_remove|#self.uninstalled = paths_to_remove|" \
$out/${pkgs.python35.sitePackages}/pip/req/req_install.py
'';
});
};
};
commonBuildInputs = [];
commonDoCheck = false;
withPackages = pkgs':
let
pkgs = builtins.removeAttrs pkgs' ["__unfix__"];
interpreter = pythonPackages.buildPythonPackage {
name = "python36-interpreter";
buildInputs = [ makeWrapper ] ++ (builtins.attrValues pkgs);
buildCommand = ''
mkdir -p $out/bin
ln -s ${pythonPackages.python.interpreter} \
$out/bin/${pythonPackages.python.executable}
for dep in ${builtins.concatStringsSep " "
(builtins.attrValues pkgs)}; do
if [ -d "$dep/bin" ]; then
for prog in "$dep/bin/"*; do
if [ -x "$prog" ] && [ -f "$prog" ]; then
ln -s $prog $out/bin/`basename $prog`
fi
done
fi
done
for prog in "$out/bin/"*; do
wrapProgram "$prog" --prefix PYTHONPATH : "$PYTHONPATH"
done
pushd $out/bin
ln -s ${pythonPackages.python.executable} python
ln -s ${pythonPackages.python.executable} \
python3
popd
'';
passthru.interpreter = pythonPackages.python;
};
in {
__old = pythonPackages;
inherit interpreter;
mkDerivation = pythonPackages.buildPythonPackage;
packages = pkgs;
overrideDerivation = drv: f:
pythonPackages.buildPythonPackage (
drv.drvAttrs // f drv.drvAttrs // { meta = drv.meta; }
);
withPackages = pkgs'':
withPackages (pkgs // pkgs'');
};
python = withPackages {};
generated = self: {
"PyYAML" = python.mkDerivation {
name = "PyYAML-3.12";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz"; sha256 = "592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [ ];
meta = with pkgs.stdenv.lib; {
homepage = "http://pyyaml.org/wiki/PyYAML";
license = licenses.mit;
description = "YAML parser and emitter for Python";
};
};
"docopt" = python.mkDerivation {
name = "docopt-0.6.2";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz"; sha256 = "49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [ ];
meta = with pkgs.stdenv.lib; {
homepage = "http://docopt.org";
license = licenses.mit;
description = "Pythonic argument parser, that will make you smile";
};
};
"progressbar2" = python.mkDerivation {
name = "progressbar2-3.34.3";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/2b/a4/f3928e11d2540c1ac92e7b2617fa512b6a4332c9cbbf4ebd13844e9cd8f8/progressbar2-3.34.3.tar.gz"; sha256 = "bdf07125292ed994215980e0859c22ac150338b72371b2c493fb2d6072e52fbe"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [
self."python-utils"
];
meta = with pkgs.stdenv.lib; {
homepage = "https://github.com/WoLpH/python-progressbar";
license = licenses.bsdOriginal;
description = "A Python Progressbar library to provide visual (yet text based) progress to long running operations.";
};
};
"pykwalify" = python.mkDerivation {
name = "pykwalify-1.6.0";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/ae/82/1774cdd9039301f20e36ae5bf36fa07683ac2d0c42a3d51cf3e0690210c1/pykwalify-1.6.0.tar.gz"; sha256 = "2298fafe84dc68161835f62a1b8d0d72dd749d5742baa196224882a6ac2ff844"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [
self."PyYAML"
self."docopt"
self."python-dateutil"
];
meta = with pkgs.stdenv.lib; {
homepage = "http://github.com/grokzen/pykwalify";
license = licenses.mit;
description = "Python lib/cli for JSON/YAML schema validation";
};
};
"python-dateutil" = python.mkDerivation {
name = "python-dateutil-2.6.1";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/54/bb/f1db86504f7a49e1d9b9301531181b00a1c7325dc85a29160ee3eaa73a54/python-dateutil-2.6.1.tar.gz"; sha256 = "891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [
self."six"
];
meta = with pkgs.stdenv.lib; {
homepage = "https://dateutil.readthedocs.io";
license = licenses.bsdOriginal;
description = "Extensions to the standard Python datetime module";
};
};
"python-utils" = python.mkDerivation {
name = "python-utils-2.2.0";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/19/f2/2c4c8c2a92325d0c70ef21647583179058ae64d07429e30ab2476624e40b/python-utils-2.2.0.tar.gz"; sha256 = "d9b8ab1f2a7c8f26ed16a47505f589a5d51c0d1e55869ab40c20e1c4b42af2c0"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [
self."six"
];
meta = with pkgs.stdenv.lib; {
homepage = "https://github.com/WoLpH/python-utils";
license = licenses.bsdOriginal;
description = "Python Utils is a module with some convenient utilities not included with the standard Python install";
};
};
"six" = python.mkDerivation {
name = "six-1.11.0";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; sha256 = "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [ ];
meta = with pkgs.stdenv.lib; {
homepage = "http://pypi.python.org/pypi/six/";
license = licenses.mit;
description = "Python 2 and 3 compatibility utilities";
};
};
"vega" = python.mkDerivation {
name = "vega-0.5.0";
src = pkgs.fetchurl { url = "https://pypi.python.org/packages/f8/50/54a1f852b72d45885dfde7f07950b7f5cd176dd551785b9b32725a004b0c/vega-0.5.0.tar.gz"; sha256 = "9871bce3a00bb775d9f7f8212aa237f99f11ca7cfe6ecf246773f5559f20c38c"; };
doCheck = commonDoCheck;
buildInputs = commonBuildInputs;
propagatedBuildInputs = [ ];
meta = with pkgs.stdenv.lib; {
homepage = "http://github.com/vega/ipyvega/";
license = licenses.bsdOriginal;
description = "IPyVega: An IPython/Jupyter widget for Vega and Vega-Lite";
};
};
};
localOverridesFile = ./requirements_override.nix;
overrides = import localOverridesFile { inherit pkgs python; };
commonOverrides = [
];
allOverrides =
(if (builtins.pathExists localOverridesFile)
then [overrides] else [] ) ++ commonOverrides;
in python.withPackages
(fix' (pkgs.lib.fold
extends
generated
allOverrides
)
)
progressbar2
pykwalify
vega
docopt==0.6.2
progressbar2==3.34.3
pykwalify==1.6.0
python-dateutil==2.6.1
python-utils==2.2.0
PyYAML==3.12
six==1.11.0
vega==0.5.0
{ pkgs, python }:
self: super: {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment