Unverified Commit d38b8bdb authored by Felix Bühler's avatar Felix Bühler Committed by GitHub
Browse files

oni2: remove (#269322)

parent 91cec1e6
Loading
Loading
Loading
Loading
+0 −251
Original line number Diff line number Diff line
{ lib, stdenv, nodePackages
# Fetch dependencies
, fetchFromGitHub, gitMinimal, curlMinimal, cacert, yarn, unzip, xorg, nodejs
, ripgrep, fontconfig, libGL, libGLU, ncurses, acl, harfbuzz, libjpeg, expat
, icu58, libpng
# Build
, jq, perl, makeWrapper, bash, which, nasm, python2, gn, ninja, cmake, clang
, fixup_yarn_lock, callPackage }:

{ variant, version, rev, sha256, fetchDepsSha256, license }:

let
  source = fetchFromGitHub {
    repo = variant;
    owner = "onivim";
    inherit rev sha256;
  };

  fetchDeps = stdenv.mkDerivation {
    name = "oni2-fetch-deps";

    unpackPhase = ''
      cp ${source}/{release,package}.json ./
      cp -r ${source}/{release.esy.lock,node,extensions} ./
      chmod -R +w node extensions
    '';

    nativeBuildInputs = [
      jq
      nodePackages.esy
      gitMinimal
      curlMinimal
      cacert
      python2
      perl
      unzip
      yarn
    ];

    buildPhase = ''
      export ESY__PREFIX=$NIX_BUILD_TOP/esy
      export ESY__GLOBAL_PATH=PATH

      esy '@release' install

      ln -s $NIX_BUILD_TOP/esy/source/i/ $NIX_BUILD_TOP/source

      cd $NIX_BUILD_TOP/source
      cd $(ls | grep "^esy_skia")

      # Prefetch esy_skia pinned dependencies
      # angle2, dng_sdk, piex and sfntly are unique and need to be fetched
      # zlib and webp used here seem to be outdated, so it's impossible to link esy_skia against upstream zlib and webp
      cat DEPS | grep -E '{|}|angle2|dng_sdk|piex|sfntly|zlib|webp' > DEPS-upd
      mv DEPS{-upd,}
      python tools/git-sync-deps
      # Patch esy_skia builder to use nixpkgs ninja, gn tools and icu, expat and libpng libraries.
      cd esy
      patch build.sh ${./esy_skia_use_nixpkgs.patch}

      cd $NIX_BUILD_TOP/source
      cd $(ls | grep '^revery' | grep -v '__s__')
      jq '.esy.build |= "bash -c \"\(.)\""' package.json > package-upd.json
      mv package{-upd,}.json

      # Delete esy_cmake and ninja dependencies (they are brought from Nixpkgs)
      # Removing them from release.esy.lock is hard because it reports corruption
      for d in "revery__s__esy_cmake" "ninja"; do
        cd $NIX_BUILD_TOP/source
        cd $(ls | grep $d)
        rm -rf *
      done

      rm -rf $(find $NIX_BUILD_TOP/esy -name .git)
    '';

    installPhase = ''
      mkdir $out
      cp -r $NIX_BUILD_TOP/esy $out/
    '';

    dontPatchShebangs = true;

    impureEnvVars = lib.fetchers.proxyImpureEnvVars;

    outputHashMode = "recursive";
    outputHashAlgo = "sha256";
    outputHash = fetchDepsSha256;
  };
in stdenv.mkDerivation (rec {
  pname = "oni2";
  inherit version;

  nativeBuildInputs = [
    clang
    makeWrapper
    nodePackages.esy
    perl
    which
    nasm
    python2
    gn
    ninja
    cmake
    jq
    yarn
    fixup_yarn_lock
  ];

  buildInputs = [
    nodejs
    ripgrep
    fontconfig
    libGL
    libGLU
    ncurses
    acl
    harfbuzz
    libjpeg
    expat
    icu58
    libpng
  ] ++ (with xorg; [
    libX11
    libXext
    libXi
    libXxf86vm
    libXrandr
    libXinerama
    libXcursor
    libICE
    libSM
    libXt
    libxkbfile
  ]);

  unpackPhase = ''
    cp -r ${source}/* ./
    cp -r ${fetchDeps}/esy ./

    chmod -R +w esy node/ extensions/
    chmod +w assets/configuration
  '';

  hardeningDisable = [ "fortify" ];

  node = (callPackage ./node.nix { }).offline_cache;
  extensions = (callPackage ./extensions.nix { }).offline_cache;

  configurePhase = ''
    runHook preConfigure

    # Esy by default erases the entire environment, so the builder makes a wrapper over bash to automatically re-export it
    mkdir wrapped-bash
    echo "#!${bash}/bin/bash" > wrapped-bash/bash
    export | sed 's/PATH="/PATH="$PATH:/' >> wrapped-bash/bash
    echo "exec ${bash}/bin/bash \"\$@\"" >> wrapped-bash/bash
    chmod +x wrapped-bash/bash

    # Use custom builder for Oni2 to provide necessary environment to it
    echo 'declare -x NIX_LDFLAGS="$NIX_LDFLAGS -lXext -lharfbuzz -ljpeg -lpthread -lpng -lexpat"' > build.sh
    echo $(jq -r '.esy.build' package.json) >> build.sh
    jq '.esy.build |= "bash build.sh"' package.json > package-upd.json
    mv package{-upd,}.json

    export PATH="$NIX_BUILD_TOP/wrapped-bash:$PATH"
    patchShebangs $NIX_BUILD_TOP/esy/source

    echo "" > assets/configuration/setup.json # it will be set at installation phase.

    substituteInPlace src/gen_buildinfo/generator.re --replace "git rev-parse --short HEAD" "echo '${version}'"

    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild

    # Required by yarn
    export HOME=$(mktemp -d)

    # Install pinned yarn packages
    yarnInstall() {
      # Remove `resolutions` section from package.json
      jq 'del(.resolutions)' $3/package.json > $3/package-upd.json
      cp $3/package{-upd,}.json

      # Copy custom yarn.lock to match updated package.json, do fixup
      cp $2 $3/yarn.lock
      fixup_yarn_lock $3/yarn.lock

    # Make yarn install prefetched dependencies
     yarn config --offline set yarn-offline-mirror $1
     # Set explicit node install directory for node-gyp.
     npm_config_nodedir=${nodejs} yarn install --frozen-lockfile --offline --no-progress --non-interactive --cwd $3
    }
    yarnInstall ${node} ${./node.lock} node
    yarnInstall ${extensions} ${./extensions.lock} extensions

    export ESY__PREFIX="$NIX_BUILD_TOP/esy"
    esy '@release' install # should do nothing

    export ESY__GLOBAL_PATH=PATH
    # Create link to bin directory, currently empty
    esy '@release' sh -c "ln -s \$cur__bin result"
    # Finish building Oni2
    esy '@release' x Oni2 --help

    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall

    mkdir $out

    cp -Lr ./result $out/bin
    cp -r ./node $out/
    cp -r ./extensions $out/

    chmod +w $out/bin
    chmod +x $out/bin/Oni2 $out/bin/Oni2_editor
    # Unset LANG and XMODIFIERS. See https://github.com/onivim/oni2/issues/3772
    # Unset SDL_VIDEODRIVER because Wayland is not supported. See https://github.com/onivim/oni2/issues/3438
    mv $out/bin/Oni2{,_unwrapped}
    makeWrapper $out/bin/Oni2{_unwrapped,} --unset LANG --unset XMODIFIERS --unset SDL_VIDEODRIVER
    mv $out/bin/Oni2_editor{,_unwrapped}
    makeWrapper $out/bin/Oni2_editor{_unwrapped,} --unset LANG --unset XMODIFIERS --unset SDL_VIDEODRIVER

    rm -f $out/bin/setup.json
    jq -n "{node: \"${nodejs}/bin/node\", nodeScript: \"$out/node\", bundledExtensions: \"$out/extensions\", rg: \"${ripgrep}/bin/rg\"}" > $out/bin/setup.json

    mkdir -p $out/share/applications $out/share/pixmaps
    cp ${source}/scripts/linux/Onivim2.desktop $out/share/applications
    cp ${source}/assets/images/icon512.png $out/share/pixmaps/Onivim2.png

    runHook postInstall
  '';

  meta = with lib; {
    description = "Native, lightweight modal code editor";
    longDescription = ''
      Onivim 2 is a reimagination of the Oni editor. Onivim 2 aims to bring the speed of Sublime, the language integration of VSCode, and the modal editing experience of Vim together, in a single package.
    '';
    homepage = "https://v2.onivim.io/";
    inherit license;
    maintainers = with maintainers; [ gardspirito ];
    platforms = [ "x86_64-linux" "x86_64-darwin" ];
  };
})
+0 −16
Original line number Diff line number Diff line
{ callPackage }:

let mkOni2 = callPackage ./common.nix { };
in mkOni2 rec {
  variant = "oni2";
  license = {
    fullName = "Outrun Labs End User License Agreement";
    url = "https://github.com/onivim/oni2/blob/master/Outrun-Labs-EULA-v1.1.md";
    free = false;
  };
  version = "0.5.7";
  rev = "v${version}";
  sha256 = "NlN0Ntdwtx5XLjd1ltUzv/bjmJQR5eyRqtmicppP6YU=";
  fetchDepsSha256 = "k7G6jPJfxCCSuSucPfiXljCVJhmjl/BxWMCEjv2tfhA=";
}
+0 −13
Original line number Diff line number Diff line
diff --git a/build-or.sh b/build.sh
index be0bc6f..fddc9cb 100644
--- a/build-or.sh
+++ b/build.sh
@@ -50,6 +50,6 @@ else
         echo "llvm toolset-7.0 does not need to be manually activated"
     fi
 
-    bin/gn gen $cur__target_dir/out/Static --script-executable="$PYTHON_BINARY" "--args=cc=\"$CC\" cxx=\"$CXX\" skia_use_system_libjpeg_turbo=true esy_skia_enable_svg=true is_debug=false extra_cflags=[\"-I${ESY_LIBJPEG_TURBO_PREFIX}/include\"] extra_ldflags=[\"-L${ESY_LIBJPEG_TURBO_PREFIX}/lib\", \"-ljpeg\" ]" || exit -1
-    ninja.exe -C $cur__target_dir/out/Static || exit -1
+    gn gen $cur__target_dir/out/Static --script-executable="$PYTHON_BINARY" "--args=cc=\"$CC\" cxx=\"$CXX\" skia_use_system_libjpeg_turbo=true skia_use_system_expat=true skia_use_system_icu=true skia_use_system_libpng=true esy_skia_enable_svg=true is_debug=false extra_cflags=[\"-I${ESY_LIBJPEG_TURBO_PREFIX}/include\"] extra_ldflags=[\"-L${ESY_LIBJPEG_TURBO_PREFIX}/lib\", \"-ljpeg\" ]" || exit -1
+    ninja -C $cur__target_dir/out/Static || exit -1
 fi
+0 −497

File deleted.

Preview size limit exceeded, changes collapsed.

+0 −629

File deleted.

Preview size limit exceeded, changes collapsed.

Loading