at master 4.4 kB view raw
1{ 2 useNixpkgsEngine ? false, 3 callPackage, 4 fetchzip, 5 fetchFromGitHub, 6 dart, 7 lib, 8 stdenv, 9 runCommand, 10}: 11let 12 mkCustomFlutter = args: callPackage ./flutter.nix args; 13 wrapFlutter = flutter: callPackage ./wrapper.nix { inherit flutter; }; 14 getPatches = 15 dir: 16 let 17 files = builtins.attrNames (builtins.readDir dir); 18 in 19 if (builtins.pathExists dir) then map (f: dir + ("/" + f)) files else [ ]; 20 mkFlutter = 21 { 22 version, 23 engineVersion, 24 engineSwiftShaderHash, 25 engineSwiftShaderRev, 26 engineHashes, 27 enginePatches, 28 dartVersion, 29 flutterHash, 30 dartHash, 31 patches, 32 pubspecLock, 33 artifactHashes, 34 channel, 35 }: 36 let 37 args = { 38 inherit 39 version 40 engineVersion 41 engineSwiftShaderRev 42 engineSwiftShaderHash 43 engineHashes 44 enginePatches 45 patches 46 pubspecLock 47 artifactHashes 48 useNixpkgsEngine 49 channel 50 ; 51 52 dart = dart.override { 53 version = dartVersion; 54 sources = { 55 "${dartVersion}-x86_64-linux" = fetchzip { 56 url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip"; 57 sha256 = dartHash.x86_64-linux; 58 }; 59 "${dartVersion}-aarch64-linux" = fetchzip { 60 url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip"; 61 sha256 = dartHash.aarch64-linux; 62 }; 63 "${dartVersion}-x86_64-darwin" = fetchzip { 64 url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-x64-release.zip"; 65 sha256 = dartHash.x86_64-darwin; 66 }; 67 "${dartVersion}-aarch64-darwin" = fetchzip { 68 url = "https://storage.googleapis.com/dart-archive/channels/${channel}/release/${dartVersion}/sdk/dartsdk-macos-arm64-release.zip"; 69 sha256 = dartHash.aarch64-darwin; 70 }; 71 }; 72 }; 73 src = 74 let 75 source = fetchFromGitHub { 76 owner = "flutter"; 77 repo = "flutter"; 78 rev = version; 79 hash = flutterHash; 80 }; 81 in 82 ( 83 if lib.versionAtLeast version "3.32" then 84 # # Could not determine engine revision 85 (runCommand source.name { } '' 86 cp -r ${source} $out 87 chmod +w $out/bin 88 mkdir $out/bin/cache 89 cp $out/bin/internal/engine.version $out/bin/cache/engine.stamp 90 touch $out/bin/cache/engine.realm 91 '') 92 else 93 source 94 ); 95 }; 96 in 97 (mkCustomFlutter args).overrideAttrs ( 98 prev: next: { 99 passthru = next.passthru // { 100 inherit wrapFlutter mkCustomFlutter mkFlutter; 101 buildFlutterApplication = callPackage ./build-support/build-flutter-application.nix { 102 flutter = wrapFlutter (mkCustomFlutter args); 103 }; 104 }; 105 } 106 ); 107 108 flutterVersions = lib.mapAttrs' ( 109 version: _: 110 let 111 versionDir = ./versions + "/${version}"; 112 data = lib.importJSON (versionDir + "/data.json"); 113 in 114 lib.nameValuePair "v${version}" ( 115 wrapFlutter ( 116 mkFlutter ( 117 { 118 patches = (getPatches ./patches) ++ (getPatches (versionDir + "/patches")); 119 enginePatches = (getPatches ./engine/patches) ++ (getPatches (versionDir + "/engine/patches")); 120 } 121 // data 122 ) 123 ) 124 ) 125 ) (builtins.readDir ./versions); 126 127 stableFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "stable") flutterVersions; 128 betaFlutterVersions = lib.attrsets.filterAttrs (_: v: v.channel == "beta") flutterVersions; 129in 130flutterVersions 131// { 132 inherit wrapFlutter mkFlutter; 133} 134// lib.optionalAttrs (betaFlutterVersions != { }) { 135 beta = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames betaFlutterVersions))}; 136} 137// lib.optionalAttrs (stableFlutterVersions != { }) { 138 stable = flutterVersions.${lib.last (lib.naturalSort (builtins.attrNames stableFlutterVersions))}; 139}