Files
cp-nix/nix/unwrapped.nix
T
2026-08-27 12:07:40 +08:00

140 lines
3.0 KiB
Nix

{
lib,
stdenv,
autoPatchelfHook,
electron_41,
fetchPnpmDeps,
nodejs_22,
pnpm_10,
pnpmConfigHook,
alsa-lib,
at-spi2-core,
glib,
libGL,
libayatana-appindicator,
libnotify,
libsecret,
libXScrnSaver,
libXtst,
nspr,
nss,
openssl,
pkg-config,
udev,
src,
sysproxy,
country,
geoip,
geosite,
metadb,
asn,
subStore,
subStoreFrontend,
notoFontsColorEmoji,
mihomo,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "clash-party-unwrapped";
version = "2.0.2";
inherit src;
patches = [
../patches/branding.patch
../patches/disable-updater.patch
../patches/stable-core-only.patch
../patches/nix-tun-wrapper.patch
../patches/system-electron-resources.patch
];
pnpmDeps = fetchPnpmDeps {
pname = finalAttrs.pname;
version = finalAttrs.version;
inherit src;
pnpm = pnpm_10;
fetcherVersion = 4;
prePnpmInstall = ''
pnpm config set fetch-retries 5
pnpm config set fetch-timeout 120000
pnpm config set network-concurrency 4
'';
hash = "sha256-lGq5OcUSNhweF2EGN8tqk+qIyrCDTt049BdZTJvEIvg=";
};
nativeBuildInputs = [
autoPatchelfHook
nodejs_22
pkg-config
pnpmConfigHook
pnpm_10
];
buildInputs = [
alsa-lib
at-spi2-core
glib
libGL
libayatana-appindicator
libnotify
libsecret
libXScrnSaver
libXtst
nspr
nss
openssl
stdenv.cc.cc.lib
udev
];
env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
npm_config_build_from_source = "true";
};
postPatch = ''
mkdir -p extra/sidecar extra/files
ln -s ${mihomo}/bin/mihomo extra/sidecar/mihomo
cp ${sysproxy}/sysproxy.linux-${if stdenv.hostPlatform.isx86_64 then "x64" else "arm64"}-gnu.node \
extra/sidecar/
install -Dm444 ${country} extra/files/country.mmdb
install -Dm444 ${geoip} extra/files/geoip.dat
install -Dm444 ${geosite} extra/files/geosite.dat
install -Dm444 ${metadb} extra/files/geoip.metadb
install -Dm444 ${asn} extra/files/ASN.mmdb
install -Dm444 ${subStore}/share/sub-store/sub-store.bundle.js \
extra/files/sub-store.bundle.cjs
cp -r ${subStoreFrontend} extra/files/sub-store-frontend
find ${notoFontsColorEmoji} -name NotoColorEmoji.ttf -exec \
install -Dm444 {} src/renderer/src/assets/NotoColorEmoji.ttf \;
'';
buildPhase = ''
runHook preBuild
mkdir .electron-dist
cp -RL ${electron_41.dist}/. .electron-dist/
chmod -R u+w .electron-dist
node_modules/.bin/electron-vite build
npm_config_nodedir=${electron_41.headers} \
node_modules/.bin/electron-builder --dir \
--config=electron-builder.yml \
--config.electronDist=$PWD/.electron-dist \
--config.electronVersion=${electron_41.version}
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/lib/clash-party
cp -r dist/linux-unpacked/resources $out/lib/clash-party/
install -Dm644 build/icon.png $out/share/icons/hicolor/512x512/apps/clash-party.png
runHook postInstall
'';
})