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