Add a couple of timetrackers for evaluation
diff --git a/src/apps/personal/asciinema.nix b/src/apps/personal/asciinema.nix
index 319a51e..c18a170 100644
--- a/src/apps/personal/asciinema.nix
+++ b/src/apps/personal/asciinema.nix
@@ -1,3 +1,12 @@
-{ pkgs, ... }: {
- home.packages = [ pkgs.asciinema ];
+{ pkgs, pkgs-21-11, ... }: {
+ home.packages = [ pkgs.asciinema ((import ./asciinema/default.nix { pkgs = pkgs; nodejs = pkgs.nodejs; }).package.override {
+ buildInputs = [ pkgs.makeWrapper ];
+
+ preRebuild = ''
+ wrapProgram $out/lib/node_modules/asciicast2gif-nix/node_modules/asciicast2gif/asciicast2gif --suffix PATH : ${pkgs.lib.makeBinPath [ pkgs.imagemagick pkgs.gifsicle pkgs-21-11.phantomjs2 ]}
+ export PATH=$PATH:${pkgs.lib.makeBinPath [ pkgs.imagemagick pkgs.gifsicle pkgs-21-11.phantomjs2 ]}
+ mkdir -p $out/bin
+ ln -s $out/lib/node_modules/asciicast2gif-nix/node_modules/asciicast2gif/asciicast2gif $out/bin/asciicast2gif
+ '';
+ }) ];
}
diff --git a/src/apps/personal/asciinema/default.nix b/src/apps/personal/asciinema/default.nix
new file mode 100644
index 0000000..a10eaa3
--- /dev/null
+++ b/src/apps/personal/asciinema/default.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+ inherit system;
+ }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
+
+let
+ nodeEnv = import ./node-env.nix {
+ inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
+ inherit pkgs nodejs;
+ libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+ };
+in
+import ./node-packages.nix {
+ inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+ inherit nodeEnv;
+}
diff --git a/src/apps/personal/asciinema/node-env.nix b/src/apps/personal/asciinema/node-env.nix
new file mode 100644
index 0000000..2590dd2
--- /dev/null
+++ b/src/apps/personal/asciinema/node-env.nix
@@ -0,0 +1,598 @@
+# This file originates from node2nix
+
+{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}:
+
+let
+ # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
+ utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
+
+ 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 --delay-directory-restore
+ 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 | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+ '';
+ 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
+ '';
+ };
+
+ # Common shell logic
+ installPackage = writeShellScript "install-package" ''
+ installPackage() {
+ local packageName=$1 src=$2
+
+ local strippedName
+
+ local 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 -exec 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
+
+ # Change to the package directory to install dependencies
+ cd "$DIR/$packageName"
+ }
+ '';
+
+ # Bundle the dependencies of the package
+ #
+ # Only include dependencies if they don't exist. They may also be bundled in the package.
+ includeDependencies = {dependencies}:
+ lib.optionalString (dependencies != []) (
+ ''
+ mkdir -p node_modules
+ cd node_modules
+ ''
+ + (lib.concatMapStrings (dependency:
+ ''
+ if [ ! -e "${dependency.packageName}" ]; then
+ ${composePackage dependency}
+ fi
+ ''
+ ) dependencies)
+ + ''
+ cd ..
+ ''
+ );
+
+ # Recursively composes the dependencies of a package
+ composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+ builtins.addErrorContext "while evaluating node package '${packageName}'" ''
+ installPackage "${packageName}" "${src}"
+ ${includeDependencies { inherit dependencies; }}
+ cd ..
+ ${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"}
+
+ ${lib.optionalString (dependencies != [])
+ ''
+ if [ -d node_modules ]
+ then
+ cd node_modules
+ ${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 ..
+ ${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.
+ }
+
+ if(dependency.resolved) {
+ packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+ } else {
+ packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+ }
+
+ if(dependency.from !== undefined) { // Adopt from property if one has been provided
+ packageObj["_from"] = dependency.from;
+ }
+
+ 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(![1, 2].includes(packageLock.lockfileVersion)) {
+ process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\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));
+ '';
+ };
+
+ prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+ let
+ forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+ in
+ ''
+ # 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
+
+ ${lib.optionalString bypassCache ''
+ ${lib.optionalString reconstructLock ''
+ if [ -f package-lock.json ]
+ then
+ echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+ echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+ rm package-lock.json
+ else
+ echo "No package-lock.json file found, reconstructing..."
+ fi
+
+ node ${reconstructPackageLock}
+ ''}
+
+ node ${addIntegrityFieldsScript}
+ ''}
+
+ npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${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} ${lib.optionalString production "--production"} install
+ fi
+ '';
+
+ # Builds and composes an NPM package including all its dependencies
+ buildNodePackage =
+ { name
+ , packageName
+ , version ? null
+ , dependencies ? []
+ , buildInputs ? []
+ , production ? true
+ , npmFlags ? ""
+ , dontNpmInstall ? false
+ , bypassCache ? false
+ , reconstructLock ? false
+ , preRebuild ? ""
+ , dontStrip ? true
+ , unpackPhase ? "true"
+ , buildPhase ? "true"
+ , meta ? {}
+ , ... }@args:
+
+ let
+ extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
+ in
+ stdenv.mkDerivation ({
+ name = "${name}${if version == null then "" else "-${version}"}";
+ buildInputs = [ tarWrapper python nodejs ]
+ ++ lib.optional (stdenv.isLinux) utillinux
+ ++ lib.optional (stdenv.isDarwin) libtool
+ ++ buildInputs;
+
+ inherit nodejs;
+
+ inherit dontStrip; # Stripping may fail a build for some package deployments
+ inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+ compositionScript = composePackage args;
+ pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+ passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+ installPhase = ''
+ source ${installPackage}
+
+ # 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
+
+ ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+ # 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
+
+ # Patch the shebang lines of all the executables
+ ls $out/bin/* | while read i
+ do
+ file="$(readlink -f "$i")"
+ chmod u+rwx "$file"
+ patchShebangs "$file"
+ done
+ 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
+ '';
+
+ meta = {
+ # default to Node.js' platforms
+ platforms = nodejs.meta.platforms;
+ } // meta;
+ } // extraArgs);
+
+ # Builds a node environment (a node_modules folder and a set of binaries)
+ buildNodeDependencies =
+ { name
+ , packageName
+ , version ? null
+ , src
+ , dependencies ? []
+ , buildInputs ? []
+ , production ? true
+ , npmFlags ? ""
+ , dontNpmInstall ? false
+ , bypassCache ? false
+ , reconstructLock ? false
+ , dontStrip ? true
+ , unpackPhase ? "true"
+ , buildPhase ? "true"
+ , ... }@args:
+
+ let
+ extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+ in
+ stdenv.mkDerivation ({
+ name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
+
+ buildInputs = [ tarWrapper python nodejs ]
+ ++ lib.optional (stdenv.isLinux) utillinux
+ ++ lib.optional (stdenv.isDarwin) libtool
+ ++ buildInputs;
+
+ inherit dontStrip; # Stripping may fail a build for some package deployments
+ inherit dontNpmInstall unpackPhase buildPhase;
+
+ includeScript = includeDependencies { inherit dependencies; };
+ pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+ passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+ installPhase = ''
+ source ${installPackage}
+
+ 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
+ ${lib.optionalString bypassCache ''
+ if [ -f ${src}/package-lock.json ]
+ then
+ cp ${src}/package-lock.json .
+ chmod 644 package-lock.json
+ fi
+ ''}
+
+ # Go to the parent folder to make sure that all packages are pinpointed
+ cd ..
+ ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+ ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+ # Expose the executables that were installed
+ cd ..
+ ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+ mv ${packageName} lib
+ ln -s $out/lib/node_modules/.bin $out/bin
+ '';
+ } // extraArgs);
+
+ # Builds a development shell
+ buildNodeShell =
+ { name
+ , packageName
+ , version ? null
+ , src
+ , dependencies ? []
+ , buildInputs ? []
+ , production ? true
+ , npmFlags ? ""
+ , dontNpmInstall ? false
+ , bypassCache ? false
+ , reconstructLock ? false
+ , dontStrip ? true
+ , unpackPhase ? "true"
+ , buildPhase ? "true"
+ , ... }@args:
+
+ let
+ nodeDependencies = buildNodeDependencies args;
+ extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ];
+ in
+ stdenv.mkDerivation ({
+ name = "node-shell-${name}${if version == null then "" else "-${version}"}";
+
+ buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
+ 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 = lib.optionalString (dependencies != []) ''
+ export NODE_PATH=${nodeDependencies}/lib/node_modules
+ export PATH="${nodeDependencies}/bin:$PATH"
+ '';
+ } // extraArgs);
+in
+{
+ buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+ buildNodePackage = lib.makeOverridable buildNodePackage;
+ buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
+ buildNodeShell = lib.makeOverridable buildNodeShell;
+}
diff --git a/src/apps/personal/asciinema/node-packages.nix b/src/apps/personal/asciinema/node-packages.nix
new file mode 100644
index 0000000..76070d4
--- /dev/null
+++ b/src/apps/personal/asciinema/node-packages.nix
@@ -0,0 +1,875 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+ sources = {
+ "ajv-6.12.6" = {
+ name = "ajv";
+ packageName = "ajv";
+ version = "6.12.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+ sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+ };
+ };
+ "asciicast2gif-0.2.1" = {
+ name = "asciicast2gif";
+ packageName = "asciicast2gif";
+ version = "0.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asciicast2gif/-/asciicast2gif-0.2.1.tgz";
+ sha512 = "1BVUXfJhIPsVN3Jn4IYqdaLRvn7omfUbJJZdC25FTp35kwoSNUf2EEbiViwdhjIQUKBzmAUGQWJ7y7PpEhVabw==";
+ };
+ };
+ "asn1-0.2.6" = {
+ name = "asn1";
+ packageName = "asn1";
+ version = "0.2.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz";
+ sha512 = "ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==";
+ };
+ };
+ "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";
+ sha512 = "NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==";
+ };
+ };
+ "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";
+ sha512 = "Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==";
+ };
+ };
+ "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";
+ sha512 = "08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==";
+ };
+ };
+ "aws4-1.11.0" = {
+ name = "aws4";
+ packageName = "aws4";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz";
+ sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==";
+ };
+ };
+ "bcrypt-pbkdf-1.0.2" = {
+ name = "bcrypt-pbkdf";
+ packageName = "bcrypt-pbkdf";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+ sha512 = "qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==";
+ };
+ };
+ "buffer-crc32-0.2.13" = {
+ name = "buffer-crc32";
+ packageName = "buffer-crc32";
+ version = "0.2.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+ sha512 = "VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==";
+ };
+ };
+ "buffer-from-1.1.2" = {
+ name = "buffer-from";
+ packageName = "buffer-from";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz";
+ sha512 = "E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==";
+ };
+ };
+ "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";
+ sha512 = "4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==";
+ };
+ };
+ "combined-stream-1.0.8" = {
+ name = "combined-stream";
+ packageName = "combined-stream";
+ version = "1.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+ sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+ };
+ };
+ "concat-stream-1.6.2" = {
+ name = "concat-stream";
+ packageName = "concat-stream";
+ version = "1.6.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+ sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+ };
+ };
+ "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";
+ sha512 = "3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==";
+ };
+ };
+ "core-util-is-1.0.3" = {
+ name = "core-util-is";
+ packageName = "core-util-is";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";
+ sha512 = "ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==";
+ };
+ };
+ "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";
+ sha512 = "jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==";
+ };
+ };
+ "debug-2.6.9" = {
+ name = "debug";
+ packageName = "debug";
+ version = "2.6.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+ sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+ };
+ };
+ "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";
+ sha512 = "ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==";
+ };
+ };
+ "ecc-jsbn-0.1.2" = {
+ name = "ecc-jsbn";
+ packageName = "ecc-jsbn";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+ sha512 = "eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==";
+ };
+ };
+ "es6-promise-4.2.8" = {
+ name = "es6-promise";
+ packageName = "es6-promise";
+ version = "4.2.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz";
+ sha512 = "HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==";
+ };
+ };
+ "extend-3.0.2" = {
+ name = "extend";
+ packageName = "extend";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+ sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+ };
+ };
+ "extract-zip-1.7.0" = {
+ name = "extract-zip";
+ packageName = "extract-zip";
+ version = "1.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz";
+ sha512 = "xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==";
+ };
+ };
+ "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";
+ sha512 = "11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==";
+ };
+ };
+ "fast-deep-equal-3.1.3" = {
+ name = "fast-deep-equal";
+ packageName = "fast-deep-equal";
+ version = "3.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+ sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+ };
+ };
+ "fast-json-stable-stringify-2.1.0" = {
+ name = "fast-json-stable-stringify";
+ packageName = "fast-json-stable-stringify";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+ sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+ };
+ };
+ "fd-slicer-1.1.0" = {
+ name = "fd-slicer";
+ packageName = "fd-slicer";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz";
+ sha512 = "cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==";
+ };
+ };
+ "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";
+ sha512 = "j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==";
+ };
+ };
+ "form-data-2.3.3" = {
+ name = "form-data";
+ packageName = "form-data";
+ version = "2.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+ sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+ };
+ };
+ "fs-extra-1.0.0" = {
+ name = "fs-extra";
+ packageName = "fs-extra";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz";
+ sha512 = "VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==";
+ };
+ };
+ "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";
+ sha512 = "0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==";
+ };
+ };
+ "graceful-fs-4.2.10" = {
+ name = "graceful-fs";
+ packageName = "graceful-fs";
+ version = "4.2.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz";
+ sha512 = "9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==";
+ };
+ };
+ "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";
+ sha512 = "Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==";
+ };
+ };
+ "har-validator-5.1.5" = {
+ name = "har-validator";
+ packageName = "har-validator";
+ version = "5.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
+ sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
+ };
+ };
+ "hasha-2.2.0" = {
+ name = "hasha";
+ packageName = "hasha";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz";
+ sha512 = "jZ38TU/EBiGKrmyTNNZgnvCZHNowiRI4+w/I9noMlekHTZH3KyGgvJLmhSgykeAQ9j2SYPDosM0Bg3wHfzibAQ==";
+ };
+ };
+ "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";
+ sha512 = "CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==";
+ };
+ };
+ "inherits-2.0.4" = {
+ name = "inherits";
+ packageName = "inherits";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+ sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+ };
+ };
+ "is-stream-1.1.0" = {
+ name = "is-stream";
+ packageName = "is-stream";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+ sha512 = "uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==";
+ };
+ };
+ "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";
+ sha512 = "cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==";
+ };
+ };
+ "isarray-1.0.0" = {
+ name = "isarray";
+ packageName = "isarray";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+ sha512 = "VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==";
+ };
+ };
+ "isexe-2.0.0" = {
+ name = "isexe";
+ packageName = "isexe";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+ sha512 = "RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==";
+ };
+ };
+ "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";
+ sha512 = "Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==";
+ };
+ };
+ "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";
+ sha512 = "UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==";
+ };
+ };
+ "json-schema-0.4.0" = {
+ name = "json-schema";
+ packageName = "json-schema";
+ version = "0.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz";
+ sha512 = "es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==";
+ };
+ };
+ "json-schema-traverse-0.4.1" = {
+ name = "json-schema-traverse";
+ packageName = "json-schema-traverse";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+ sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+ };
+ };
+ "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";
+ sha512 = "ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==";
+ };
+ };
+ "jsonfile-2.4.0" = {
+ name = "jsonfile";
+ packageName = "jsonfile";
+ version = "2.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz";
+ sha512 = "PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==";
+ };
+ };
+ "jsprim-1.4.2" = {
+ name = "jsprim";
+ packageName = "jsprim";
+ version = "1.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz";
+ sha512 = "P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==";
+ };
+ };
+ "kew-0.7.0" = {
+ name = "kew";
+ packageName = "kew";
+ version = "0.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz";
+ sha512 = "IG6nm0+QtAMdXt9KvbgbGdvY50RSrw+U4sGZg+KlrSKPJEwVE5JVoI3d7RWfSMdBQneRheeAOj3lIjX5VL/9RQ==";
+ };
+ };
+ "klaw-1.3.1" = {
+ name = "klaw";
+ packageName = "klaw";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz";
+ sha512 = "TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==";
+ };
+ };
+ "mime-db-1.52.0" = {
+ name = "mime-db";
+ packageName = "mime-db";
+ version = "1.52.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz";
+ sha512 = "sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==";
+ };
+ };
+ "mime-types-2.1.35" = {
+ name = "mime-types";
+ packageName = "mime-types";
+ version = "2.1.35";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz";
+ sha512 = "ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==";
+ };
+ };
+ "minimist-1.2.6" = {
+ name = "minimist";
+ packageName = "minimist";
+ version = "1.2.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz";
+ sha512 = "Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==";
+ };
+ };
+ "mkdirp-0.5.6" = {
+ name = "mkdirp";
+ packageName = "mkdirp";
+ version = "0.5.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz";
+ sha512 = "FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==";
+ };
+ };
+ "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";
+ sha512 = "Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==";
+ };
+ };
+ "oauth-sign-0.9.0" = {
+ name = "oauth-sign";
+ packageName = "oauth-sign";
+ version = "0.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+ sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+ };
+ };
+ "pend-1.2.0" = {
+ name = "pend";
+ packageName = "pend";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz";
+ sha512 = "F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==";
+ };
+ };
+ "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";
+ sha512 = "7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==";
+ };
+ };
+ "phantomjs-prebuilt-2.1.16" = {
+ name = "phantomjs-prebuilt";
+ packageName = "phantomjs-prebuilt";
+ version = "2.1.16";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz";
+ sha512 = "PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==";
+ };
+ };
+ "pinkie-2.0.4" = {
+ name = "pinkie";
+ packageName = "pinkie";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
+ sha512 = "MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==";
+ };
+ };
+ "pinkie-promise-2.0.1" = {
+ name = "pinkie-promise";
+ packageName = "pinkie-promise";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+ sha512 = "0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==";
+ };
+ };
+ "process-nextick-args-2.0.1" = {
+ name = "process-nextick-args";
+ packageName = "process-nextick-args";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+ sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+ };
+ };
+ "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";
+ sha512 = "UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==";
+ };
+ };
+ "psl-1.9.0" = {
+ name = "psl";
+ packageName = "psl";
+ version = "1.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz";
+ sha512 = "E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==";
+ };
+ };
+ "punycode-2.1.1" = {
+ name = "punycode";
+ packageName = "punycode";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+ sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+ };
+ };
+ "qs-6.5.3" = {
+ name = "qs";
+ packageName = "qs";
+ version = "6.5.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz";
+ sha512 = "qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==";
+ };
+ };
+ "readable-stream-2.3.7" = {
+ name = "readable-stream";
+ packageName = "readable-stream";
+ version = "2.3.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
+ sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
+ };
+ };
+ "request-2.88.2" = {
+ name = "request";
+ packageName = "request";
+ version = "2.88.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+ sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+ };
+ };
+ "request-progress-2.0.1" = {
+ name = "request-progress";
+ packageName = "request-progress";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz";
+ sha512 = "dxdraeZVUNEn9AvLrxkgB2k6buTlym71dJk1fk4v8j3Ou3RKNm07BcgbHdj2lLgYGfqX71F+awb1MR+tWPFJzA==";
+ };
+ };
+ "safe-buffer-5.1.2" = {
+ name = "safe-buffer";
+ packageName = "safe-buffer";
+ version = "5.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+ sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+ };
+ };
+ "safer-buffer-2.1.2" = {
+ name = "safer-buffer";
+ packageName = "safer-buffer";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+ sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+ };
+ };
+ "sshpk-1.17.0" = {
+ name = "sshpk";
+ packageName = "sshpk";
+ version = "1.17.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz";
+ sha512 = "/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==";
+ };
+ };
+ "string_decoder-1.1.1" = {
+ name = "string_decoder";
+ packageName = "string_decoder";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+ sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+ };
+ };
+ "throttleit-1.0.0" = {
+ name = "throttleit";
+ packageName = "throttleit";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz";
+ sha512 = "rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==";
+ };
+ };
+ "tough-cookie-2.5.0" = {
+ name = "tough-cookie";
+ packageName = "tough-cookie";
+ version = "2.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+ sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+ };
+ };
+ "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";
+ sha512 = "McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==";
+ };
+ };
+ "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";
+ sha512 = "KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==";
+ };
+ };
+ "typedarray-0.0.6" = {
+ name = "typedarray";
+ packageName = "typedarray";
+ version = "0.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+ sha512 = "/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==";
+ };
+ };
+ "uri-js-4.4.1" = {
+ name = "uri-js";
+ packageName = "uri-js";
+ version = "4.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+ sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
+ };
+ };
+ "util-deprecate-1.0.2" = {
+ name = "util-deprecate";
+ packageName = "util-deprecate";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+ sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==";
+ };
+ };
+ "uuid-3.4.0" = {
+ name = "uuid";
+ packageName = "uuid";
+ version = "3.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+ sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+ };
+ };
+ "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";
+ sha512 = "ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==";
+ };
+ };
+ "which-1.3.1" = {
+ name = "which";
+ packageName = "which";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+ sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+ };
+ };
+ "yauzl-2.10.0" = {
+ name = "yauzl";
+ packageName = "yauzl";
+ version = "2.10.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz";
+ sha512 = "p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==";
+ };
+ };
+ };
+ args = {
+ name = "asciicast2gif-nix";
+ packageName = "asciicast2gif-nix";
+ version = "1.0.0";
+ src = ./.;
+ dependencies = [
+ sources."ajv-6.12.6"
+ sources."asciicast2gif-0.2.1"
+ sources."asn1-0.2.6"
+ sources."assert-plus-1.0.0"
+ sources."asynckit-0.4.0"
+ sources."aws-sign2-0.7.0"
+ sources."aws4-1.11.0"
+ sources."bcrypt-pbkdf-1.0.2"
+ sources."buffer-crc32-0.2.13"
+ sources."buffer-from-1.1.2"
+ sources."caseless-0.12.0"
+ sources."combined-stream-1.0.8"
+ sources."concat-stream-1.6.2"
+ sources."core-util-is-1.0.3"
+ sources."dashdash-1.14.1"
+ sources."debug-2.6.9"
+ sources."delayed-stream-1.0.0"
+ sources."ecc-jsbn-0.1.2"
+ sources."es6-promise-4.2.8"
+ sources."extend-3.0.2"
+ sources."extract-zip-1.7.0"
+ sources."extsprintf-1.3.0"
+ sources."fast-deep-equal-3.1.3"
+ sources."fast-json-stable-stringify-2.1.0"
+ sources."fd-slicer-1.1.0"
+ sources."forever-agent-0.6.1"
+ sources."form-data-2.3.3"
+ sources."fs-extra-1.0.0"
+ sources."getpass-0.1.7"
+ sources."graceful-fs-4.2.10"
+ sources."har-schema-2.0.0"
+ sources."har-validator-5.1.5"
+ sources."hasha-2.2.0"
+ sources."http-signature-1.2.0"
+ sources."inherits-2.0.4"
+ sources."is-stream-1.1.0"
+ sources."is-typedarray-1.0.0"
+ sources."isarray-1.0.0"
+ sources."isexe-2.0.0"
+ sources."isstream-0.1.2"
+ sources."jsbn-0.1.1"
+ sources."json-schema-0.4.0"
+ sources."json-schema-traverse-0.4.1"
+ sources."json-stringify-safe-5.0.1"
+ sources."jsonfile-2.4.0"
+ sources."jsprim-1.4.2"
+ sources."kew-0.7.0"
+ sources."klaw-1.3.1"
+ sources."mime-db-1.52.0"
+ sources."mime-types-2.1.35"
+ sources."minimist-1.2.6"
+ sources."mkdirp-0.5.6"
+ sources."ms-2.0.0"
+ sources."oauth-sign-0.9.0"
+ sources."pend-1.2.0"
+ sources."performance-now-2.1.0"
+ sources."phantomjs-prebuilt-2.1.16"
+ sources."pinkie-2.0.4"
+ sources."pinkie-promise-2.0.1"
+ sources."process-nextick-args-2.0.1"
+ sources."progress-1.1.8"
+ sources."psl-1.9.0"
+ sources."punycode-2.1.1"
+ sources."qs-6.5.3"
+ sources."readable-stream-2.3.7"
+ sources."request-2.88.2"
+ sources."request-progress-2.0.1"
+ sources."safe-buffer-5.1.2"
+ sources."safer-buffer-2.1.2"
+ sources."sshpk-1.17.0"
+ sources."string_decoder-1.1.1"
+ sources."throttleit-1.0.0"
+ sources."tough-cookie-2.5.0"
+ sources."tunnel-agent-0.6.0"
+ sources."tweetnacl-0.14.5"
+ sources."typedarray-0.0.6"
+ sources."uri-js-4.4.1"
+ sources."util-deprecate-1.0.2"
+ sources."uuid-3.4.0"
+ (sources."verror-1.10.0" // {
+ dependencies = [
+ sources."core-util-is-1.0.2"
+ ];
+ })
+ sources."which-1.3.1"
+ sources."yauzl-2.10.0"
+ ];
+ buildInputs = globalBuildInputs;
+ meta = {
+ license = "MIT";
+ };
+ production = true;
+ bypassCache = true;
+ reconstructLock = true;
+ };
+in
+{
+ args = args;
+ sources = sources;
+ tarball = nodeEnv.buildNodeSourceDist args;
+ package = nodeEnv.buildNodePackage args;
+ shell = nodeEnv.buildNodeShell args;
+ nodeDependencies = nodeEnv.buildNodeDependencies (lib.overrideExisting args {
+ src = stdenv.mkDerivation {
+ name = args.name + "-package-json";
+ src = nix-gitignore.gitignoreSourcePure [
+ "*"
+ "!package.json"
+ "!package-lock.json"
+ ] args.src;
+ dontBuild = true;
+ installPhase = "mkdir -p $out; cp -r ./* $out;";
+ };
+ });
+}
diff --git a/src/apps/personal/asciinema/package.json b/src/apps/personal/asciinema/package.json
new file mode 100644
index 0000000..6c4a114
--- /dev/null
+++ b/src/apps/personal/asciinema/package.json
@@ -0,0 +1,9 @@
+{
+ "dependencies": {
+ "asciicast2gif": "^0.2.1"
+ },
+ "name": "asciicast2gif-nix",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT"
+}
diff --git a/src/apps/personal/timetracking.nix b/src/apps/personal/timetracking.nix
new file mode 100644
index 0000000..b7d0f2f
--- /dev/null
+++ b/src/apps/personal/timetracking.nix
@@ -0,0 +1,6 @@
+{ pkgs, ... }: {
+ home.packages = [
+ pkgs.gtimelog
+ pkgs.haskellPackages.arbtt
+ ];
+}