diff options
Diffstat (limited to 'pkgs/servers/web-apps/codimd/default.nix')
-rw-r--r-- | pkgs/servers/web-apps/codimd/default.nix | 233 |
1 files changed, 59 insertions, 174 deletions
diff --git a/pkgs/servers/web-apps/codimd/default.nix b/pkgs/servers/web-apps/codimd/default.nix index 79ad58dddd8..2be8a3f5d68 100644 --- a/pkgs/servers/web-apps/codimd/default.nix +++ b/pkgs/servers/web-apps/codimd/default.nix @@ -1,197 +1,82 @@ -{ stdenv, pkgs, buildEnv, fetchFromGitHub, makeWrapper -, fetchpatch, nodejs-8_x, phantomjs2, runtimeShell }: -let - nodePackages = let - # Some packages fail to install with ENOTCACHED due to a mistakenly added - # package-lock.json that bundles optional dependencies not resolved with `node2nix. - # See also https://github.com/svanderburg/node2nix/issues/134 - dontInstall = n: v: - if builtins.match ".*babel.*" n == null - then v - else v.override { dontNpmInstall = true; }; - - packages = stdenv.lib.mapAttrs (dontInstall) ( - import ./node.nix { - inherit pkgs; - system = stdenv.system; - } - ); - in packages // { - "js-url-^2.3.0" = packages."js-url-^2.3.0".overrideAttrs (_: { - # Don't download chromium (this isn't needed anyway for our case). - PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1"; - }); +{ stdenv, fetchFromGitHub, fetchpatch, makeWrapper +, which, nodejs, yarn2nix, python2, phantomjs2 }: + +yarn2nix.mkYarnPackage rec { + name = "codimd"; + version = "1.4.0"; + + src = fetchFromGitHub { + owner = "codimd"; + repo = "server"; + rev = version; + sha256 = "0cljgc056p19pjzphwkcfbvgp642w3r6p626w2fl6m5kdk78qd1g"; }; - addPhantomjs = (pkgs: - map (pkg: pkg.override ( oldAttrs: { - buildInputs = oldAttrs.buildInputs or [] ++ [ phantomjs2 ]; - })) pkgs); - - drvName = drv: (builtins.parseDrvName drv).name; - - linkNodeDeps = ({ pkg, deps, name ? "" }: - let - targetModule = if name != "" then name else drvName pkg; - in nodePackages.${pkg}.override (oldAttrs: { - postInstall = '' - mkdir -p $out/lib/node_modules/${targetModule}/node_modules - ${stdenv.lib.concatStringsSep "\n" (map (dep: '' - ln -s ${nodePackages.${dep}}/lib/node_modules/${drvName dep} \ - $out/lib/node_modules/${targetModule}/node_modules/${drvName dep} - '') deps - )} - ''; - }) - ); - - filterNodePackagesToList = (filterPkgs: allPkgs: - stdenv.lib.mapAttrsToList (_: v: v) ( - stdenv.lib.filterAttrs (n: _: - ! builtins.elem (drvName n) filterPkgs - ) allPkgs) - ); - - # add phantomjs to buildInputs - pkgsWithPhantomjs = (addPhantomjs (map ( - p: nodePackages.${p} - ) [ - "js-url-^2.3.0" - "markdown-pdf-^8.0.0" - ])); - - # link extra dependencies to lib/node_modules - pkgsWithExtraDeps = map (args: - linkNodeDeps args ) [ - { pkg = "select2-^3.5.2-browserify"; - deps = [ "url-loader-^0.5.7" ]; } - { pkg = "ionicons-~2.0.1"; - deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; } - { pkg = "font-awesome-^4.7.0"; - deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; } - { pkg = "bootstrap-^3.3.7"; - deps = [ "url-loader-^0.5.7" "file-loader-^0.9.0" ]; } - { pkg = "markdown-it-^8.2.2"; - deps = [ "json-loader-^0.5.4" ]; } - { pkg = "markdown-it-emoji-^1.3.0"; - deps = [ "json-loader-^0.5.4" ]; } - { pkg = "raphael-git+https://github.com/dmitrybaranovskiy/raphael"; - deps = [ "eve-^0.5.4" ]; - name = "raphael"; } - ]; - - codemirror = pkgs.callPackage ./CodeMirror { }; - - nodeEnv = buildEnv { - name = "codimd-env"; - paths = pkgsWithPhantomjs ++ pkgsWithExtraDeps ++ [ - codemirror - - # `js-sequence-diagrams` has been removed from the registry - # and replaced by a security holding package (the tarballs weren't published by - # upstream as upstream only supports bower, - # see https://github.com/bramp/js-sequence-diagrams/issues/212). - # - # As the tarballs are still there, we build this manually for now until codimd's upstream - # has resolved the issue. - (import ./js-sequence-diagrams { - inherit pkgs; - nodejs = nodejs-8_x; - extraNodePackages = { - lodash = nodePackages."lodash-^4.17.4"; - eve = nodePackages."eve-^0.5.4"; - }; - }) - ] ++ filterNodePackagesToList [ - "bootstrap" - "codemirror-git+https://github.com/hackmdio/CodeMirror.git" - "font-awesome" - "ionicons" - "js-url" - "markdown-it" - "markdown-pdf" - "node-uuid" - "raphael-git+https://github.com/dmitrybaranovskiy/raphael" - "select2-browserify" - "url-loader" - ] nodePackages; - }; + nativeBuildInputs = [ which makeWrapper ]; + extraBuildInputs = [ python2 phantomjs2 ]; - name = "codimd-${version}"; - version = "1.2.0"; + yarnNix = ./yarn.nix; + yarnLock = ./yarn.lock; + packageJSON = ./package.json; - src = stdenv.mkDerivation { - name = "${name}-src"; - inherit version; + postConfigure = '' + rm deps/CodiMD/node_modules + cp -R "$node_modules" deps/CodiMD + chmod -R u+w deps/CodiMD + ''; - src = fetchFromGitHub { - owner = "hackmdio"; - repo = "codimd"; - rev = version; - sha256 = "003v90g5sxxjv5smxvz6y6bq2ny0xpxhsx2cdgkvj7jla243v48s"; - }; + buildPhase = '' + runHook preBuild - dontBuild = true; + cd deps/CodiMD - installPhase = '' - mkdir $out - cp -R . $out - ''; - }; -in -stdenv.mkDerivation rec { - inherit name version src; - - nativeBuildInputs = [ makeWrapper ]; - buildInputs = [ nodejs-8_x ]; - - NODE_PATH = "${nodeEnv}/lib/node_modules"; - - patches = [ - (fetchpatch { # fixes for configurable paths - url = "https://patch-diff.githubusercontent.com/raw/hackmdio/codimd/pull/940.patch"; - sha256 = "0w1cvnp3k1n8690gzlrfijisn182i0v8psjs3df394rfx2347xyp"; - }) - ]; - - postPatch = '' - # due to the `dontNpmInstall` workaround, `node_modules/.bin` isn't created anymore. - substituteInPlace package.json \ - --replace "webpack --config" "${nodejs-8_x}/bin/node ./node_modules/webpack/bin/webpack.js --config" - ''; + pushd node_modules/codemirror + npm run install + popd + + pushd node_modules/sqlite3 + export OLD_HOME="$HOME" + export HOME="$PWD" + mkdir -p .node-gyp/${nodejs.version} + echo 9 > .node-gyp/${nodejs.version}/installVersion + ln -s ${nodejs}/include .node-gyp/${nodejs.version} + npm run install + export HOME="$OLD_HOME" + unset OLD_HOME + popd + + pushd node_modules/phantomjs-prebuilt + npm run install + popd - buildPhase = '' - ln -s ${nodeEnv}/lib/node_modules node_modules npm run build + + runHook postBuild ''; - installPhase = '' - mkdir -p $out/bin + dontInstall = true; + + distPhase = '' + runHook preDist + + mkdir -p $out + cp -R {app.js,bin,lib,locales,node_modules,package.json,public} $out + cat > $out/bin/codimd <<EOF - #!${runtimeShell} - ${nodejs-8_x}/bin/node $out/app.js + #!${stdenv.shell}/bin/sh + ${nodejs}/bin/node $out/app.js EOF - cp -R {app.js,bin,lib,locales,package.json,public} $out/ - ''; - - postFixup = '' chmod +x $out/bin/codimd wrapProgram $out/bin/codimd \ - --set NODE_PATH "${nodeEnv}/lib/node_modules" - ''; + --set NODE_PATH "$out/lib/node_modules" - passthru = { - sequelize = pkgs.writeScript "codimd-sequelize" '' - #!${pkgs.bash}/bin/bash -e - export NODE_PATH="${nodeEnv}/lib/node_modules" - exec -a "$0" "${nodeEnv}/lib/node_modules/sequelize-cli/bin/sequelize" "$@" - ''; - }; + runHook postDist + ''; meta = with stdenv.lib; { description = "Realtime collaborative markdown notes on all platforms"; license = licenses.agpl3; - homepage = https://github.com/hackmdio/codimd; + homepage = "https://github.com/codimd/server"; maintainers = with maintainers; [ willibutz ma27 ]; platforms = platforms.linux; }; |