Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 119 lines 3.2 kB view raw
1{ 2 lib, 3 stdenv, 4 makeWrapper, 5 makeDesktopItem, 6 fetchurl, 7 openjdk17-bootstrap, 8 jdk11, 9 jdk8, 10}: 11 12let 13 generic = 14 { 15 version, 16 hash, 17 platform ? "", 18 jdk, 19 ... 20 }@attrs: 21 let 22 desktopItem = makeDesktopItem { 23 categories = [ 24 "Network" 25 "Development" 26 "WebDevelopment" 27 "Java" 28 ]; 29 desktopName = "Charles"; 30 exec = "charles %F"; 31 genericName = "Web Debugging Proxy"; 32 icon = "charles-proxy"; 33 mimeTypes = [ 34 "application/x-charles-savedsession" 35 "application/x-charles-savedsession+xml" 36 "application/x-charles-savedsession+json" 37 "application/har+json" 38 "application/vnd.tcpdump.pcap" 39 "application/x-charles-trace" 40 ]; 41 name = "Charles"; 42 startupNotify = true; 43 }; 44 45 in 46 stdenv.mkDerivation { 47 pname = "charles"; 48 inherit version; 49 50 src = fetchurl { 51 url = "https://www.charlesproxy.com/assets/release/${version}/charles-proxy-${version}${platform}.tar.gz"; 52 curlOptsList = [ 53 "--user-agent" 54 "Mozilla/5.0" 55 ]; # HTTP 104 otherwise 56 inherit hash; 57 }; 58 59 nativeBuildInputs = [ makeWrapper ]; 60 61 installPhase = '' 62 runHook preInstall 63 64 makeWrapper ${jdk}/bin/java $out/bin/charles \ 65 --add-flags "-Xmx1024M -Dcharles.config='~/.charles.config' ${lib.optionalString (lib.versionOlder version "5.0") "-jar $out/share/java/charles.jar"} ${lib.optionalString (lib.versionAtLeast version "5.0") "-XX:+UseZGC -Djava.library.path='$out/share/java' --add-opens java.base/sun.security.ssl=com.charlesproxy --add-opens java.desktop/java.awt.event=com.charlesproxy --add-opens java.base/java.io=com.charlesproxy --add-modules com.jthemedetector,com.formdev.flatlaf --module-path '$out/share/java' -m com.charlesproxy"}" 66 67 for fn in lib/*.jar; do 68 install -D -m644 $fn $out/share/java/$(basename $fn) 69 done 70 71 mkdir -p $out/share/applications 72 ln -s ${desktopItem}/share/applications/* $out/share/applications/ 73 74 mkdir -p $out/share/icons 75 cp -r icon $out/share/icons/hicolor 76 77 runHook postInstall 78 ''; 79 80 meta = { 81 description = "Web Debugging Proxy"; 82 homepage = "https://www.charlesproxy.com/"; 83 maintainers = with lib.maintainers; [ 84 kalbasit 85 kashw2 86 ]; 87 sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; 88 license = lib.licenses.unfree; 89 platforms = lib.platforms.unix; 90 }; 91 }; 92 93in 94{ 95 charles5 = ( 96 generic { 97 version = "5.0"; 98 hash = "sha256-gvspRI3uF7bjE4UBuTGS5+n2h0nKudLtW3sqs2GZIyM="; 99 platform = "_x86_64"; 100 jdk = openjdk17-bootstrap; 101 } 102 ); 103 charles4 = ( 104 generic { 105 version = "4.6.8"; 106 hash = "sha256-AaS+zmQTWsGoLEhyGHA/UojmctE7IV0N9fnygNhEPls="; 107 platform = "_amd64"; 108 jdk = jdk11; 109 } 110 ); 111 charles3 = ( 112 generic { 113 version = "3.12.3"; 114 hash = "sha256-Wotxzf6kutYv1F6q71eJVojVJsATJ81war/w4K1A848="; 115 jdk = jdk8.jre; 116 mainProgram = "charles"; 117 } 118 ); 119}