summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 1715e26cd155cb13faa257c8ccb209cd1be82ef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Maintainer oech3
# Contributor: Darkest Medium <darkestmedium at gmail dot com>

pkgname=void-git
_pkgname=void
pkgver=1.99.3.r1.gda425ab
pkgrel=1
pkgdesc="The Cursor alternative AI code editor"
url="https://github.com/voideditor/void"
arch=('x86_64')
license=("MIT")
provides=('void')
conflicts=('void')
options=(!strip) # for sign of ext
_electron=electron
depends=( ${_electron} ripgrep xdg-utils
 alsa-lib gnupg libnotify libsecret libxkbfile libxss shared-mime-info)
optdepends=(
  'glib2: Move to trash functionality'
  'gvfs: Move to trash functionality'
  'libdbusmenu-glib: KDE global menu'
  'lsof: Terminal splitting'
  'org.freedesktop.secrets: Settings sync'
)
makedepends=( nodejs-lts-iron # sync with .npmrc
  git npm python
  libarchive make pkgconf) # base base-devel

pkgver() {
  cd void
  printf "%s.r%s.g%s" $(awk 'match($0,/"version":\s*"([^"]+)"/,v) {print v[1]}' package.json) \
    $(git rev-list --count HEAD) $(git rev-parse --short HEAD)
}

prepare(){
  rm -rf void
  git clone --depth=1 ${url}.git void
  cd void
  # Drop this patch for electron35+ at code 1.101, app.dock is for macOS
  sed -i '/app\.dock\.setMenu/i\// @ts-ignore' src/vs/platform/menubar/electron-main/menubar.ts
}

build() {
  # Don't put broken files on user dir
  export XDG_CACHE_HOME="${srcdir}/xdgcache" TMPDIR="$srcdir"/tmp HOME="${srcdir}/home"
  cd "${_pkgname}"

  # electron version
  _elver=$(npm pkg get devDependencies.electron)
  echo Replacing electron $_elver
  _elver=$(cat /usr/lib/${_electron}/version)
  npm pkg set devDependencies.electron=${_elver} # needed ?
  sed -i "s/^target=.*/target=\"${_elver}\"/" .npmrc # native modules
  echo with $(rg -N 'target' .npmrc)

  # Don't DL ripgrep
  _vsrgver=$(npm pkg get dependencies.@vscode/ripgrep | sed 's/[\"^]//g')
  _rgver=13.0.0-10
  mkdir -p "$TMPDIR"/vscode-ripgrep-cache-$_vsrgver
  touch rg # Archived symlink is replaced
  bsdtar -czf "$TMPDIR"/vscode-ripgrep-cache-${_vsrgver}/ripgrep-v${_rgver}-x86_64-unknown-linux-musl.tar.gz rg
  _vsrgver2=1.15.10 # Why DL twice?
  mkdir -p "$TMPDIR"/vscode-ripgrep-cache-$_vsrgver2
  ln -sf "$TMPDIR"/vscode-ripgrep-cache-{${_vsrgver},${_vsrgver2}}/ripgrep-v${_rgver}-x86_64-unknown-linux-musl.tar.gz

  # Don't DL electron
  _cachedir="${XDG_CACHE_HOME}"/electron/$(echo -n "https://github.com/electron/electron/releases/download/v${_elver}" | sha256sum | cut -d ' ' -f 1)
  _zip="electron-v${_elver}-linux-x64.zip"
  mkdir -p "${_cachedir}"
  bsdtar --format zip -cf "${_cachedir}/${_zip}" /dev/null 2> /dev/null
  echo $(sha256sum "${_cachedir}/${_zip}" | cut -d " " -f 1) *${_zip} > build/checksums/electron.txt
  export ELECTRON_SKIP_BINARY_DOWNLOAD=1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1

  # Build
  npm install
  npm run buildreact # needed by unknown reason
  npm run gulp vscode-linux-x64 #-min # minify cause OOM
}

package() {
  _pkg=VSCode-linux-x64
  _app=/usr/share/void/resources/app
  # appdata and desktop files
  install -Dm644 "${_pkg}/resources/app/resources/linux/code.png" "${pkgdir}/usr/share/icons/${_pkgname}.png"
  #todo cleanup
  install -Dm644 void/scripts/appimage/void.desktop "${pkgdir}/usr/share/applications/void.desktop"
  install -Dm644 void/scripts/appimage/void-url-handler.desktop "${pkgdir}/usr/share/applications/void-url-handler.desktop"
  mkdir -p "${pkgdir}/usr/share/mime/packages"
  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} > run.sh # should be supported by electron$_elnum
  install -Dm755 run.sh "${pkgdir}/usr/bin/void"
  # Install 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"
  # 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
  # Licenses
  install -d "${pkgdir}/usr/share/licenses/${pkgname}"
  mv -v "${pkgdir}${_app}/LICENSE.txt" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  mv -v "${pkgdir}${_app}/ThirdPartyNotices.txt" "${pkgdir}/usr/share/licenses/${pkgname}/"
}