lol

wpsoffice-cn: 12.1.0.17900 -> 12.1.2.22571

+101 -78
+55 -78
pkgs/by-name/wp/wpsoffice-cn/package.nix
··· 8 8 libtool, 9 9 libxkbcommon, 10 10 nspr, 11 - mesa, 12 - libtiff, 13 11 udev, 14 12 gtk3, 13 + libgbm, 14 + libusb1, 15 15 libsForQt5, 16 16 xorg, 17 17 cups, 18 18 pango, 19 - libjpeg, 20 - gtk2, 21 - gdk-pixbuf, 22 - libpulseaudio, 23 - libbsd, 24 - libusb1, 19 + bzip2, 25 20 libmysqlclient, 26 - llvmPackages, 27 - dbus, 28 - gcc-unwrapped, 29 - freetype, 30 - curl, 31 - makeWrapper, 32 21 runCommandLocal, 22 + curl, 23 + coreutils, 33 24 cacert, 34 - coreutils, 35 25 }: 26 + 36 27 let 37 - pkgVersion = "12.1.0.17900"; 38 - url = "https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/${lib.last (lib.splitVersion pkgVersion)}/wps-office_${pkgVersion}_amd64.deb"; 39 - hash = "sha256-i2EVCmDLE2gx7l2aAo+fW8onP/z+xlPIbQYwKhQ46+o="; 40 - uri = builtins.replaceStrings [ "https://wps-linux-personal.wpscdn.cn" ] [ "" ] url; 41 - securityKey = "7f8faaaa468174dc1c9cd62e5f218a5b"; 42 - in 43 - stdenv.mkDerivation rec { 44 28 pname = "wpsoffice-cn"; 45 - version = pkgVersion; 29 + sources = import ./sources.nix; 30 + version = sources.version; 46 31 47 - src = 48 - runCommandLocal "wps-office_${version}_amd64.deb" 32 + fetch = 33 + { 34 + url, 35 + uri, 36 + hash, 37 + }: 38 + runCommandLocal "wpsoffice-cn-${version}-src" 49 39 { 50 - outputHashMode = "recursive"; 51 40 outputHashAlgo = "sha256"; 52 41 outputHash = hash; 53 42 ··· 60 49 SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; 61 50 } 62 51 '' 52 + readonly SECURITY_KEY="7f8faaaa468174dc1c9cd62e5f218a5b" 53 + 63 54 timestamp10=$(date '+%s') 64 - md5hash=($(echo -n "${securityKey}${uri}$timestamp10" | md5sum)) 65 - curl \ 66 - --retry 3 --retry-delay 3 \ 67 - "${url}?t=$timestamp10&k=$md5hash" \ 68 - > $out 55 + md5hash=($(printf '%s' "$SECURITY_KEY${uri}$timestamp10" | md5sum)) 56 + 57 + curl --retry 3 --retry-delay 3 "${url}?t=$timestamp10&k=$md5hash" > $out 69 58 ''; 70 59 60 + srcs = { 61 + x86_64-linux = fetch sources.x86_64; 62 + }; 63 + 64 + src = 65 + srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); 66 + in 67 + 68 + stdenv.mkDerivation { 69 + inherit pname src version; 70 + 71 71 unpackCmd = "dpkg -x $src ."; 72 72 sourceRoot = "."; 73 73 74 74 nativeBuildInputs = [ 75 75 dpkg 76 76 autoPatchelfHook 77 - makeWrapper 78 77 ]; 79 78 80 79 buildInputs = [ 81 80 alsa-lib 82 81 at-spi2-core 83 82 libtool 84 - libjpeg 85 83 libxkbcommon 86 84 nspr 87 - mesa 88 - libtiff 89 85 udev 90 86 gtk3 91 - libsForQt5.qt5.qtbase 87 + libgbm 88 + libusb1 89 + libsForQt5.qtbase 92 90 xorg.libXdamage 93 91 xorg.libXtst 94 92 xorg.libXv 95 - gtk2 96 - gdk-pixbuf 97 - libpulseaudio 98 - xorg.libXScrnSaver 99 - xorg.libXxf86vm 100 - libbsd 101 - libusb1 102 - libmysqlclient 103 - llvmPackages.openmp 104 - dbus 105 93 ]; 106 94 107 95 dontWrapQtApps = true; 108 96 97 + stripAllList = [ "opt" ]; 98 + 109 99 runtimeDependencies = map lib.getLib [ 110 100 cups 111 101 pango 112 - freetype 113 - gcc-unwrapped.lib 114 102 ]; 115 103 116 104 autoPatchelfIgnoreMissingDeps = [ 117 - # distribution is missing libkappessframework.so 118 - "libkappessframework.so" 119 - # qt4 support is deprecated 120 - "libQtCore.so.4" 121 - "libQtNetwork.so.4" 122 - "libQtXml.so.4" 123 - # file manager integration. Not needed 124 - "libnautilus-extension.so.1" 125 - "libcaja-extension.so.1" 126 105 "libpeony.so.3" 127 - # libuof.so is a exclusive library in WPS. No need to repatch it 128 - "libuof.so" 129 106 ]; 130 107 131 108 installPhase = '' 132 109 runHook preInstall 133 - prefix=$out/opt/kingsoft/wps-office 110 + 134 111 mkdir -p $out 112 + 135 113 cp -r opt $out 136 - cp -r usr/* $out 137 - for i in wps wpp et wpspdf; do 138 - substituteInPlace $out/bin/$i \ 139 - --replace /opt/kingsoft/wps-office $prefix 114 + cp -r usr/{bin,share} $out 115 + 116 + for i in $out/bin/*; do 117 + substituteInPlace $i \ 118 + --replace-fail /opt/kingsoft/wps-office $out/opt/kingsoft/wps-office 140 119 done 141 - for i in $out/share/applications/*;do 120 + 121 + for i in $out/share/applications/*; do 142 122 substituteInPlace $i \ 143 - --replace /usr/bin $out/bin 123 + --replace-fail /usr/bin $out/bin 144 124 done 145 - # need system freetype and gcc lib to run properly 146 - for i in wps wpp et wpspdf wpsoffice; do 147 - wrapProgram $out/opt/kingsoft/wps-office/office6/$i \ 148 - --set LD_PRELOAD "${freetype}/lib/libfreetype.so" \ 149 - --set LD_LIBRARY_PATH "${lib.makeLibraryPath [ gcc-unwrapped.lib ]}" 150 - done 125 + 151 126 runHook postInstall 152 127 ''; 153 128 154 129 preFixup = '' 155 - # The following libraries need libtiff.so.5, but nixpkgs provides libtiff.so.6 156 - patchelf --replace-needed libtiff.so.5 libtiff.so $out/opt/kingsoft/wps-office/office6/{libpdfmain.so,libqpdfpaint.so,qt/plugins/imageformats/libqtiff.so,addons/pdfbatchcompression/libpdfbatchcompressionapp.so} 157 - patchelf --replace-needed libtiff.so.5 libtiff.so $out/opt/kingsoft/wps-office/office6/addons/ksplitmerge/libksplitmergeapp.so 158 - patchelf --add-needed libtiff.so $out/opt/kingsoft/wps-office/office6/libwpsmain.so 159 - # Fix: Wrong JPEG library version: library is 62, caller expects 80 160 - patchelf --add-needed libjpeg.so $out/opt/kingsoft/wps-office/office6/libwpsmain.so 130 + # libbz2 dangling symlink 131 + ln -sf ${bzip2.out}/lib/libbz2.so $out/opt/kingsoft/wps-office/office6/libbz2.so 161 132 # dlopen dependency 162 133 patchelf --add-needed libudev.so.1 $out/opt/kingsoft/wps-office/office6/addons/cef/libcef.so 134 + # libmysqlclient dependency 135 + patchelf --replace-needed libmysqlclient.so.18 libmysqlclient.so $out/opt/kingsoft/wps-office/office6/libFontWatermark.so 136 + patchelf --add-rpath ${libmysqlclient}/lib/mariadb $out/opt/kingsoft/wps-office/office6/libFontWatermark.so 163 137 ''; 138 + 139 + passthru.updateScript = ./update.sh; 164 140 165 141 meta = with lib; { 166 142 description = "Office suite, formerly Kingsoft Office"; ··· 174 150 th0rgal 175 151 wineee 176 152 pokon548 153 + chillcicada 177 154 ]; 178 155 }; 179 156 }
+10
pkgs/by-name/wp/wpsoffice-cn/sources.nix
··· 1 + # Generated by ./update.sh - do not update manually! 2 + # Last updated: 2025-09-15 3 + { 4 + version = "12.1.2.22571"; 5 + x86_64 = { 6 + url = "https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2023/22571/wps-office_12.1.2.22571.AK.preread.sw_480057_amd64.deb"; 7 + uri = "/wps/download/ep/Linux2023/22571/wps-office_12.1.2.22571.AK.preread.sw_480057_amd64.deb"; 8 + hash = "sha256-aB1EWP0Ev5WuAuzih3ybD23qaRRTUjlES1emas+sUDA="; 9 + }; 10 + }
+36
pkgs/by-name/wp/wpsoffice-cn/update.sh
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i bash -p nix curl cacert 3 + 4 + set -euo pipefail 5 + 6 + export SSL_CERT_FILE=$NIX_SSL_CERT_FILE 7 + 8 + readonly SECURITY_KEY="7f8faaaa468174dc1c9cd62e5f218a5b" 9 + prefix="https://wps-linux-personal.wpscdn.cn" 10 + 11 + payload=$(curl -s "https://www.wps.cn/product/wpslinux") 12 + 13 + version=$(echo "$payload" | grep -oP '(?<=banner_txt">)[^<]+') 14 + 15 + amd64_url=$(echo "$payload" | grep -oP "downLoad\('[^']*'" | head -1 | sed "s/downLoad('//;s/'$//") 16 + amd64_uri="${amd64_url#$prefix}" 17 + 18 + timestamp10=$(date '+%s') 19 + md5hash=($(printf '%s' "$SECURITY_KEY$amd64_uri$timestamp10" | md5sum)) 20 + 21 + amd64_hash=$(nix-prefetch-url --name "wpsoffice-cn-$version.deb" "$amd64_url?t=$timestamp10&k=$md5hash") 22 + 23 + amd64_hash=$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 "$amd64_hash") 24 + 25 + cat > sources.nix << EOF 26 + # Generated by ./update.sh - do not update manually! 27 + # Last updated: $(date +%F) 28 + { 29 + version = "$version"; 30 + x86_64 = { 31 + url = "$amd64_url"; 32 + uri = "$amd64_uri"; 33 + hash = "$amd64_hash"; 34 + }; 35 + } 36 + EOF