- Dock drag-to-reorder for pinned apps (insertion gap, quick-slide vs dwell) - Fullscreen detection: scan all windows via HyprlandData.windowList - IdleCoordinator, GlobalStates, Session.qml updates - Deploy script, qmldir, settings, wallpaper, visualizer fixes - sessiond server, memory module updates Co-Authored-By: Claude <noreply@anthropic.com>
160 lines
9.4 KiB
Text
160 lines
9.4 KiB
Text
# Maintainer: Zoddo <archlinux+aur@zoddo.fr>
|
|
# Contributor: Thaodan <AUR+me@thaodan.de>
|
|
# Contributor: Manuel Hüsers <aur@huesers.de>
|
|
# Contributor: huyizheng
|
|
# Contributor: johnnyapol <arch@johnnyapol.me>
|
|
|
|
# Based off the discord community repo PKGBUILD by Filipe Laíns (FFY00) <lains@archlinux.org>
|
|
|
|
_pkgname=discord
|
|
_electron=electron
|
|
pkgname=${_pkgname}_arch_electron
|
|
pkgver=1.0.146
|
|
pkgrel=1
|
|
epoch=1
|
|
pkgdesc="Discord using system provided ${_electron} for increased security and performance"
|
|
arch=('x86_64')
|
|
provides=("${_pkgname}")
|
|
conflicts=("${_pkgname}")
|
|
url='https://discord.com'
|
|
license=('LicenseRef-custom')
|
|
options=('!strip')
|
|
install="$pkgname.install"
|
|
depends=("${_electron}" 'libxss')
|
|
makedepends=('asar'
|
|
'jq'
|
|
'python-pyelftools' # Required for Krisp patcher
|
|
'python-capstone') # Required for Krisp patcher
|
|
optdepends=('libpulse: Pulseaudio support'
|
|
'xdg-utils: Open files')
|
|
source=("https://dl.discordapp.net/apps/linux/${pkgver}/${_pkgname}-${pkgver}.tar.gz"
|
|
'LICENSE.html::https://discord.com/terms'
|
|
'OSS-LICENSES.html::https://discord.com/licenses'
|
|
'discord-launcher.sh'
|
|
'krisp-patcher.py'
|
|
|
|
# Discord modules (from 'curl "https://updates.discord.com/distributions/app/manifests/latest?channel=stable&platform=linux&arch=x64"')
|
|
"core-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/full.distro"
|
|
"discord_desktop_core-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_desktop_core/1/full.distro"
|
|
"discord_zstd-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_zstd/1/full.distro"
|
|
"discord_krisp-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_krisp/1/full.distro"
|
|
"discord_rpc-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_rpc/1/full.distro"
|
|
"discord_utils-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_utils/1/full.distro"
|
|
"discord_voice-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_voice/1/full.distro"
|
|
"discord_game_utils-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_game_utils/1/full.distro"
|
|
"discord_erlpack-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_erlpack/1/full.distro"
|
|
"discord_modules-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_modules/1/full.distro"
|
|
"discord_spellcheck-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_spellcheck/1/full.distro"
|
|
"discord_dispatch-${pkgver}.tar.br::https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/${pkgver}/discord_dispatch/1/full.distro")
|
|
sha512sums=('b90cf25a6e615e836e0ef248b3090f23d90c2a6d73faeb21954ba669fb39275c26ac58a8f9e92445254c29fb90716cab54bee06f701cde88f74578c4228bc22b'
|
|
'2590151db4404a9ecbae2c45269c74f5ea26479967de5bc0b221a9143f4efeeeda9e335c23cf1f982680ab4fd895dcf3fd5731bd230908b3b2568eee0ec223ec'
|
|
'5cccf397a772fed0db9b19253e496e78af27810227325ce681de985e2e0fbbdb195873d9642574ad3ae7bfcf4699bfdaa16933ca50c13cb98a1ff53c86c6de05'
|
|
'd5373e2b2e9754bdcdbcda81fc1392ce6605939651839868823f3c3e0bf16f6fba2fb73bc1a0ff230eebd743d1463f2e8b2295503248f14845b3a56e57385bd1'
|
|
'85da93530b2b92faad58cc84d0f7ddaea6b22fbec413e806c1981eb6369a301ec995eee6bfbe6b828e2cd0baf6168e578bbde456f2450a13199994ff9a1e7cd0'
|
|
'dca9bbf55afcb1425af7bd0fc4d891fe0cc37859436a8b2a1ae9d29689d72e574dc2f974d468a86527c0420847fd27af5517da7b02075ee2eebe8bd2d43a7d09'
|
|
'88024b0faf4e4db8e283af9081b88072ec8ab908e4b72a7c0bab8ae7fcb3c5ae09b2b3e34af0b35429b51f46be359dc39983191e376a762c6c4831d4918a9792'
|
|
'b7a676bd7e7cb1a9d57aaad1c828499f7ecdc0360bb982a3138181bb29710354509c50998344004c73ca2b87f7866a603109c2cb79b848b3240fa08a35578b16'
|
|
'7283eb04ec779a5f679e7c90f793c5d9bb2a6a44507f966156d831f0013ebcad507fbcc07d037719740861f3e23f95a532b5c9d0da707932a0da9ffd7e17349d'
|
|
'6e75733d93b41b4a3d59749ce5331b9da4d6fb5fad1266bf639a948cc497c05b03ea3f15bfd6384e819730bd220dbf34dbb967c90f9683bb2529f73a4ed5897b'
|
|
'e88e7ce27b6d406d1fe631964b772067bc52808a74ecb57a96b5585199ec2aceab405321f9d9faf9199870fd83823afc6c5402eb85c9ed41826cedb60d8925d9'
|
|
'fc5dd9840f0b13bf8b66dc4901833c701293a914c54765c04c18414755f237284e93e1a7bf2660120507263500f9ab385c1c9966fe0f33e368b3fae9d695b432'
|
|
'f23b41b7e55c6611a77767c4ccd7010bfc5a901d241ac91826b191ca7d894e5960eda1afde05a0b52564b555006ce762620b08c9378eff733a0b89c5fd49a3e4'
|
|
'755e37330fc16d99f630ed0036eaabf83b4f137123c72eae35fe47996d243ceaed1ddc6f1891efaeffb3f28fa4c0eb9b2be76308df50d98a97be24c37f5e41f0'
|
|
'83454dd202685f368d0934c3949e2d3e2ecb30dd89c7a593f9210318828cd3b3b4813e216e45bcc1752b0b0d214f1979bf7ba14d00e0840e0c238cfeec88aa63'
|
|
'aee5b9cd718d803618e6f83f4f004853f283e89c5c8bc87b61b85189787aed0c710bba2b9ab81e148e18c685e5a1bcbe18554cc67f6123be360c3299349d0edc'
|
|
'959e30368d9c4d4e82fe4beb2457f3287365e1fcb3ee5e44eb8d8e648e30b2b2ec2aa346b7bfa46d24b8f496193b154c89c471c997fe9d7d5b64277dcc5092ca')
|
|
|
|
# Skip "LICENSE.html" and "OSS-LICENSES.html" files hashes as they are unstable
|
|
# Since "updpkgsums"/"pkgctl version upgrade" overwrite the checksum array with
|
|
# literal hashes, set them to SKIP with indexed assignments (pacman-contrib#119)
|
|
# https://gitlab.archlinux.org/pacman/pacman-contrib/-/issues/119
|
|
sha512sums[1]='SKIP'
|
|
sha512sums[2]='SKIP'
|
|
|
|
# Colored makepkg-like functions
|
|
_all_off="$(tput sgr0)"
|
|
_bold="${_all_off}$(tput bold)"
|
|
_blue="${_bold}$(tput setaf 4)"
|
|
_red="${_bold}$(tput setaf 1)"
|
|
msg_blue() {
|
|
printf "${_blue} ->${_bold} $1${_all_off}\n"
|
|
}
|
|
error() {
|
|
printf "${_blue}==>${_red} ERROR:${_bold} %s${_all_off}\n" "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
prepare() {
|
|
msg_blue "Extracting core-${pkgver}.tar.br"
|
|
tar -xf core-${pkgver}.tar.br --use-compress-program=brotli --one-top-level=core --strip-components=1 files/
|
|
|
|
for module in discord_*.tar.br; do
|
|
msg_blue "Extracting ${module}"
|
|
tar -xf "${module}" --use-compress-program=brotli --one-top-level="modules/${module%%-*}" --strip-components=1 files/
|
|
done
|
|
|
|
# prepare launcher script
|
|
sed -i -e "s|@PKGNAME@|${_pkgname}|" \
|
|
-e "s|@ELECTRON@|${_electron}|" \
|
|
discord-launcher.sh
|
|
|
|
# fix the .desktop file
|
|
sed -i -e "s|Exec=.*|Exec=/usr/bin/${_pkgname}|" ${_pkgname^}/$_pkgname.desktop
|
|
}
|
|
|
|
build() {
|
|
msg_blue 'Patching app.asar to use system electron'
|
|
|
|
asar e core/resources/app.asar core/resources/app
|
|
rm core/resources/app.asar
|
|
sed -i \
|
|
-e "s|^Exec=\${exePath}$|Exec=/usr/bin/${_pkgname}|" \
|
|
-e "s|^Name=\${appName}$|Name=${_pkgname^}|" \
|
|
-e "s|^Icon=\${iconPath}$|Icon=${_pkgname}|" \
|
|
-e "s|resourcesPath=path_1\.default\.join(require\.main\.filename,\"\.\.\",\"\.\.\"),|resourcesPath='/usr/share/${_pkgname}/resources',|" \
|
|
-e "s|process\.resourcesPath|'/usr/share/${_pkgname}/resources'|g" \
|
|
core/resources/app/bundle.js
|
|
sed -i -e "s|process\.resourcesPath|'/usr/share/${_pkgname}/resources'|" core/resources/app/splashScreenPreload.js
|
|
|
|
# This is required to properly show the window icon under wayland
|
|
jq ".desktopName = \"${_pkgname}.desktop\"" core/resources/app/package.json > tmp.json
|
|
mv tmp.json core/resources/app/package.json
|
|
|
|
asar p core/resources/app core/resources/app.asar
|
|
rm -rf core/resources/app
|
|
|
|
# Set the newUpdater key to false in build_info.json in order to disable the new Discord updater (released on 2026-05-04, version 1.0.136),
|
|
# Also add a localModulesRoot key that points to the Discord modules we're packaging.
|
|
jq ".newUpdater = false | .localModulesRoot = \"/usr/share/${_pkgname}/modules\"" core/resources/build_info.json > tmp.json
|
|
mv tmp.json core/resources/build_info.json
|
|
|
|
msg_blue 'Patching Krisp to run with system electron'
|
|
# original: https://github.com/sersorrel/sys/blob/main/hm/discord/krisp-patcher.py
|
|
python krisp-patcher.py "modules/discord_krisp/discord_krisp.node" \
|
|
|| error 'Krisp patcher failed. You can comment it out in the PKGBUILD, but Krisp will not work.'
|
|
|
|
# Krisp fails to initialize if this directory is not present (or if can't be created). Logs:
|
|
# [MediaEngineStore] Failed to load Krisp module: Failed to setup Krisp module, error code: -4
|
|
# [AVError] AV error reported: noise-canceller-error {"underlyingError":"NoiseCancellerError.KRISP_INIT_ERROR_GLOBAL_INIT"}
|
|
mkdir -p "modules/discord_krisp/KMS/logs"
|
|
}
|
|
|
|
package() {
|
|
# create necessary directories
|
|
install -d "${pkgdir}/usr/share/${_pkgname}"
|
|
|
|
# copy relevant data
|
|
cp -r core/resources/ "${pkgdir}/usr/share/${_pkgname}/"
|
|
cp -r modules/ "${pkgdir}/usr/share/${_pkgname}/"
|
|
|
|
# intall icon and desktop file
|
|
install -Dm 644 ${_pkgname^}/$_pkgname.png "${pkgdir}/usr/share/icons/hicolor/256x256/apps/${_pkgname}.png"
|
|
install -Dm 644 ${_pkgname^}/$_pkgname.desktop "${pkgdir}/usr/share/applications/${_pkgname}.desktop"
|
|
|
|
# install the launch script
|
|
install -Dm 755 discord-launcher.sh "${pkgdir}/usr/bin/${_pkgname}"
|
|
|
|
# install licenses
|
|
install -Dm 644 LICENSE.html "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.html"
|
|
install -Dm 644 OSS-LICENSES.html "${pkgdir}/usr/share/licenses/${pkgname}/OSS-LICENSES.html"
|
|
}
|