1{ callPackage, fetchzip, dart, lib, stdenv }:
2let
3 mkCustomFlutter = args: callPackage ./flutter.nix args;
4 wrapFlutter = flutter: callPackage ./wrapper.nix { inherit flutter; };
5 getPatches = dir:
6 let files = builtins.attrNames (builtins.readDir dir);
7 in map (f: dir + ("/" + f)) files;
8 mkFlutter = { version, engineVersion, dartVersion, hash, dartHash, patches }:
9 let
10 args = {
11 inherit version engineVersion patches;
12
13 dart = dart.override {
14 version = dartVersion;
15 sources = {
16 "${dartVersion}-x86_64-linux" = fetchzip {
17 url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip";
18 sha256 = dartHash.x86_64-linux;
19 };
20 "${dartVersion}-aarch64-linux" = fetchzip {
21 url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip";
22 sha256 = dartHash.aarch64-linux;
23 };
24 };
25 };
26 src = fetchzip {
27 url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${version}-stable.tar.xz";
28 sha256 = hash;
29 };
30 };
31 in
32 (mkCustomFlutter args).overrideAttrs (prev: next: {
33 passthru = next.passthru // rec {
34 inherit wrapFlutter mkCustomFlutter mkFlutter;
35 buildFlutterApplication = callPackage ../../../build-support/flutter {
36 # Package a minimal version of Flutter that only uses Linux desktop release artifacts.
37 flutter = wrapFlutter
38 (mkCustomFlutter (args // {
39 includedEngineArtifacts = {
40 common = [ "flutter_patched_sdk_product" ];
41 platform.linux = lib.optionals stdenv.hostPlatform.isLinux
42 (lib.genAttrs ((lib.optional stdenv.hostPlatform.isx86_64 "x64") ++ (lib.optional stdenv.hostPlatform.isAarch64 "arm64"))
43 (architecture: [ "release" ]));
44 };
45 }));
46 };
47 };
48 });
49
50 flutter2Patches = getPatches ./patches/flutter2;
51 flutter3Patches = getPatches ./patches/flutter3;
52in
53{
54 inherit wrapFlutter;
55 stable = mkFlutter {
56 version = "3.10.0";
57 engineVersion = "d44b5a94c976fbb65815374f61ab5392a220b084";
58 dartVersion = "3.0.0";
59 hash = "sha256-3cRVPNrph9QUUnAdQhd5TOp2i1zFRxJ+OhqxXrJ+ncU=";
60 dartHash = {
61 x86_64-linux = "sha256-AhvAt2c0URzL+MSIXlwbkuWNuhKbWvUpoyiYf1vXfcc=";
62 aarch64-linux = "sha256-bo4kZtNpj91JaCW8+GD4bQ60oOWQ7daj4C7cAHwLMtw=";
63 };
64 patches = flutter3Patches;
65 };
66
67 v37 = mkFlutter {
68 version = "3.7.12";
69 engineVersion = "1a65d409c7a1438a34d21b60bf30a6fd5db59314";
70 dartVersion = "2.19.6";
71 hash = "sha256-5ExDBQXIpoZ5NwS66seY3m9/V8xDiyq/RdzldAyHdEE=";
72 dartHash = {
73 x86_64-linux = "sha256-4ezRuwhQHVCxZg5WbzU/tBUDvZVpfCo6coDE4K0UzXo=";
74 aarch64-linux = "sha256-pYmClIqOo0sRPOkrcF4xQbo0mHlrr1TkhT1fnNyYNck=";
75 };
76 patches = flutter3Patches;
77 };
78
79 v2 = mkFlutter {
80 version = "2.10.5";
81 engineVersion = "57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab";
82 dartVersion = "2.16.2";
83 hash = "sha256-MxaWvlcCfXN8gsC116UMzqb4LgixHL3YjrGWy7WYgW4=";
84 dartHash = {
85 x86_64-linux = "sha256-vxKxysg6e3Qxtlp4dLxOZaBtgHGtl7XYd73zFZd9yJc=";
86 aarch64-linux = "sha256-ZfpR6fj/a9Bsgrg31Z/uIJaCHIWtcQH3VTTVkDJKkwA=";
87 };
88 patches = flutter2Patches;
89 };
90}