# Maintainer: Darkest Medium <darkestmedium@gmail.com>
# Maintainer: Vladislav Nepogodin (vnepogodin) <nepogodin.vlad@gmail.com>

pkgname=void
epoch=1 # Version scheme is different from prebuild source
pkgver=1.3.10
pkgrel=1
pkgdesc="The open-source Cursor alternative"
url="https://voideditor.com/"
arch=('x86_64')
license=("MIT")
options=('!strip' '!debug')
_elnum=34 # 35+ will fail
depends=( electron${_elnum} ripgrep xdg-utils # replacements
  libx11
  libxkbfile
  libsecret
  gnupg
  libnotify
  libxss
  shared-mime-info
  alsa-lib
)
optdepends=(
  'glib2: Move to trash functionality'
  'gvfs: Move to trash functionality'
  'libdbusmenu-glib: KDE global menu'
  'lsof: terminal splitting' # https://github.com/Microsoft/vscode/issues/62991
  'org.freedesktop.secrets: Settings sync'
)
makedepends=(
  git
  npm
  nodejs-lts-iron # see .nvmrc
  pkgconf
  python
)
source=("git+https://github.com/voideditor/void.git#commit=5cab7e61e5ebf95fc24eec6b4213f035f85eb857")
# https://github.com/voideditor/void/commit/5cab7e61e5ebf95fc24eec6b4213f035f85eb857

sha256sums=('df6e3859b83af81775098f50cdb2f99706a39f65cc2cc3913c918de91fba1085')

build() {
  # export NODE_ENV=production cause build failure
  # Do not tain user dir by cache
  export XDG_CACHE_HOME="${srcdir}/xdgcache" HOME="${srcdir}/home"
  cd "${pkgname}"
  # Clean npm cache and remove existing node_modules
  npm cache clean --force
  rm -rf node_modules
  # Set version of electron
  _elver=$(cat /usr/lib/electron${_elnum}/version)
  echo Replacing $(rg -m 1 '"electron":\s*"[0-9]+' package.json) with ${_elver}
  echo 'Fix if major version is wrong.'
  npm pkg set devDependencies.electron=${_elver}
  # Install dependencies with legacy peer deps flag to handle dependency conflicts
  npm install --legacy-peer-deps
  # Build react because it fails for some reason
  npm run buildreact
  # Bundle it
  npm run gulp vscode-linux-x64
}

package() {
  _pkg=VSCode-linux-x64
  _app=/usr/share/void/resources/app
  # Licenses
  install -d "${pkgdir}/usr/share/licenses/${pkgname}"
  ln -svf "${_app}/LICENSE.txt" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  ln -svf "${_app}/ThirdPartyNotices.txt" "${pkgdir}/usr/share/licenses/${pkgname}/"
  # appdata and desktop files
  install -Dm644 "${_pkg}/resources/app/resources/linux/code.png" "${pkgdir}/usr/share/icons/${pkgname}.png"
  mkdir -p "${pkgdir}/usr/share/"{applications,mime/packages}
  # todo cleanup
  sed -e s/@@NAME@@/void/ -e s/@@EXEC@@/void/g -e s/@@ICON@@/void/g -e s/@@NAME_SHORT@@/Void/g -e s/@@NAME_LONG@@/Void/g \
    void/resources/linux/code.desktop > "${pkgdir}/usr/share/applications/void.desktop"
  sed -e s/@@NAME_LONG@@/Void/ -e s/@@EXEC@@/void/ -e s/@@ICON@@/void/ -e s/@@URLPROTOCOL@@/vscode/ \
    void/resources/linux/code-url-handler.desktop > "${pkgdir}/usr/share/applications/void-url-handler.desktop"
  sed -e s/@@NAME@@/void/ -e s/@@NAME_LONG@@/Void/g \
    void/resources/linux/code-workspace.xml > "${pkgdir}/usr/share/mime/packages/void-workspace.xml"
  # shell completions
  install -Dm644 "${_pkg}/resources/completions/bash/${pkgname}" "${pkgdir}/usr/share/bash-completion/completions/${pkgname}"
  install -Dm644 "${_pkg}/resources/completions/zsh/_${pkgname}" "${pkgdir}/usr/share/zsh/site-functions/_${pkgname}"
  # launcher
  sed -e "s|exec /usr|ELECTRON_RUN_AS_NODE=1 exec /usr|" \
      -e "s|flags=()|flags=(${_app}/out/cli.js --app=${_app})|" \
      /usr/bin/electron${_elnum} > run.sh
  install -Dm755 run.sh "${pkgdir}/usr/bin/void"
  # Installs editor on /usr/share for compability with void-bin
  install -d "${pkgdir}/usr/share/void"
  cp -r --reflink=auto "${_pkg}/resources" "${pkgdir}/usr/share/void/resources"
  # Use system-wide tools
  ln -svf /usr/bin/rg "${pkgdir}${_app}"/node_modules/@vscode/ripgrep/bin/rg
  ln -svf /usr/bin/xdg-open "${pkgdir}${_app}"/node_modules/open/xdg-open
}
