├── .envrc ├── .gitignore ├── pubspec-nix ├── default.nix └── pubspec-nix.py ├── checks ├── check-build-dart-script.nix └── default-flutter-build │ ├── default.nix │ ├── pubspec.lock │ └── pubspec-nix.lock ├── utils ├── unpack-tarball.nix ├── mk-py-script.nix └── build-dart-script.nix ├── elinux ├── patches │ └── elinux │ │ ├── pubspec.patch │ │ ├── create.patch │ │ └── deps2nix.lock ├── package.nix └── pubspec-nix.lock ├── flutter ├── patches │ ├── copy-without-perms.patch │ ├── move-cache.patch │ ├── disable-auto-update.patch │ └── git-dir.patch ├── default.nix └── package.nix ├── shells ├── platforms │ ├── android.nix │ ├── linux.nix │ └── elinux.nix └── mk-flutter-shell.nix ├── LICENSE ├── flake.lock ├── flake.nix └── README.md /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | result 2 | .direnv 3 | 4 | -------------------------------------------------------------------------------- /pubspec-nix/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | mkPyScript, 3 | nix, 4 | nix-prefetch-git 5 | }: (mkPyScript { 6 | name = "pubspec-nix"; 7 | dependencies = [nix nix-prefetch-git]; 8 | pythonLibraries = ps: with ps; [pyyaml tqdm]; 9 | content = builtins.readFile ./pubspec-nix.py; 10 | }) 11 | -------------------------------------------------------------------------------- /checks/check-build-dart-script.nix: -------------------------------------------------------------------------------- 1 | {buildDartScript, hello}: 2 | 3 | buildDartScript "check-dart-script" { 4 | dependencies = [ hello ]; 5 | } '' 6 | import 'dart:io'; 7 | 8 | void main() async { 9 | final output = await Process.run("hello", []); 10 | print("Output: " + output.stdout); 11 | } 12 | '' 13 | -------------------------------------------------------------------------------- /utils/unpack-tarball.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | gnutar, 4 | }: d: 5 | stdenv.mkDerivation { 6 | name = "${d.src.name}-unpacked"; 7 | phases = ["installPhase"]; 8 | nativeBuildInputs = [gnutar]; 9 | installPhase = '' 10 | mkdir "$out" 11 | tar xf "${d.src}" --strip-components=1 -C "$out" 12 | ''; 13 | } 14 | -------------------------------------------------------------------------------- /elinux/patches/elinux/pubspec.patch: -------------------------------------------------------------------------------- 1 | diff --git a/pubspec.yaml b/pubspec.yaml 2 | index e2100bc..e7cf7d5 100644 3 | --- a/pubspec.yaml 4 | +++ b/pubspec.yaml 5 | @@ -6,6 +6,9 @@ publish_to: none 6 | environment: 7 | sdk: ">=2.17.0 <3.0.0" 8 | 9 | +executables: 10 | + flutter-elinux: flutter_elinux 11 | + 12 | dependencies: 13 | flutter_tools: 14 | path: flutter/packages/flutter_tools 15 | @@ -17,9 +20,9 @@ dependencies: 16 | xml: 17 | yaml: 18 | 19 | -dev_dependencies: 20 | - flutter_test: 21 | - sdk: flutter 22 | - mockito: 23 | - pedantic: 24 | - test: 25 | +# dev_dependencies: 26 | +# flutter_test: 27 | +# sdk: flutter 28 | +# mockito: 29 | +# pedantic: 30 | +# test: 31 | -------------------------------------------------------------------------------- /checks/default-flutter-build/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | buildFlutterApp, 3 | flutter, 4 | runCommand, 5 | }: let 6 | src = 7 | runCommand "flutter-default-app-src" { 8 | nativeBuildInputs = [flutter]; 9 | } '' 10 | export HOME=/tmp 11 | flutter create app --no-pub 12 | cp ${./pubspec.lock} ./ 13 | cp -rT app $out 14 | ''; 15 | 16 | pubspecNixLockFile = ./pubspec-nix.lock; 17 | # pubspecNixLockFile = stdenvNoCC.mkDerivation { 18 | # name = "pubspec-nix-lock"; 19 | # inherit src; 20 | # buildInputs = [pubspec-nix]; 21 | # buildPhase = '' 22 | # pubspec-nix --no-hash 23 | # ''; 24 | # installPhase = '' 25 | # cp pubspec-nix.lock $out 26 | # ''; 27 | # }; 28 | in 29 | buildFlutterApp { 30 | pname = "flutter-default-app"; 31 | version = "1.0.0"; 32 | 33 | inherit pubspecNixLockFile src; 34 | } 35 | -------------------------------------------------------------------------------- /utils/mk-py-script.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | python, 4 | stdenvNoCC, 5 | makeWrapper, 6 | writeText, 7 | }: { 8 | name, 9 | pythonLibraries ? (ps: []), 10 | dependencies ? [], 11 | isolate ? true, 12 | content, 13 | }: 14 | stdenvNoCC.mkDerivation { 15 | inherit name; 16 | buildInputs = [makeWrapper]; 17 | unpackPhase = "true"; 18 | installPhase = let 19 | wrap = 20 | if isolate 21 | then "wrapProgram $out/bin/${name} --set PATH ${lib.makeBinPath dependencies}" 22 | else "wrapProgram $out/bin/${name} --suffix PATH : ${ 23 | lib.makeBinPath dependencies 24 | }"; 25 | wrappedPython = python.withPackages pythonLibraries; 26 | 27 | file = writeText "${name}-py-file" "#!${wrappedPython}/bin/python\n\n${content}"; 28 | in '' 29 | mkdir -p $out/bin 30 | cp ${file} $out/bin/${name} 31 | chmod +x $out/bin/${name} 32 | ${wrap} 33 | ''; 34 | } 35 | -------------------------------------------------------------------------------- /flutter/patches/copy-without-perms.patch: -------------------------------------------------------------------------------- 1 | diff --git a/packages/flutter_tools/lib/src/build_system/targets/assets.dart b/packages/flutter_tools/lib/src/build_system/targets/assets.dart 2 | index 5f458bd53e..7a6c59f98d 100644 3 | --- a/packages/flutter_tools/lib/src/build_system/targets/assets.dart 4 | +++ b/packages/flutter_tools/lib/src/build_system/targets/assets.dart 5 | @@ -128,7 +128,11 @@ Future copyAssets( 6 | break; 7 | } 8 | if (doCopy) { 9 | - await (content.file as File).copy(file.path); 10 | + // Not using File.copy because it preserves permissions. 11 | + final sourceFile = content.file as File; 12 | + final destinationFile = file; 13 | + 14 | + await destinationFile.writeAsBytes(await sourceFile.readAsBytes(), flush: true); 15 | } 16 | } else { 17 | await file.writeAsBytes(await entry.value.contentsAsBytes()); 18 | -------------------------------------------------------------------------------- /shells/platforms/android.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | jdk11, 4 | gradle, 5 | androidStudioPackages, 6 | android-sdk-builder, 7 | flutter, 8 | }: { 9 | sdkPackages ? (_sdkPkgs: []), 10 | androidStudio ? false, 11 | emulator ? false, 12 | }: let 13 | android-sdk = 14 | android-sdk-builder 15 | (sdkPkgs: 16 | with sdkPkgs; 17 | lib.lists.flatten [ 18 | cmdline-tools-latest 19 | platform-tools 20 | ] 21 | ++ (sdkPackages sdkPkgs) 22 | ++ lib.optional emulator sdkPkgs.emulator); 23 | in { 24 | shellHook = '' 25 | export JAVA_HOME=${jdk11.home} 26 | export ANDROID_SDK_ROOT=${android-sdk}/share/android-sdk 27 | export ANDROID_HOME=${android-sdk}/share/android-sdk 28 | 29 | if flutter config | grep -q "android-sdk: "; then 30 | flutter config --android-sdk "" 31 | fi 32 | ''; 33 | 34 | buildInputs = 35 | [ 36 | android-sdk 37 | gradle 38 | jdk11 39 | flutter.fhsWrap # Gradle requires fhs 40 | ] 41 | ++ lib.optional androidStudio androidStudioPackages.stable; 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Flafy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /shells/platforms/linux.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | cmake, 4 | ninja, 5 | pkg-config, 6 | util-linux, 7 | libselinux, 8 | libsepol, 9 | libthai, 10 | libdatrie, 11 | libxkbcommon, 12 | at-spi2-core, 13 | xorg, 14 | dbus, 15 | gtk3, 16 | glib, 17 | pcre, 18 | pcre2, 19 | libepoxy, 20 | git, 21 | dart, 22 | bash, 23 | curl, 24 | unzip, 25 | which, 26 | xz, 27 | clang, 28 | }: _: { 29 | shellHook = '' 30 | export LD_LIBRARY_PATH=''$LD_LIBRARY_PATH:${lib.makeLibraryPath [libepoxy libdatrie]} 31 | ''; 32 | 33 | nativeBuildInputs = [ 34 | cmake 35 | ninja 36 | pkg-config 37 | bash 38 | curl 39 | git 40 | unzip 41 | which 42 | xz 43 | ]; 44 | 45 | buildInputs = [ 46 | at-spi2-core.dev 47 | clang 48 | cmake 49 | dart 50 | dbus.dev 51 | gtk3 52 | libdatrie 53 | libepoxy.dev 54 | libselinux 55 | libsepol 56 | libthai 57 | libxkbcommon 58 | ninja 59 | pcre 60 | pkg-config 61 | util-linux.dev 62 | xorg.libXdmcp 63 | xorg.libXtst 64 | gtk3 65 | glib 66 | pcre 67 | pcre2 68 | util-linux 69 | ]; 70 | } 71 | -------------------------------------------------------------------------------- /shells/platforms/elinux.nix: -------------------------------------------------------------------------------- 1 | # Assumes "linux" shell is also enabled 2 | { 3 | lib, 4 | libxkbcommon, 5 | libdrm, 6 | libinput, 7 | eudev, 8 | systemd, 9 | gnumake, 10 | wayland, 11 | wayland-protocols, 12 | wlr-protocols, 13 | wayland-utils, 14 | egl-wayland, 15 | mesa, 16 | libglvnd, 17 | flutter, 18 | flutter-elinux, 19 | }: {exposeAsFlutter ? false}: { 20 | shellHook = '' 21 | export LD_LIBRARY_PATH=''$LD_LIBRARY_PATH:${lib.makeLibraryPath [ 22 | libxkbcommon 23 | wayland 24 | mesa 25 | libglvnd 26 | libdrm 27 | libinput 28 | eudev 29 | systemd 30 | ]} 31 | ''; 32 | 33 | nativeBuildInputs = [ 34 | gnumake 35 | ]; 36 | 37 | buildInputs = let 38 | flutter-elinux-mod = 39 | if exposeAsFlutter 40 | then (flutter.makeFhsWrapper { 41 | derv = flutter-elinux; 42 | executableName = "flutter-elinux"; 43 | newExecutableName = "flutter"; 44 | }) 45 | else flutter-elinux; 46 | in [ 47 | wayland 48 | wayland-protocols 49 | wlr-protocols 50 | wayland-utils 51 | egl-wayland 52 | mesa 53 | libglvnd 54 | flutter-elinux-mod 55 | 56 | # drm 57 | libdrm 58 | libinput 59 | eudev 60 | systemd 61 | ]; 62 | } 63 | -------------------------------------------------------------------------------- /flutter/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | callPackage, 3 | fetchurl, 4 | dart, 5 | }: let 6 | mkFlutter = { 7 | version, 8 | dartVersion, 9 | hash, 10 | dartHash, 11 | }: callPackage (import ./package.nix { 12 | pname = "flutter"; 13 | inherit version; 14 | 15 | src = fetchurl { 16 | url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${version}-stable.tar.xz"; 17 | sha256 = hash; 18 | }; 19 | 20 | dart = dart.override { 21 | version = dartVersion; 22 | sources = { 23 | "${dartVersion}-x86_64-linux" = fetchurl { 24 | url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-x64-release.zip"; 25 | sha256 = dartHash.x86_64-linux; 26 | }; 27 | "${dartVersion}-aarch64-linux" = fetchurl { 28 | url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${dartVersion}/sdk/dartsdk-linux-arm64-release.zip"; 29 | sha256 = dartHash.aarch64-linux; 30 | }; 31 | }; 32 | }; 33 | }) {}; 34 | in { 35 | stable = mkFlutter { 36 | #version = "3.3.8"; 37 | #dartVersion = "2.18.4"; 38 | #hash = "sha256-QH+10F6a0XYEvBetiAi45Sfy7WTdVZ1i8VOO4JuSI24="; 39 | #dartHash = { 40 | # x86_64-linux = "sha256-lFw+KaxzhuAMnu6ypczINqywzpiD+8Kd+C/UHJDrO9Y="; 41 | # aarch64-linux = "sha256-snlFTY4oJ4ALGLc210USbI2Z///cx1IVYUWm7Vo5z2I="; 42 | #}; 43 | version = "3.7.9"; 44 | dartVersion = "2.19.6"; 45 | hash = "sha256-UtJuYS7lzFPXLGoO8VR1DOeCVcSYudsGYF3lbjY4Bb4="; 46 | dartHash = { 47 | x86_64-linux = "sha256-D9/yXmrLo9YJQVWn40FjT43jR36Gwv2krUcjLBrfcE8="; 48 | aarch64-linux = ""; 49 | }; 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /shells/mk-flutter-shell.nix: -------------------------------------------------------------------------------- 1 | # Valid platforms: "linux", "android", 2 | { 3 | lib, 4 | mkShell, 5 | callPackage, 6 | android-sdk-builder, 7 | pubspec-nix, 8 | flutter, 9 | }: { 10 | linux ? {enable = false;}, 11 | elinux ? {enable = false;}, 12 | android ? {enable = false;}, 13 | ... 14 | } @ args: 15 | assert lib.assertMsg (!(elinux.exposeAsFlutter or false && android.enable)) 16 | "elinux.exposeAsFlutter and android.enable can't be on together."; # Both modify what flutter in PATH will be. 17 | let 18 | shellLinux = 19 | if linux.enable 20 | then callPackage ./platforms/linux.nix {} (builtins.removeAttrs linux ["enable"]) 21 | else {}; 22 | shellELinux = 23 | if elinux.enable 24 | then callPackage ./platforms/elinux.nix {} (builtins.removeAttrs elinux ["enable"]) 25 | else {}; 26 | shellAndroid = 27 | if android.enable 28 | then callPackage ./platforms/android.nix {inherit android-sdk-builder;} (builtins.removeAttrs android ["enable"]) 29 | else {}; 30 | 31 | shells = [shellLinux shellELinux shellAndroid args]; 32 | in 33 | mkShell ((builtins.removeAttrs args [ 34 | "android" 35 | "linux" 36 | "elinux" 37 | ]) 38 | // { 39 | shellHook = builtins.concatStringsSep "\n" ((map (shell: shell.shellHook or "") shells) 40 | ++ [ 41 | ]); 42 | 43 | packages = 44 | (lib.lists.flatten (map (shell: shell.packages or []) shells)) 45 | ++ [ 46 | pubspec-nix 47 | ]; 48 | 49 | nativeBuildInputs = 50 | (lib.lists.flatten (map (shell: shell.nativeBuildInputs or []) shells)) 51 | ++ [ 52 | flutter.dart 53 | ]; 54 | 55 | buildInputs = 56 | (lib.lists.flatten (map (shell: shell.buildInputs or []) shells)) 57 | ++ [ 58 | flutter 59 | ]; 60 | }) 61 | -------------------------------------------------------------------------------- /flutter/patches/move-cache.patch: -------------------------------------------------------------------------------- 1 | diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart 2 | index dd80b1e46e..8e54517765 100644 3 | --- a/packages/flutter_tools/lib/src/cache.dart 4 | +++ b/packages/flutter_tools/lib/src/cache.dart 5 | @@ -22,6 +22,7 @@ import 'base/user_messages.dart'; 6 | import 'build_info.dart'; 7 | import 'convert.dart'; 8 | import 'features.dart'; 9 | +import 'globals.dart' as globals; 10 | 11 | const String kFlutterRootEnvironmentVariableName = 'FLUTTER_ROOT'; // should point to //flutter/ (root of flutter/flutter repo) 12 | const String kFlutterEngineEnvironmentVariableName = 'FLUTTER_ENGINE'; // should point to //engine/src/ (root of flutter/engine repo) 13 | @@ -318,8 +319,13 @@ class Cache { 14 | return; 15 | } 16 | assert(_lock == null); 17 | + final Directory dir = _fileSystem.directory(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter')); 18 | + if (!dir.existsSync()) { 19 | + dir.createSync(recursive: true); 20 | + globals.os.chmod(dir, '755'); 21 | + } 22 | final File lockFile = 23 | - _fileSystem.file(_fileSystem.path.join(flutterRoot!, 'bin', 'cache', 'lockfile')); 24 | + _fileSystem.file(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter', 'lockfile')); 25 | try { 26 | _lock = lockFile.openSync(mode: FileMode.write); 27 | } on FileSystemException catch (e) { 28 | @@ -378,8 +384,7 @@ class Cache { 29 | 30 | String get devToolsVersion { 31 | if (_devToolsVersion == null) { 32 | - const String devToolsDirPath = 'dart-sdk/bin/resources/devtools'; 33 | - final Directory devToolsDir = getCacheDir(devToolsDirPath, shouldCreate: false); 34 | + final Directory devToolsDir = _fileSystem.directory(_fileSystem.path.join(flutterRoot!, 'bin/cache/dart-sdk/bin/resources/devtools')); 35 | if (!devToolsDir.existsSync()) { 36 | throw Exception('Could not find directory at ${devToolsDir.path}'); 37 | } 38 | -------------------------------------------------------------------------------- /flutter/patches/disable-auto-update.patch: -------------------------------------------------------------------------------- 1 | diff --git a/bin/internal/shared.sh b/bin/internal/shared.sh 2 | index ab746724e9..1087983c87 100644 3 | --- a/bin/internal/shared.sh 4 | +++ b/bin/internal/shared.sh 5 | @@ -215,8 +215,6 @@ function shared::execute() { 6 | exit 1 7 | fi 8 | 9 | - upgrade_flutter 7< "$PROG_NAME" 10 | - 11 | BIN_NAME="$(basename "$PROG_NAME")" 12 | case "$BIN_NAME" in 13 | flutter*) 14 | diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 15 | index 738fef987d..03a152e64f 100644 16 | --- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 17 | +++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart 18 | @@ -241,7 +241,6 @@ class FlutterCommandRunner extends CommandRunner { 19 | globals.flutterUsage.suppressAnalytics = true; 20 | } 21 | 22 | - globals.flutterVersion.ensureVersionFile(); 23 | final bool machineFlag = topLevelResults['machine'] as bool? ?? false; 24 | final bool ci = await globals.botDetector.isRunningOnBot; 25 | final bool redirectedCompletion = !globals.stdio.hasTerminal && 26 | @@ -250,10 +249,6 @@ class FlutterCommandRunner extends CommandRunner { 27 | final bool versionCheckFlag = topLevelResults['version-check'] as bool? ?? false; 28 | final bool explicitVersionCheckPassed = topLevelResults.wasParsed('version-check') && versionCheckFlag; 29 | 30 | - if (topLevelResults.command?.name != 'upgrade' && 31 | - (explicitVersionCheckPassed || (versionCheckFlag && !isMachine))) { 32 | - await globals.flutterVersion.checkFlutterVersionFreshness(); 33 | - } 34 | 35 | // See if the user specified a specific device. 36 | globals.deviceManager?.specifiedDeviceId = topLevelResults['device-id'] as String?; 37 | 38 | diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart 39 | index dd80b1e46e..8e54517765 100644 40 | --- a/packages/flutter_tools/lib/src/cache.dart 41 | +++ b/packages/flutter_tools/lib/src/cache.dart 42 | @@ -668,6 +668,7 @@ 43 | 44 | /// Update the cache to contain all `requiredArtifacts`. 45 | Future updateAll(Set requiredArtifacts, {bool offline = false}) async { 46 | + return; 47 | if (!_lockEnabled) { 48 | return; 49 | } 50 | -------------------------------------------------------------------------------- /elinux/patches/elinux/create.patch: -------------------------------------------------------------------------------- 1 | diff --git a/lib/commands/create.dart b/lib/commands/create.dart 2 | index 3e538ed..fa6546b 100644 3 | --- a/lib/commands/create.dart 4 | +++ b/lib/commands/create.dart 5 | @@ -167,36 +167,36 @@ class ELinuxCreateCommand extends CreateCommand { 6 | .childDirectory('packages') 7 | .childDirectory('flutter_tools') 8 | .childDirectory('templates'); 9 | - _runGitClean(templates); 10 | + // _runGitClean(templates); 11 | 12 | try { 13 | - for (final Directory projectType 14 | - in eLinuxTemplates.listSync().whereType()) { 15 | - final Directory dest = templates 16 | - .childDirectory(projectType.basename) 17 | - .childDirectory('elinux.tmpl'); 18 | - if (dest.existsSync()) { 19 | - dest.deleteSync(recursive: true); 20 | - } 21 | - 22 | - copyDirectory(projectType, dest); 23 | - if (projectType.basename == 'app') { 24 | - final Directory sourceRunnerCommon = 25 | - projectType.childDirectory('runner'); 26 | - if (!sourceRunnerCommon.existsSync()) { 27 | - continue; 28 | - } 29 | - final Directory sourceFlutter = projectType.childDirectory('flutter'); 30 | - if (!sourceFlutter.existsSync()) { 31 | - continue; 32 | - } 33 | - copyDirectory(sourceFlutter, dest.childDirectory('flutter')); 34 | - copyDirectory(sourceRunnerCommon, dest.childDirectory('runner')); 35 | - } 36 | - } 37 | + // for (final Directory projectType 38 | + // in eLinuxTemplates.listSync().whereType()) { 39 | + // final Directory dest = templates 40 | + // .childDirectory(projectType.basename) 41 | + // .childDirectory('elinux.tmpl'); 42 | + // if (dest.existsSync()) { 43 | + // dest.deleteSync(recursive: true); 44 | + // } 45 | + // 46 | + // copyDirectory(projectType, dest); 47 | + // if (projectType.basename == 'app') { 48 | + // final Directory sourceRunnerCommon = 49 | + // projectType.childDirectory('runner'); 50 | + // if (!sourceRunnerCommon.existsSync()) { 51 | + // continue; 52 | + // } 53 | + // final Directory sourceFlutter = projectType.childDirectory('flutter'); 54 | + // if (!sourceFlutter.existsSync()) { 55 | + // continue; 56 | + // } 57 | + // copyDirectory(sourceFlutter, dest.childDirectory('flutter')); 58 | + // copyDirectory(sourceRunnerCommon, dest.childDirectory('runner')); 59 | + // } 60 | + // } 61 | return await _runCommand(); 62 | } finally { 63 | - _runGitClean(templates); 64 | + // _runGitClean(templates); 65 | } 66 | } 67 | 68 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "android": { 4 | "inputs": { 5 | "devshell": "devshell", 6 | "flake-utils": "flake-utils", 7 | "nixpkgs": [ 8 | "nixpkgs" 9 | ] 10 | }, 11 | "locked": { 12 | "lastModified": 1677270152, 13 | "narHash": "sha256-0gIcordo3u9MbCA7v6jJQaVlYiBaNjIRl9Xos0objEw=", 14 | "owner": "tadfisher", 15 | "repo": "android-nixpkgs", 16 | "rev": "2c0a909bf0fd20b43e36a2fd13496842227d764b", 17 | "type": "github" 18 | }, 19 | "original": { 20 | "owner": "tadfisher", 21 | "repo": "android-nixpkgs", 22 | "type": "github" 23 | } 24 | }, 25 | "devshell": { 26 | "inputs": { 27 | "flake-utils": [ 28 | "android", 29 | "nixpkgs" 30 | ], 31 | "nixpkgs": [ 32 | "android", 33 | "nixpkgs" 34 | ] 35 | }, 36 | "locked": { 37 | "lastModified": 1676293499, 38 | "narHash": "sha256-uIOTlTxvrXxpKeTvwBI1JGDGtCxMXE3BI0LFwoQMhiQ=", 39 | "owner": "numtide", 40 | "repo": "devshell", 41 | "rev": "71e3022e3ab20bbf1342640547ef5bc14fb43bf4", 42 | "type": "github" 43 | }, 44 | "original": { 45 | "owner": "numtide", 46 | "repo": "devshell", 47 | "type": "github" 48 | } 49 | }, 50 | "flake-utils": { 51 | "locked": { 52 | "lastModified": 1676283394, 53 | "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", 54 | "owner": "numtide", 55 | "repo": "flake-utils", 56 | "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", 57 | "type": "github" 58 | }, 59 | "original": { 60 | "owner": "numtide", 61 | "repo": "flake-utils", 62 | "type": "github" 63 | } 64 | }, 65 | "flake-utils_2": { 66 | "locked": { 67 | "lastModified": 1676283394, 68 | "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", 69 | "owner": "numtide", 70 | "repo": "flake-utils", 71 | "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", 72 | "type": "github" 73 | }, 74 | "original": { 75 | "owner": "numtide", 76 | "repo": "flake-utils", 77 | "type": "github" 78 | } 79 | }, 80 | "nixpkgs": { 81 | "locked": { 82 | "lastModified": 1677063315, 83 | "narHash": "sha256-qiB4ajTeAOVnVSAwCNEEkoybrAlA+cpeiBxLobHndE8=", 84 | "path": "/nix/store/369wr4laqdqzh5brq1g7nfc1pbfh23sn-source", 85 | "rev": "988cc958c57ce4350ec248d2d53087777f9e1949", 86 | "type": "path" 87 | }, 88 | "original": { 89 | "id": "nixpkgs", 90 | "type": "indirect" 91 | } 92 | }, 93 | "root": { 94 | "inputs": { 95 | "android": "android", 96 | "flake-utils": "flake-utils_2", 97 | "nixpkgs": "nixpkgs" 98 | } 99 | } 100 | }, 101 | "root": "root", 102 | "version": 7 103 | } 104 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Tools for compiling Flutter and Dart projects"; 3 | 4 | inputs = { 5 | flake-utils.url = "github:numtide/flake-utils"; 6 | android = { 7 | url = "github:tadfisher/android-nixpkgs"; 8 | inputs.nixpkgs.follows = "nixpkgs"; 9 | }; 10 | }; 11 | 12 | outputs = { 13 | self, 14 | flake-utils, 15 | nixpkgs, 16 | android, 17 | }: 18 | flake-utils.lib.eachSystem [ 19 | "x86_64-linux" 20 | ] 21 | (system: let 22 | pkgs = import nixpkgs { 23 | inherit system; 24 | overlays = [self.overlays.default]; 25 | }; 26 | in { 27 | packages = { 28 | inherit (pkgs) pubspec-nix flutter-elinux flutter; 29 | }; 30 | checks = { 31 | inherit (pkgs) pubspec-nix flutter-elinux flutter; 32 | build-dart-script = pkgs.callPackage ./checks/check-build-dart-script.nix {}; 33 | default-flutter-build = pkgs.callPackage ./checks/default-flutter-build {}; 34 | }; 35 | devShells = rec { 36 | default = linux-shell; 37 | linux-shell = pkgs.mkFlutterShell { 38 | linux.enable = true; 39 | }; 40 | elinux-shell = pkgs.mkFlutterShell { 41 | linux.enable = true; 42 | elinux.enable = true; 43 | }; 44 | android-shell = pkgs.mkFlutterShell { 45 | linux.enable = true; 46 | android = { 47 | enable = true; 48 | sdkPackages = sdkPkgs: 49 | with sdkPkgs; [ 50 | build-tools-30-0-3 51 | platforms-android-31 52 | ]; 53 | }; 54 | }; 55 | }; 56 | }) 57 | // { 58 | overlays = { 59 | dev = _final: prev: let 60 | shared = prev.callPackage ./builders/shared {}; 61 | in { 62 | inherit (shared) generatePubCache; 63 | }; 64 | default = final: prev: let 65 | shared = prev.callPackage ./builders/shared {}; 66 | mkPyScript = prev.callPackage ./utils/mk-py-script.nix { 67 | python = prev.python310; 68 | }; 69 | unpackTarball = prev.callPackage ./utils/unpack-tarball.nix {}; 70 | in rec { 71 | flutter = (prev.callPackage ./flutter {inherit (prev) dart;}).stable; 72 | inherit (flutter) dart; 73 | flutter-elinux = prev.callPackage ./elinux/package.nix { 74 | inherit unpackTarball; 75 | }; 76 | pubspec-nix = prev.callPackage ./pubspec-nix { 77 | inherit mkPyScript; 78 | }; 79 | buildFlutterApp = prev.callPackage ./builders/build-flutter-app.nix { 80 | inherit (shared) generatePubCache; 81 | }; 82 | buildDartApp = prev.callPackage ./builders/build-dart-app.nix { 83 | inherit (shared) generatePubCache; 84 | }; 85 | buildDartScript = prev.callPackage ./utils/build-dart-script.nix {}; 86 | mkFlutterShell = prev.callPackage ./shells/mk-flutter-shell.nix { 87 | android-sdk-builder = android.sdk.${final.system}; 88 | }; 89 | }; 90 | }; 91 | }; 92 | } 93 | -------------------------------------------------------------------------------- /utils/build-dart-script.nix: -------------------------------------------------------------------------------- 1 | # Usage: 2 | # ```nix 3 | # pkgs.buildDartScript "my-script-1" {} '' 4 | # void main() { 5 | # print('Hello, World!'); 6 | # } 7 | # '' 8 | # ``` 9 | # 10 | # ```nix 11 | # pkgs.buildDartScript "my-script-2" { 12 | # isolated = true; 13 | # dependencies = [ pkgs.pandoc ]; 14 | # 15 | # } '' 16 | # void main() { 17 | # print('Hello, World!'); 18 | # } 19 | # '' 20 | # ``` 21 | # 22 | # ```nix 23 | # pkgs.buildDartScript "my-script-3" {} ./main.dart 24 | # ``` 25 | # 26 | # ```nix 27 | # pkgs.buildDartScript "my-script-4" {} ./src # Contains main.dart 28 | # ``` 29 | 30 | { 31 | buildDartApp, 32 | dart, 33 | writeText, 34 | writeTextDir, 35 | runCommand, 36 | makeWrapper, 37 | lib, 38 | }: 39 | name: 40 | { 41 | dependencies ? [], 42 | isolated ? true, 43 | dartVersion ? dart.version, 44 | ... 45 | }@args: content: let 46 | inherit (builtins) removeAttrs; 47 | inherit (lib) makeBinPath; 48 | inherit (lib.strings) stringAsChars; 49 | 50 | dartName = stringAsChars (x: if x == "-" then "_" else x) name; 51 | 52 | # Generate a pubspec.yaml file 53 | pubspec = writeText "pubspec.yaml" '' 54 | name: ${dartName} 55 | environment: 56 | sdk: '>=${dartVersion} <3.0.0' 57 | executable: 58 | executable: main 59 | ''; 60 | 61 | pubspecLock = writeText "pubspec.lock" '' 62 | packages: {} 63 | sdks: 64 | dart: ">=${dartVersion} <3.0.0" 65 | ''; 66 | 67 | pubspecNixLockFile = writeText "pubspec-nix.lock" (builtins.toJSON { 68 | dart = { 69 | executables = { 70 | executable = "main"; 71 | }; 72 | }; 73 | pub = {}; 74 | }); 75 | 76 | # Content could be either a string, path to a file or a path to a directory. 77 | # `binDir` is a varialbe that will always be a path to a directory with a main.dart file. 78 | binDir = if builtins.isString content then 79 | writeTextDir "main.dart" content 80 | else if builtins.isPath content then 81 | if builtins.pathExists (content + "/main.dart") then 82 | content 83 | else 84 | runCommand "main.dart" { } '' 85 | mkdir -p $out 86 | cp ${content} $out/main.dart 87 | '' 88 | else 89 | throw "Invalid content type: ${builtins.typeOf content}"; 90 | 91 | src = runCommand "${name}-src" { } '' 92 | mkdir -p $out 93 | cp -r ${binDir} $out/bin 94 | cp ${pubspec} $out/pubspec.yaml 95 | cp ${pubspecLock} $out/pubspec.lock 96 | cp ${pubspecNixLockFile} $out/pubspec-nix.lock 97 | ''; 98 | in 99 | buildDartApp ((removeAttrs args [ 100 | "dependencies" "isolated" 101 | "pname" "version" 102 | ]) // { 103 | inherit name src; 104 | 105 | buildInputs = [ 106 | makeWrapper 107 | ] ++ (args.buildInputs or []); 108 | 109 | fixupPhase = let 110 | wrapCmd = "wrapProgram $out/bin/${dartName} --${if isolated then "set" else "suffix"} PATH ${makeBinPath dependencies}"; 111 | in '' 112 | mv $out/bin/executable $out/bin/${dartName} 113 | ${wrapCmd} 114 | ${args.fixupPhase or ""} 115 | ''; 116 | }) 117 | -------------------------------------------------------------------------------- /pubspec-nix/pubspec-nix.py: -------------------------------------------------------------------------------- 1 | from os.path import join 2 | from posixpath import join as urljoin 3 | import subprocess 4 | import json 5 | import yaml 6 | from tqdm import tqdm 7 | import logging 8 | import argparse 9 | 10 | pbar: tqdm 11 | log = logging.getLogger(__name__) 12 | 13 | parser = argparse.ArgumentParser( 14 | prog = 'pubspec-nix', 15 | description = 'Generate pubspec-nix.lock from pubspec.yaml') 16 | 17 | parser.add_argument('--hash', default=True, action=argparse.BooleanOptionalAction) 18 | args = parser.parse_args(); 19 | 20 | def _prefetch_hosted_package(name, package) -> tuple[str, dict]: 21 | version = package['version'] 22 | base_url = package['description']['url'] 23 | url = urljoin( 24 | base_url, 25 | "packages", 26 | name, 27 | "versions", 28 | f"{version}.tar.gz", 29 | ) 30 | 31 | nixArgs = { 32 | "name": f"pub-{name}-{version}", 33 | "url": url, 34 | "stripRoot": False, 35 | } 36 | 37 | if args.hash: 38 | nixArgs["sha256"] = _prefetch_package_url( 39 | name, 40 | url, 41 | ) 42 | 43 | path = join( 44 | package['source'], 45 | package['description']['url'].removeprefix("https://").replace("/", "%47"), 46 | f"{name}-{package['version']}" 47 | ) 48 | return path, { "fetcher": "fetchzip", "args": nixArgs } 49 | 50 | def _prefetch_package_url(name, url) -> str: 51 | return subprocess.check_output([ 52 | "nix-prefetch-url", 53 | url, 54 | "--unpack", 55 | "--type", 56 | "sha256", 57 | "--name", 58 | name.replace("/", "-"), 59 | ], 60 | encoding="utf-8", stderr=subprocess.DEVNULL).strip() 61 | 62 | def _prefetch_git_package(name, package) -> tuple[str, dict]: 63 | desc = package['description'] 64 | out = subprocess.check_output([ 65 | "nix-prefetch-git", 66 | "--url", 67 | desc['url'], 68 | "--rev", 69 | desc['resolved-ref'] or desc['ref'], 70 | "--out", 71 | name.replace("/", "-"), 72 | "--leave-dotGit" 73 | ], 74 | encoding="utf-8", stderr=subprocess.DEVNULL).strip() 75 | nixArgs = json.loads(out) 76 | del nixArgs['date'] # reproducibility 77 | del nixArgs['path'] # alternate store path(?) 78 | repo_name = desc['url'].split("/")[-1] 79 | if (repo_name.endswith(".git")): 80 | repo_name = repo_name.removesuffix(".git") 81 | path = join( 82 | package['source'], 83 | f"{repo_name}-{nixArgs['rev']}", 84 | ) 85 | return path, { "fetcher": "fetchgit", "args": nixArgs, "repo_name": repo_name } 86 | 87 | def _prefetch_package(name, package, pub) -> None: 88 | res = { 89 | "hosted": lambda: _prefetch_hosted_package(name, package), 90 | "git": lambda: _prefetch_git_package(name, package) 91 | }.get(package["source"]) 92 | 93 | if res: 94 | path, value = res() 95 | pub[path] = value 96 | 97 | 98 | def _get_pub(packages): 99 | global pbar 100 | 101 | pub = {} 102 | 103 | for (name, package) in packages.items(): 104 | pbar.write(f"Processing package {name}") 105 | 106 | _prefetch_package(name, package, pub) 107 | 108 | pbar.update() 109 | 110 | return pub 111 | 112 | 113 | def main(): 114 | global pbar 115 | deps = {} 116 | 117 | pubspec_lock = yaml.safe_load(open("pubspec.lock", "r")) 118 | packages = pubspec_lock["packages"] 119 | 120 | pbar = tqdm(total=len(packages)) 121 | 122 | is_flutter = "flutter" in packages and packages["flutter"]["source"] == "sdk" 123 | if is_flutter: 124 | pbar.write("Flutter project detected.") 125 | else: 126 | pbar.write("Dart project detected.") 127 | 128 | pubspec_yaml = yaml.safe_load(open("pubspec.yaml", "r")) 129 | 130 | deps["dart"] = { 131 | "executables": pubspec_yaml.get("executables", {}) 132 | } 133 | 134 | deps["pub"] = _get_pub(packages) 135 | 136 | open("pubspec-nix.lock", "w").write(json.dumps( 137 | deps, 138 | indent=2, 139 | separators=(',', ': ') 140 | )) 141 | 142 | 143 | if __name__ == "__main__": 144 | main() 145 | -------------------------------------------------------------------------------- /flutter/patches/git-dir.patch: -------------------------------------------------------------------------------- 1 | diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart 2 | index 8e4cb81340..2c20940423 100644 3 | --- a/dev/bots/prepare_package.dart 4 | +++ b/dev/bots/prepare_package.dart 5 | @@ -526,7 +526,7 @@ class ArchiveCreator { 6 | 7 | Future _runGit(List args, {Directory? workingDirectory}) { 8 | return _processRunner.runProcess( 9 | - ['git', ...args], 10 | + ['git', '--git-dir', '.git', ...args], 11 | workingDirectory: workingDirectory ?? flutterRoot, 12 | ); 13 | } 14 | diff --git a/packages/flutter_tools/lib/src/commands/downgrade.dart b/packages/flutter_tools/lib/src/commands/downgrade.dart 15 | index 666c190067..b6c3761f6f 100644 16 | --- a/packages/flutter_tools/lib/src/commands/downgrade.dart 17 | +++ b/packages/flutter_tools/lib/src/commands/downgrade.dart 18 | @@ -118,7 +118,7 @@ class DowngradeCommand extends FlutterCommand { 19 | // Detect unknown versions. 20 | final ProcessUtils processUtils = _processUtils!; 21 | final RunResult parseResult = await processUtils.run([ 22 | - 'git', 'describe', '--tags', lastFlutterVersion, 23 | + 'git', '--git-dir', '.git', 'describe', '--tags', lastFlutterVersion, 24 | ], workingDirectory: workingDirectory); 25 | if (parseResult.exitCode != 0) { 26 | throwToolExit('Failed to parse version for downgrade:\n${parseResult.stderr}'); 27 | @@ -191,7 +191,7 @@ class DowngradeCommand extends FlutterCommand { 28 | continue; 29 | } 30 | final RunResult parseResult = await _processUtils!.run([ 31 | - 'git', 'describe', '--tags', sha, 32 | + 'git', '--git-dir', '.git', 'describe', '--tags', sha, 33 | ], workingDirectory: workingDirectory); 34 | if (parseResult.exitCode == 0) { 35 | buffer.writeln('Channel "${getNameForChannel(channel)}" was previously on: ${parseResult.stdout}.'); 36 | diff --git a/packages/flutter_tools/lib/src/version.dart b/packages/flutter_tools/lib/src/version.dart 37 | index dc47f17057..8068e2d1f5 100644 38 | --- a/packages/flutter_tools/lib/src/version.dart 39 | +++ b/packages/flutter_tools/lib/src/version.dart 40 | @@ -111,7 +111,7 @@ class FlutterVersion { 41 | String? channel = _channel; 42 | if (channel == null) { 43 | final String gitChannel = _runGit( 44 | - 'git rev-parse --abbrev-ref --symbolic $kGitTrackingUpstream', 45 | + 'git --git-dir .git rev-parse --abbrev-ref --symbolic $kGitTrackingUpstream', 46 | globals.processUtils, 47 | _workingDirectory, 48 | ); 49 | @@ -119,7 +119,7 @@ class FlutterVersion { 50 | if (slash != -1) { 51 | final String remote = gitChannel.substring(0, slash); 52 | _repositoryUrl = _runGit( 53 | - 'git ls-remote --get-url $remote', 54 | + 'git --git-dir .git ls-remote --get-url $remote', 55 | globals.processUtils, 56 | _workingDirectory, 57 | ); 58 | @@ -298,7 +298,7 @@ class FlutterVersion { 59 | /// the branch name will be returned as `'[user-branch]'`. 60 | String getBranchName({ bool redactUnknownBranches = false }) { 61 | _branch ??= () { 62 | - final String branch = _runGit('git rev-parse --abbrev-ref HEAD', globals.processUtils); 63 | + final String branch = _runGit('git --git-dir .git rev-parse --abbrev-ref HEAD', globals.processUtils); 64 | return branch == 'HEAD' ? channel : branch; 65 | }(); 66 | if (redactUnknownBranches || _branch!.isEmpty) { 67 | @@ -331,7 +331,7 @@ class FlutterVersion { 68 | /// wrapper that does that. 69 | @visibleForTesting 70 | static List gitLog(List args) { 71 | - return ['git', '-c', 'log.showSignature=false', 'log'] + args; 72 | + return ['git', '-c', 'log.showSignature=false', '--git-dir', '.git', 'log'] + args; 73 | } 74 | 75 | /// Gets the release date of the latest available Flutter version. 76 | @@ -708,7 +708,7 @@ class GitTagVersion { 77 | String gitRef = 'HEAD' 78 | }) { 79 | if (fetchTags) { 80 | - final String channel = _runGit('git rev-parse --abbrev-ref HEAD', processUtils, workingDirectory); 81 | + final String channel = _runGit('git --git-dir .git rev-parse --abbrev-ref HEAD', processUtils, workingDirectory); 82 | if (channel == 'dev' || channel == 'beta' || channel == 'stable') { 83 | globals.printTrace('Skipping request to fetchTags - on well known channel $channel.'); 84 | } else { 85 | @@ -718,7 +718,7 @@ class GitTagVersion { 86 | } 87 | // find all tags attached to the given [gitRef] 88 | final List tags = _runGit( 89 | - 'git tag --points-at $gitRef', processUtils, workingDirectory).trim().split('\n'); 90 | + 'git --git-dir .git tag --points-at $gitRef', processUtils, workingDirectory).trim().split('\n'); 91 | 92 | // Check first for a stable tag 93 | final RegExp stableTagPattern = RegExp(r'^\d+\.\d+\.\d+$'); 94 | @@ -739,7 +739,7 @@ class GitTagVersion { 95 | // recent tag and number of commits past. 96 | return parse( 97 | _runGit( 98 | - 'git describe --match *.*.* --long --tags $gitRef', 99 | + 'git --git-dir .git describe --match *.*.* --long --tags $gitRef', 100 | processUtils, 101 | workingDirectory, 102 | ) 103 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dart-flutter-nix 2 | 3 | ## Archived. Please use Flutter/Dart from Nixpkgs. 4 | 5 | 6 | Tools for compiling Flutter, Dart, and [Flutter eLinux](https://github.com/sony/flutter-embedded-linux) projects with Nix 7 | 8 | ## Examples 9 | [github:FlafyDev/guifetch](https://github.com/FlafyDev/guifetch) - Flutter project 10 | [github:FlafyDev/listen_blue](https://github.com/FlafyDev/listen_blue) - Flutter project 11 | 12 | ## Packaging a Flutter project 13 | ###### Tested versions: Flutter v3.0.4, v3.3.3, v3.3.8 14 | ### 1. run `pubspec-nix` 15 | ```nix 16 | system: let 17 | pkgs = import nixpkgs { 18 | inherit system; 19 | overlays = [ dart-flutter.overlays.default ]; 20 | }; 21 | in { 22 | devShell = pkgs.mkShell { 23 | packages = [ 24 | pkgs.pubspec-nix 25 | ]; 26 | }; 27 | } 28 | ``` 29 | 30 | Once you have `pubspec-nix`, run it at the root of your Flutter project and wait for it to download everything. 31 | 32 | After `pubspec-nix` is done, a file named `pubspec-nix.lock` will be created at the root of your Flutter project. 33 | This file will be used to generate Pub's cache directory inside the Nix derivation. 34 | 35 | ### 2. Making a derivation with `buildFlutterApp` 36 | Now that you have the `pubspec-nix.lock`. All that's left is to make a package with `buildFlutterApp`: 37 | ```nix 38 | { buildFlutterApp }: 39 | 40 | buildFlutterApp { 41 | pname = "pname"; 42 | version = "version"; 43 | 44 | # Optional: 45 | # pubspecNixLockFile = (default = src/pubspec-nix.lock) 46 | 47 | src = ./.; 48 | } 49 | ``` 50 | `pubspecNixLockFile` can be set to override the default location of `pubspec-nix.lock`. 51 | Setting `configurePhase`, `buildPhase`, or `installPhase` will do nothing. Consider using `pre` and `post` instead. 52 | 53 | ##### To explicitly state which Flutter to use. 54 | ```nix 55 | pkgs.callPackage ./package.nix { 56 | buildFlutterApp = pkgs.buildFlutterApp.override { 57 | flutter = pkgs.flutter2; 58 | }; 59 | } 60 | ``` 61 | 62 | 63 | ## Packaging a Dart project 64 | The process is similar to packaging a Flutter project. 65 | ```nix 66 | { buildDartApp }: 67 | 68 | buildDartApp { 69 | pname = "pname"; 70 | version = "version"; 71 | 72 | # Optional: 73 | # pubspecNixLockFile = (default = src/pubspec-nix.lock) 74 | # dartRuntimeFlags = (default = []) 75 | # jit = (default = false) 76 | 77 | src = ./.; 78 | } 79 | ``` 80 | 81 | ## DevShells for Flutter projects 82 | You can create a devShell for Flutter projects with `mkFlutterShell` similar to how you would with `mkShell`. 83 | You can get `mkFlutterShell` through the default overlay (`overlays.default`). 84 | 85 | ```nix 86 | let 87 | pkgs = import nixpkgs { 88 | inherit system; 89 | overlays = [ dart-flutter.overlays.default ]; 90 | }; 91 | in 92 | { 93 | devShell = pkgs.mkFlutterShell { 94 | # Enable if you want to build you app for Android. 95 | android = { 96 | enable = true; # Default: false 97 | sdkPackages = sdkPkgs: 98 | with sdkPkgs; [ 99 | build-tools-29-0-2 100 | platforms-android-32 101 | ]; 102 | androidStudio = false; # Default: false 103 | emulator = false; # Default: false 104 | }; 105 | 106 | # Enable if you want to build your app for the Linux desktop. 107 | linux = { 108 | enable = true; # Default: false 109 | }; 110 | 111 | # Enable if you want to build your app with Flutter eLinux. 112 | elinux = { 113 | enable = true; 114 | exposeAsFlutter = true; # Default: false - Changes the executable's name from "flutter-elinux" to "flutter" 115 | }; 116 | 117 | # This function also acts like `mkShell`, so you can still do: 118 | buildInputs = with pkgs; [ 119 | gst_all_1.gstreamer 120 | gst_all_1.gst-libav 121 | gst_all_1.gst-plugins-base 122 | gst_all_1.gst-plugins-good 123 | libunwind 124 | elfutils 125 | zstd 126 | orc 127 | ]; 128 | }; 129 | } 130 | ``` 131 | 132 | ## Writing and packaging Dart scripts with Nix 133 | ###### ! Still a very new feature, expect bugs ! 134 | 135 | Similar to how you can easily code and package [Python](https://github.com/FlafyDev/dart-flutter-nix/blob/main/pubspec-nix/default.nix) and Shell with Nix, 136 | you can now do the same with Dart using [buildDartScript](https://github.com/FlafyDev/dart-flutter-nix/blob/main/utils/build-dart-script.nix) (Can be found in the default overlay of this flake.) 137 | 138 | ```nix 139 | {buildDartScript, hello}: 140 | 141 | # 1st example 142 | buildDartScript "my-script-1" {} '' 143 | void main() { 144 | print('Hello, World!'); 145 | } 146 | '' 147 | 148 | # 2nd example 149 | buildDartScript "my-script-2" { 150 | isolated = true; # Clears PATH at runtime. 151 | dependencies = [ hello ]; # Adds dependencies to PATH at runtime. 152 | # Accepts any argument that buildDartApp accepts. 153 | } '' 154 | import 'dart:io'; 155 | 156 | void main() async { 157 | final output = await Process.run("hello", []); 158 | print("Output: " + output.stdout); // Prints "Output: Hello, world!" 159 | } 160 | '' 161 | 162 | # 3rd example 163 | buildDartScript "my-script-3" {} ./main.dart 164 | 165 | # 4th example 166 | buildDartScript "my-script-4" {} ./src # Must contains main.dart 167 | ``` 168 | 169 | #### Dart dependencies 170 | Adding Dart dependencies with Pub is still not possible. Different ways of implementing this are still being considered, but it is planned. 171 | 172 | Rewriting `pubspec-nix` from Python to Dart is also planned, but blocked on this feature. 173 | 174 | 175 | ## Running checks 176 | ```console 177 | nix flake check -L 178 | ``` 179 | 180 | - `-L` Logging 181 | 182 | ## Sources 183 | These sources helped me understand how Flutter downloads stuff. 184 | - https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/flutter/default.nix 185 | - https://github.com/ilkecan/flutter-nix 186 | - https://github.com/tadfisher/nix-dart 187 | -------------------------------------------------------------------------------- /checks/default-flutter-build/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "2.10.0" 12 | boolean_selector: 13 | dependency: transitive 14 | description: 15 | name: boolean_selector 16 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.1.1" 20 | characters: 21 | dependency: transitive 22 | description: 23 | name: characters 24 | sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "1.2.1" 28 | clock: 29 | dependency: transitive 30 | description: 31 | name: clock 32 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "1.1.1" 36 | collection: 37 | dependency: transitive 38 | description: 39 | name: collection 40 | sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.17.0" 44 | cupertino_icons: 45 | dependency: "direct main" 46 | description: 47 | name: cupertino_icons 48 | sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.0.5" 52 | fake_async: 53 | dependency: transitive 54 | description: 55 | name: fake_async 56 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.3.1" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_lints: 66 | dependency: "direct dev" 67 | description: 68 | name: flutter_lints 69 | sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c 70 | url: "https://pub.dev" 71 | source: hosted 72 | version: "2.0.1" 73 | flutter_test: 74 | dependency: "direct dev" 75 | description: flutter 76 | source: sdk 77 | version: "0.0.0" 78 | js: 79 | dependency: transitive 80 | description: 81 | name: js 82 | sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" 83 | url: "https://pub.dev" 84 | source: hosted 85 | version: "0.6.5" 86 | lints: 87 | dependency: transitive 88 | description: 89 | name: lints 90 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 91 | url: "https://pub.dev" 92 | source: hosted 93 | version: "2.0.1" 94 | matcher: 95 | dependency: transitive 96 | description: 97 | name: matcher 98 | sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" 99 | url: "https://pub.dev" 100 | source: hosted 101 | version: "0.12.13" 102 | material_color_utilities: 103 | dependency: transitive 104 | description: 105 | name: material_color_utilities 106 | sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 107 | url: "https://pub.dev" 108 | source: hosted 109 | version: "0.2.0" 110 | meta: 111 | dependency: transitive 112 | description: 113 | name: meta 114 | sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" 115 | url: "https://pub.dev" 116 | source: hosted 117 | version: "1.8.0" 118 | path: 119 | dependency: transitive 120 | description: 121 | name: path 122 | sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b 123 | url: "https://pub.dev" 124 | source: hosted 125 | version: "1.8.2" 126 | sky_engine: 127 | dependency: transitive 128 | description: flutter 129 | source: sdk 130 | version: "0.0.99" 131 | source_span: 132 | dependency: transitive 133 | description: 134 | name: source_span 135 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 136 | url: "https://pub.dev" 137 | source: hosted 138 | version: "1.9.1" 139 | stack_trace: 140 | dependency: transitive 141 | description: 142 | name: stack_trace 143 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 144 | url: "https://pub.dev" 145 | source: hosted 146 | version: "1.11.0" 147 | stream_channel: 148 | dependency: transitive 149 | description: 150 | name: stream_channel 151 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 152 | url: "https://pub.dev" 153 | source: hosted 154 | version: "2.1.1" 155 | string_scanner: 156 | dependency: transitive 157 | description: 158 | name: string_scanner 159 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 160 | url: "https://pub.dev" 161 | source: hosted 162 | version: "1.2.0" 163 | term_glyph: 164 | dependency: transitive 165 | description: 166 | name: term_glyph 167 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 168 | url: "https://pub.dev" 169 | source: hosted 170 | version: "1.2.1" 171 | test_api: 172 | dependency: transitive 173 | description: 174 | name: test_api 175 | sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 176 | url: "https://pub.dev" 177 | source: hosted 178 | version: "0.4.16" 179 | vector_math: 180 | dependency: transitive 181 | description: 182 | name: vector_math 183 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 184 | url: "https://pub.dev" 185 | source: hosted 186 | version: "2.1.4" 187 | sdks: 188 | dart: ">=2.19.4 <3.0.0" 189 | -------------------------------------------------------------------------------- /flutter/package.nix: -------------------------------------------------------------------------------- 1 | { 2 | pname, 3 | version, 4 | dart, 5 | src, 6 | }: { 7 | bash, 8 | buildFHSUserEnv, 9 | cacert, 10 | git, 11 | curl, 12 | unzip, 13 | xz, 14 | runCommand, 15 | stdenv, 16 | lib, 17 | alsa-lib, 18 | dbus, 19 | expat, 20 | libpulseaudio, 21 | libuuid, 22 | libX11, 23 | libxcb, 24 | libXcomposite, 25 | libXcursor, 26 | libXdamage, 27 | libXfixes, 28 | libXrender, 29 | libXtst, 30 | libXi, 31 | libXext, 32 | libGL, 33 | nspr, 34 | nss, 35 | systemd, 36 | which, 37 | symlinkCache ? [], # Useful for experimenting with cache files without rebuilding the package. 38 | autoPatchelfHook, 39 | gtk3, 40 | atk, 41 | glib, 42 | libepoxy, 43 | }: let 44 | name = "${pname}-${version}"; 45 | flutter = stdenv.mkDerivation { 46 | pname = "${pname}"; 47 | inherit src version; 48 | 49 | passthru = { 50 | inherit dart cert makeFhsWrapper; 51 | fhsWrap = makeFhsWrapper {}; 52 | }; 53 | 54 | patches = [ 55 | ./patches/disable-auto-update.patch 56 | ./patches/git-dir.patch 57 | ./patches/move-cache.patch 58 | ./patches/copy-without-perms.patch 59 | ]; 60 | 61 | postPatch = '' 62 | patchShebangs --build ./bin/ 63 | ''; 64 | 65 | nativeBuildInputs = [ 66 | autoPatchelfHook 67 | ]; 68 | 69 | buildInputs = [ 70 | dart 71 | gtk3 72 | atk 73 | glib 74 | libepoxy 75 | ]; 76 | 77 | buildPhase = 78 | '' 79 | export FLUTTER_ROOT="$(pwd)" 80 | export FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools" 81 | export SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart" 82 | 83 | export SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot" 84 | export STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp" 85 | 86 | export DART_SDK_PATH="$(which dart)" 87 | 88 | HOME=$out 89 | dart pub cache preload ./.pub-preload-cache/* 90 | 91 | pushd "$FLUTTER_TOOLS_DIR" 92 | rm -rf test 93 | dart pub get --offline 94 | popd 95 | 96 | local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)" 97 | dart --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" "$SCRIPT_PATH" 98 | echo "$revision" > "$STAMP_PATH" 99 | echo -n "${version}" > version 100 | 101 | rm -r bin/cache/dart-sdk 102 | 103 | # rm -r bin/cache/{artifacts,dart-sdk,downloads} 104 | # rm bin/cache/*.stamp 105 | '' 106 | + lib.concatStringsSep "\n" (map (cache: '' 107 | rm -r "bin/cache/${cache}" 108 | ln -s "/tmp/flutter-cache/${cache}" "bin/cache/${cache}" 109 | '') 110 | symlinkCache); 111 | 112 | installPhase = '' 113 | runHook preInstall 114 | 115 | mkdir -p $out 116 | cp -r . $out 117 | mkdir -p $out/bin/cache/ 118 | ln -sf ${dart} $out/bin/cache/dart-sdk 119 | 120 | runHook postInstall 121 | ''; 122 | 123 | postFixup = '' 124 | sed -i '2i\ 125 | export PUB_CACHE=\''${PUB_CACHE:-"\$HOME/.pub-cache"}\ 126 | export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1\ 127 | export PATH=$PATH:${lib.makeBinPath [ 128 | bash 129 | curl 130 | dart 131 | git 132 | unzip 133 | which 134 | xz 135 | ]} 136 | ' $out/bin/flutter 137 | ''; 138 | 139 | doInstallCheck = true; 140 | installCheckInputs = [which git]; 141 | installCheckPhase = '' 142 | runHook preInstallCheck 143 | 144 | export HOME="$(mktemp -d)" 145 | $out/bin/flutter config --android-studio-dir $HOME 146 | $out/bin/flutter config --android-sdk $HOME 147 | $out/bin/flutter --version | fgrep -q '${version}' 148 | 149 | runHook postInstallCheck 150 | ''; 151 | 152 | meta = with lib; { 153 | description = "Flutter is Google's SDK for building mobile, web and desktop with Dart"; 154 | longDescription = '' 155 | Flutter is Google’s UI toolkit for building beautiful, 156 | natively compiled applications for mobile, web, and desktop from a single codebase. 157 | ''; 158 | homepage = "https://flutter.dev"; 159 | license = licenses.bsd3; 160 | platforms = ["x86_64-linux" "aarch64-linux"]; 161 | maintainers = []; 162 | }; 163 | }; 164 | 165 | # Flutter only use these certificates 166 | cert = runCommand "fedoracert" {} '' 167 | mkdir -p $out/etc/pki/tls/ 168 | ln -s ${cacert}/etc/ssl/certs $out/etc/pki/tls/certs 169 | ''; 170 | 171 | # Wrap flutter inside an fhs user env to allow execution of binary, 172 | # like adb from $ANDROID_HOME or java from android-studio. 173 | fhsEnv = buildFHSUserEnv { 174 | name = "flutter-fhs-env"; 175 | multiPkgs = pkgs: [ 176 | cert 177 | pkgs.zlib 178 | ]; 179 | targetPkgs = pkgs: 180 | with pkgs; [ 181 | bash 182 | curl 183 | dart 184 | git 185 | unzip 186 | which 187 | xz 188 | 189 | # flutter test requires this lib 190 | libGLU 191 | 192 | # for android emulator 193 | alsa-lib 194 | dbus 195 | expat 196 | libpulseaudio 197 | libuuid 198 | libX11 199 | libxcb 200 | libXcomposite 201 | libXcursor 202 | libXdamage 203 | libXext 204 | libXfixes 205 | libXi 206 | libXrender 207 | libXtst 208 | libGL 209 | nspr 210 | nss 211 | systemd 212 | ]; 213 | }; 214 | 215 | makeFhsWrapper = { 216 | executable ? "flutter", 217 | newExecutableName ? executable, 218 | derv ? flutter, 219 | }: 220 | runCommand "${name}-fhs" 221 | { 222 | startScript = '' 223 | #!${bash}/bin/bash 224 | ${fhsEnv}/bin/flutter-fhs-env ${derv}/bin/${executable} --no-version-check "$@" 225 | ''; 226 | preferLocalBuild = true; 227 | allowSubstitutes = false; 228 | } '' 229 | mkdir -p $out/bin/cache/ 230 | ln -sf ${dart} $out/bin/cache/dart-sdk 231 | ln -sf ${dart}/bin/dart $out/bin 232 | echo -n "$startScript" > $out/bin/${newExecutableName} 233 | chmod +x $out/bin/${newExecutableName} 234 | ''; 235 | in 236 | flutter 237 | -------------------------------------------------------------------------------- /elinux/package.nix: -------------------------------------------------------------------------------- 1 | { 2 | buildDartApp, 3 | git, 4 | which, 5 | unzip, 6 | lib, 7 | flutter, 8 | autoPatchelfHook, 9 | unpackTarball, 10 | stdenvNoCC, 11 | wget, 12 | symlinkCache ? [], # Useful for experimenting with cache files without rebuilding the package. 13 | gtk3, 14 | libepoxy, 15 | libglvnd, 16 | libxkbcommon, 17 | libdrm, 18 | libinput, 19 | systemd, 20 | eudev, 21 | libgccjit, # libstdc++.so.6 22 | mesa, 23 | wayland, 24 | xorg, 25 | }: let 26 | pname = "flutter-elinux"; 27 | 28 | inherit (flutter) dart; 29 | inherit (flutter) version; 30 | 31 | flutterSrc = unpackTarball flutter; 32 | 33 | # Download all the artifacts for elinux engine. 34 | # This is all in a single derivation because there are a lot of artifacts to get hashes for. 35 | elinuxVendor = stdenvNoCC.mkDerivation { 36 | pname = "${pname}-vendor"; 37 | inherit version; 38 | phases = ["installPhase"]; 39 | nativeBuildInputs = [wget unzip]; 40 | installPhase = 41 | '' 42 | mkdir -p "$out" 43 | mkdir -p "$out/artifacts/engine" 44 | export ENGINE_SHORT_REVISION=$(head -c 10 ${flutter}/bin/internal/engine.version) 45 | '' 46 | + (lib.concatStringsSep "\n" (map (artifact: '' 47 | wget https://github.com/sony/flutter-embedded-linux/releases/download/$ENGINE_SHORT_REVISION/${artifact}.zip --no-check-certificate 48 | unzip ./${artifact}.zip -d "$out/artifacts/engine/${artifact}" 49 | '') [ 50 | "elinux-arm64-debug" 51 | "elinux-arm64-profile" 52 | "elinux-arm64-release" 53 | "elinux-common" 54 | "elinux-x64-debug" 55 | "elinux-x64-profile" 56 | "elinux-x64-release" 57 | ])) 58 | + '' 59 | wget "https://github.com/sony/flutter-elinux/archive/refs/tags/${version}.tar.gz" -O "$out/elinux-src.tar.gz" --no-check-certificate 60 | ''; 61 | 62 | # outputHash = lib.fakeSha256; 63 | outputHash = "sha256-qg0oUGnYcOJrxpYS+QB6lnFb/09OYpmgmfiIf1tVzrI="; 64 | outputHashAlgo = "sha256"; 65 | outputHashMode = "recursive"; 66 | }; 67 | 68 | elinux = 69 | buildDartApp.override { 70 | inherit dart; 71 | } { 72 | pname = "${pname}"; 73 | inherit version; 74 | 75 | passthru = { 76 | inherit dart; 77 | fhsWrap = flutter.makeFhsWrapper { 78 | derv = elinux; 79 | executableName = "flutter-elinux"; 80 | }; 81 | }; 82 | 83 | pubspecNixLock = 84 | (builtins.fromJSON (builtins.readFile ./pubspec-nix.lock)) 85 | // { 86 | dart = { 87 | executables = { 88 | flutter-elinux = "flutter_elinux"; 89 | }; 90 | }; 91 | }; 92 | 93 | jit = true; 94 | 95 | patches = [ 96 | ./patches/elinux/pubspec.patch 97 | ./patches/elinux/create.patch 98 | ]; 99 | 100 | postPatch = '' 101 | patchShebangs --build ./bin/ 102 | ''; 103 | 104 | src = "${elinuxVendor}/elinux-src.tar.gz"; 105 | 106 | # outputHash = lib.fakeSha256; 107 | # outputHash = "sha256-EpXV9VRhq/NA/Xa9eXped38pmOkmNKLyhICI06PCpKo="; 108 | # outputHashAlgo = "sha256"; 109 | # outputHashMode = "recursive"; 110 | 111 | nativeBuildInputs = [ 112 | git 113 | unzip 114 | which 115 | autoPatchelfHook 116 | ]; 117 | 118 | buildInputs = [ 119 | gtk3 120 | libepoxy 121 | libglvnd 122 | libxkbcommon 123 | libdrm 124 | libinput 125 | systemd 126 | eudev 127 | libgccjit # libstdc++.so.6 128 | wayland 129 | xorg.libX11 130 | mesa 131 | ]; 132 | 133 | preConfigure = '' 134 | cp -rT ${flutterSrc} ./flutter 135 | chmod -R +w ./flutter/* 136 | 137 | export OG_PUB_CACHE=$PUB_CACHE 138 | unset PUB_CACHE 139 | pushd ./flutter 140 | export FLUTTER_ROOT="$(pwd)" 141 | export FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools" 142 | export SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart" 143 | 144 | export SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot" 145 | export STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp" 146 | 147 | export DART_SDK_PATH="$(which dart)" 148 | 149 | # Patch ./flutter 150 | ${lib.concatStringsSep "\n" ( 151 | map (patch: "patch -p1 < ${patch}") 152 | flutter.patches 153 | )} 154 | 155 | HOME=$out 156 | 157 | pushd "$FLUTTER_ROOT" 158 | dart pub cache preload ./.pub-preload-cache/* 159 | popd 160 | 161 | pushd "$FLUTTER_TOOLS_DIR" 162 | dart pub get --offline 163 | popd 164 | 165 | local revision="$(cd "$FLUTTER_ROOT"; git rev-parse HEAD)" 166 | dart --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" "$SCRIPT_PATH" 167 | echo "$revision" > "$STAMP_PATH" 168 | echo -n "${version}" > version 169 | 170 | rm -r bin/cache/dart-sdk 171 | popd 172 | # export PUB_CACHE="$FLUTTER_ROOT/.pub-cache" 173 | export PUB_CACHE=$OG_PUB_CACHE 174 | 175 | # TODO: automatically do this based on the folders in `./templates` 176 | # Right now the folders are: "app" and "plugin". 177 | 178 | mkdir ./flutter/packages/flutter_tools/templates/app/elinux.tmpl 179 | cp -r ./templates/app/* ./flutter/packages/flutter_tools/templates/app/elinux.tmpl 180 | 181 | mkdir ./flutter/packages/flutter_tools/templates/plugin/elinux.tmpl 182 | cp -r ./templates/plugin/* ./flutter/packages/flutter_tools/templates/plugin/elinux.tmpl 183 | ''; 184 | 185 | preInstall = 186 | '' 187 | mkdir -p $out/lib/flutter/bin/cache/ 188 | cp -r . $out/lib 189 | ln -sf $(dirname $(dirname $(which dart))) $out/lib/flutter/bin/cache/dart-sdk 190 | 191 | cp -rT ${elinuxVendor}/artifacts $out/lib/flutter/bin/cache/artifacts 192 | '' 193 | + lib.concatStringsSep "\n" (map (cache: '' 194 | rm -r "$out/lib/flutter/bin/cache/${cache}" 195 | ln -s "/tmp/flutter-cache/${cache}" "$out/lib/flutter/bin/cache/${cache}" 196 | '') 197 | symlinkCache); 198 | 199 | postFixup = '' 200 | sed -i '2i\ 201 | export PUB_CACHE=\''${PUB_CACHE:-"\$HOME/.pub-cache"}\ 202 | export ANDROID_EMULATOR_USE_SYSTEM_LIBS=1 203 | ' $out/lib/bin/flutter-elinux 204 | ''; 205 | }; 206 | in 207 | elinux 208 | -------------------------------------------------------------------------------- /checks/default-flutter-build/pubspec-nix.lock: -------------------------------------------------------------------------------- 1 | { 2 | "pub": { 3 | "hosted/pub.dev/async-2.10.0": { 4 | "fetcher": "fetchzip", 5 | "args": { 6 | "name": "pub-async-2.10.0", 7 | "url": "https://pub.dev/packages/async/versions/2.10.0.tar.gz", 8 | "stripRoot": false, 9 | "sha256": "00hhylamsjcqmcbxlsrfimri63gb384l31r9mqvacn6c6bvk4yfx" 10 | } 11 | }, 12 | "hosted/pub.dev/boolean_selector-2.1.1": { 13 | "fetcher": "fetchzip", 14 | "args": { 15 | "name": "pub-boolean_selector-2.1.1", 16 | "url": "https://pub.dev/packages/boolean_selector/versions/2.1.1.tar.gz", 17 | "stripRoot": false, 18 | "sha256": "0hxq8072hb89q9s91xlz9fvrjxfy7hw6jkdwkph5dp77df841kmj" 19 | } 20 | }, 21 | "hosted/pub.dev/characters-1.2.1": { 22 | "fetcher": "fetchzip", 23 | "args": { 24 | "name": "pub-characters-1.2.1", 25 | "url": "https://pub.dev/packages/characters/versions/1.2.1.tar.gz", 26 | "stripRoot": false, 27 | "sha256": "14410hzmgm60nn83srzyvsykpa4vvsj18icaf5sj00q5fmpbhkcq" 28 | } 29 | }, 30 | "hosted/pub.dev/clock-1.1.1": { 31 | "fetcher": "fetchzip", 32 | "args": { 33 | "name": "pub-clock-1.1.1", 34 | "url": "https://pub.dev/packages/clock/versions/1.1.1.tar.gz", 35 | "stripRoot": false, 36 | "sha256": "1z1mpmd7b6dw9w20vb5l5y3r6fmck4iriydlv9hhvmp7p6ss37hk" 37 | } 38 | }, 39 | "hosted/pub.dev/collection-1.17.0": { 40 | "fetcher": "fetchzip", 41 | "args": { 42 | "name": "pub-collection-1.17.0", 43 | "url": "https://pub.dev/packages/collection/versions/1.17.0.tar.gz", 44 | "stripRoot": false, 45 | "sha256": "1iyl3v3j7mj3sxjf63b1kc182fwrwd04mjp5x2i61hic8ihfw545" 46 | } 47 | }, 48 | "hosted/pub.dev/cupertino_icons-1.0.5": { 49 | "fetcher": "fetchzip", 50 | "args": { 51 | "name": "pub-cupertino_icons-1.0.5", 52 | "url": "https://pub.dev/packages/cupertino_icons/versions/1.0.5.tar.gz", 53 | "stripRoot": false, 54 | "sha256": "0w0knjkihn65g5i62lqzsa31wc7cfbwi52sb0yqx3h8lyymh2qm4" 55 | } 56 | }, 57 | "hosted/pub.dev/fake_async-1.3.1": { 58 | "fetcher": "fetchzip", 59 | "args": { 60 | "name": "pub-fake_async-1.3.1", 61 | "url": "https://pub.dev/packages/fake_async/versions/1.3.1.tar.gz", 62 | "stripRoot": false, 63 | "sha256": "0xyswdmj7f7ns0qhfq1s8z0wnh0gd277l73az1dh0x1zd6l7wp7k" 64 | } 65 | }, 66 | "hosted/pub.dev/flutter_lints-2.0.1": { 67 | "fetcher": "fetchzip", 68 | "args": { 69 | "name": "pub-flutter_lints-2.0.1", 70 | "url": "https://pub.dev/packages/flutter_lints/versions/2.0.1.tar.gz", 71 | "stripRoot": false, 72 | "sha256": "1slwz1w2yddavmsw7yg36xglnhww4kb2xjf3f72r1jqymzaqk4k7" 73 | } 74 | }, 75 | "hosted/pub.dev/js-0.6.5": { 76 | "fetcher": "fetchzip", 77 | "args": { 78 | "name": "pub-js-0.6.5", 79 | "url": "https://pub.dev/packages/js/versions/0.6.5.tar.gz", 80 | "stripRoot": false, 81 | "sha256": "13fbxgyg1v6bmzvxamg6494vk3923fn3mgxj6f4y476aqwk99n50" 82 | } 83 | }, 84 | "hosted/pub.dev/lints-2.0.1": { 85 | "fetcher": "fetchzip", 86 | "args": { 87 | "name": "pub-lints-2.0.1", 88 | "url": "https://pub.dev/packages/lints/versions/2.0.1.tar.gz", 89 | "stripRoot": false, 90 | "sha256": "0y0iryaffx3ik4mxpcr9ys90nnkrq0r3bmi1lf8ww1xafy6nirb6" 91 | } 92 | }, 93 | "hosted/pub.dev/matcher-0.12.13": { 94 | "fetcher": "fetchzip", 95 | "args": { 96 | "name": "pub-matcher-0.12.13", 97 | "url": "https://pub.dev/packages/matcher/versions/0.12.13.tar.gz", 98 | "stripRoot": false, 99 | "sha256": "0pjgc38clnjbv124n8bh724db1wcc4kk125j7dxl0icz7clvm0p0" 100 | } 101 | }, 102 | "hosted/pub.dev/material_color_utilities-0.2.0": { 103 | "fetcher": "fetchzip", 104 | "args": { 105 | "name": "pub-material_color_utilities-0.2.0", 106 | "url": "https://pub.dev/packages/material_color_utilities/versions/0.2.0.tar.gz", 107 | "stripRoot": false, 108 | "sha256": "1ibynby90nk5vriv91jqpgbiijcsn44lx9fzlwma1p7aac9v7sm5" 109 | } 110 | }, 111 | "hosted/pub.dev/meta-1.8.0": { 112 | "fetcher": "fetchzip", 113 | "args": { 114 | "name": "pub-meta-1.8.0", 115 | "url": "https://pub.dev/packages/meta/versions/1.8.0.tar.gz", 116 | "stripRoot": false, 117 | "sha256": "01kqdd25nln5a219pr94s66p27m0kpqz0wpmwnm24kdy3ngif1v5" 118 | } 119 | }, 120 | "hosted/pub.dev/path-1.8.2": { 121 | "fetcher": "fetchzip", 122 | "args": { 123 | "name": "pub-path-1.8.2", 124 | "url": "https://pub.dev/packages/path/versions/1.8.2.tar.gz", 125 | "stripRoot": false, 126 | "sha256": "16ggdh29ciy7h8sdshhwmxn6dd12sfbykf2j82c56iwhhlljq181" 127 | } 128 | }, 129 | "hosted/pub.dev/source_span-1.9.1": { 130 | "fetcher": "fetchzip", 131 | "args": { 132 | "name": "pub-source_span-1.9.1", 133 | "url": "https://pub.dev/packages/source_span/versions/1.9.1.tar.gz", 134 | "stripRoot": false, 135 | "sha256": "1lq4sy7lw15qsv9cijf6l48p16qr19r7njzwr4pxn8vv1kh6rb86" 136 | } 137 | }, 138 | "hosted/pub.dev/stack_trace-1.11.0": { 139 | "fetcher": "fetchzip", 140 | "args": { 141 | "name": "pub-stack_trace-1.11.0", 142 | "url": "https://pub.dev/packages/stack_trace/versions/1.11.0.tar.gz", 143 | "stripRoot": false, 144 | "sha256": "0bggqvvpkrfvqz24bnir4959k0c45azc3zivk4lyv3mvba6092na" 145 | } 146 | }, 147 | "hosted/pub.dev/stream_channel-2.1.1": { 148 | "fetcher": "fetchzip", 149 | "args": { 150 | "name": "pub-stream_channel-2.1.1", 151 | "url": "https://pub.dev/packages/stream_channel/versions/2.1.1.tar.gz", 152 | "stripRoot": false, 153 | "sha256": "054by84c60yxphr3qgg6f82gg6d22a54aqjp265anlm8dwz1ji32" 154 | } 155 | }, 156 | "hosted/pub.dev/string_scanner-1.2.0": { 157 | "fetcher": "fetchzip", 158 | "args": { 159 | "name": "pub-string_scanner-1.2.0", 160 | "url": "https://pub.dev/packages/string_scanner/versions/1.2.0.tar.gz", 161 | "stripRoot": false, 162 | "sha256": "0p1r0v2923avwfg03rk0pmc6f21m0zxpcx6i57xygd25k6hdfi00" 163 | } 164 | }, 165 | "hosted/pub.dev/term_glyph-1.2.1": { 166 | "fetcher": "fetchzip", 167 | "args": { 168 | "name": "pub-term_glyph-1.2.1", 169 | "url": "https://pub.dev/packages/term_glyph/versions/1.2.1.tar.gz", 170 | "stripRoot": false, 171 | "sha256": "1x8nspxaccls0sxjamp703yp55yxdvhj6wg21lzwd296i9rwlxh9" 172 | } 173 | }, 174 | "hosted/pub.dev/test_api-0.4.16": { 175 | "fetcher": "fetchzip", 176 | "args": { 177 | "name": "pub-test_api-0.4.16", 178 | "url": "https://pub.dev/packages/test_api/versions/0.4.16.tar.gz", 179 | "stripRoot": false, 180 | "sha256": "0mfyjpqkkmaqdh7xygrydx12591wq9ll816f61n80dc6rmkdx7px" 181 | } 182 | }, 183 | "hosted/pub.dev/vector_math-2.1.4": { 184 | "fetcher": "fetchzip", 185 | "args": { 186 | "name": "pub-vector_math-2.1.4", 187 | "url": "https://pub.dev/packages/vector_math/versions/2.1.4.tar.gz", 188 | "stripRoot": false, 189 | "sha256": "1rkpldi01mhhkgx315rrr6hnj48jilxy62v7rfzarf504pz4klmy" 190 | } 191 | } 192 | } 193 | } -------------------------------------------------------------------------------- /elinux/patches/elinux/deps2nix.lock: -------------------------------------------------------------------------------- 1 | { 2 | "dart": { 3 | "executables": { 4 | "flutter-elinux": "flutter_elinux" 5 | } 6 | }, 7 | "pub": { 8 | "hosted/pub.dartlang.org/_fe_analyzer_shared-41.0.0": { 9 | "name": "pub-_fe_analyzer_shared-41.0.0", 10 | "url": "https://pub.dartlang.org/packages/_fe_analyzer_shared/versions/41.0.0.tar.gz", 11 | "stripRoot": false, 12 | "sha256": "1b1y2zvc8d3p10yxw5qxa40a59azgn28ff7mvbjfm83qjamxy948" 13 | }, 14 | "hosted/pub.dartlang.org/analyzer-4.2.0": { 15 | "name": "pub-analyzer-4.2.0", 16 | "url": "https://pub.dartlang.org/packages/analyzer/versions/4.2.0.tar.gz", 17 | "stripRoot": false, 18 | "sha256": "1rn36fwixcxcj35a2h8y4z2nj5hci8p10m7f9j037rm5scn4aald" 19 | }, 20 | "hosted/pub.dartlang.org/archive-3.3.0": { 21 | "name": "pub-archive-3.3.0", 22 | "url": "https://pub.dartlang.org/packages/archive/versions/3.3.0.tar.gz", 23 | "stripRoot": false, 24 | "sha256": "1p3hkb3dsf7g4yfv2b4zyjnrjx8lfjivs9wfzvq4lnb7g0m712ai" 25 | }, 26 | "hosted/pub.dartlang.org/args-2.3.1": { 27 | "name": "pub-args-2.3.1", 28 | "url": "https://pub.dartlang.org/packages/args/versions/2.3.1.tar.gz", 29 | "stripRoot": false, 30 | "sha256": "0c78zkzg2d2kzw1qrpiyrj1qvm4pr0yhnzapbqk347m780ha408g" 31 | }, 32 | "hosted/pub.dartlang.org/async-2.9.0": { 33 | "name": "pub-async-2.9.0", 34 | "url": "https://pub.dartlang.org/packages/async/versions/2.9.0.tar.gz", 35 | "stripRoot": false, 36 | "sha256": "04pic2ss16ni8b1bnk7450hrq1391zbl93dlhd2a4na3cgwd65b3" 37 | }, 38 | "hosted/pub.dartlang.org/boolean_selector-2.1.0": { 39 | "name": "pub-boolean_selector-2.1.0", 40 | "url": "https://pub.dartlang.org/packages/boolean_selector/versions/2.1.0.tar.gz", 41 | "stripRoot": false, 42 | "sha256": "1rk7z1pa4yrnbdw5djqykx4w9lzpfdkb40z8zvnqzmr9mbkd60jx" 43 | }, 44 | "hosted/pub.dartlang.org/browser_launcher-1.1.1": { 45 | "name": "pub-browser_launcher-1.1.1", 46 | "url": "https://pub.dartlang.org/packages/browser_launcher/versions/1.1.1.tar.gz", 47 | "stripRoot": false, 48 | "sha256": "0glhihph79xpml0mzpyj38l1qsz1xk7n9c02wqdb0xw1k9zgdpy8" 49 | }, 50 | "hosted/pub.dartlang.org/built_collection-5.1.1": { 51 | "name": "pub-built_collection-5.1.1", 52 | "url": "https://pub.dartlang.org/packages/built_collection/versions/5.1.1.tar.gz", 53 | "stripRoot": false, 54 | "sha256": "0bqjahxr42q84w91nhv3n4cr580l3s3ffx3vgzyyypgqnrck0hv3" 55 | }, 56 | "hosted/pub.dartlang.org/built_value-8.3.3": { 57 | "name": "pub-built_value-8.3.3", 58 | "url": "https://pub.dartlang.org/packages/built_value/versions/8.3.3.tar.gz", 59 | "stripRoot": false, 60 | "sha256": "1z2mn3bbpspv0f1h4lkdnqbhf2gvf4imsbprirq44hp2qgk4l3cn" 61 | }, 62 | "hosted/pub.dartlang.org/clock-1.1.1": { 63 | "name": "pub-clock-1.1.1", 64 | "url": "https://pub.dartlang.org/packages/clock/versions/1.1.1.tar.gz", 65 | "stripRoot": false, 66 | "sha256": "1z1mpmd7b6dw9w20vb5l5y3r6fmck4iriydlv9hhvmp7p6ss37hk" 67 | }, 68 | "hosted/pub.dartlang.org/collection-1.17.0": { 69 | "name": "pub-collection-1.17.0", 70 | "url": "https://pub.dartlang.org/packages/collection/versions/1.17.0.tar.gz", 71 | "stripRoot": false, 72 | "sha256": "1iyl3v3j7mj3sxjf63b1kc182fwrwd04mjp5x2i61hic8ihfw545" 73 | }, 74 | "hosted/pub.dartlang.org/completion-1.0.0": { 75 | "name": "pub-completion-1.0.0", 76 | "url": "https://pub.dartlang.org/packages/completion/versions/1.0.0.tar.gz", 77 | "stripRoot": false, 78 | "sha256": "09l687h5m8zfkcwx5izqjlqh7i6pz95jvnl8d128911pyxbwaknm" 79 | }, 80 | "hosted/pub.dartlang.org/convert-3.0.2": { 81 | "name": "pub-convert-3.0.2", 82 | "url": "https://pub.dartlang.org/packages/convert/versions/3.0.2.tar.gz", 83 | "stripRoot": false, 84 | "sha256": "1fx2c8b5ryvhp0qzykr7dm9zhfc05iq6cww3xqnsif37xq4v00rs" 85 | }, 86 | "hosted/pub.dartlang.org/coverage-1.5.0": { 87 | "name": "pub-coverage-1.5.0", 88 | "url": "https://pub.dartlang.org/packages/coverage/versions/1.5.0.tar.gz", 89 | "stripRoot": false, 90 | "sha256": "1zx1y1h2nds3al02nf4bqc0hs4fa1gxialfk72bnfm8f6rbd32ak" 91 | }, 92 | "hosted/pub.dartlang.org/crypto-3.0.2": { 93 | "name": "pub-crypto-3.0.2", 94 | "url": "https://pub.dartlang.org/packages/crypto/versions/3.0.2.tar.gz", 95 | "stripRoot": false, 96 | "sha256": "1kjfb8fvdxazmv9ps2iqdhb8kcr31115h0nwn6v4xmr71k8jb8ds" 97 | }, 98 | "hosted/pub.dartlang.org/csslib-0.17.2": { 99 | "name": "pub-csslib-0.17.2", 100 | "url": "https://pub.dartlang.org/packages/csslib/versions/0.17.2.tar.gz", 101 | "stripRoot": false, 102 | "sha256": "0n4mqfbikcx5gspj6ayx3djr0iy68p8wy0pr80bfk3wdnb95214m" 103 | }, 104 | "hosted/pub.dartlang.org/dds-2.2.5": { 105 | "name": "pub-dds-2.2.5", 106 | "url": "https://pub.dartlang.org/packages/dds/versions/2.2.5.tar.gz", 107 | "stripRoot": false, 108 | "sha256": "1fslqdv39rqh0gwgci98j1z6r82rprsil7xywfymscfbg2d1ds1b" 109 | }, 110 | "hosted/pub.dartlang.org/dds_service_extensions-1.3.1": { 111 | "name": "pub-dds_service_extensions-1.3.1", 112 | "url": "https://pub.dartlang.org/packages/dds_service_extensions/versions/1.3.1.tar.gz", 113 | "stripRoot": false, 114 | "sha256": "178gp1jv5bkr3dnkp40ynai4cyaf0xz33albyi36zphsr9p2as0z" 115 | }, 116 | "hosted/pub.dartlang.org/devtools_shared-2.14.1": { 117 | "name": "pub-devtools_shared-2.14.1", 118 | "url": "https://pub.dartlang.org/packages/devtools_shared/versions/2.14.1.tar.gz", 119 | "stripRoot": false, 120 | "sha256": "0rcbyfalk6wvl8jjw0953fybljzjvj3j297acv31nvbs055zyb9g" 121 | }, 122 | "hosted/pub.dartlang.org/dwds-15.0.0": { 123 | "name": "pub-dwds-15.0.0", 124 | "url": "https://pub.dartlang.org/packages/dwds/versions/15.0.0.tar.gz", 125 | "stripRoot": false, 126 | "sha256": "099jqwqdc5qljx353k3n2nc5lpi8w81gbvcfq4nhmabwzbw0qan4" 127 | }, 128 | "hosted/pub.dartlang.org/fake_async-1.3.1": { 129 | "name": "pub-fake_async-1.3.1", 130 | "url": "https://pub.dartlang.org/packages/fake_async/versions/1.3.1.tar.gz", 131 | "stripRoot": false, 132 | "sha256": "0xyswdmj7f7ns0qhfq1s8z0wnh0gd277l73az1dh0x1zd6l7wp7k" 133 | }, 134 | "hosted/pub.dartlang.org/file-6.1.2": { 135 | "name": "pub-file-6.1.2", 136 | "url": "https://pub.dartlang.org/packages/file/versions/6.1.2.tar.gz", 137 | "stripRoot": false, 138 | "sha256": "0pda7jr6hm9411a8q0lrxvib42plcyk9xfq3paqhl27xg3ddqjpl" 139 | }, 140 | "hosted/pub.dartlang.org/fixnum-1.0.1": { 141 | "name": "pub-fixnum-1.0.1", 142 | "url": "https://pub.dartlang.org/packages/fixnum/versions/1.0.1.tar.gz", 143 | "stripRoot": false, 144 | "sha256": "1m8cdfqp9d6w1cik3fwz9bai1wf9j11rjv2z0zlv7ich87q9kkjk" 145 | }, 146 | "hosted/pub.dartlang.org/flutter_template_images-4.1.0": { 147 | "name": "pub-flutter_template_images-4.1.0", 148 | "url": "https://pub.dartlang.org/packages/flutter_template_images/versions/4.1.0.tar.gz", 149 | "stripRoot": false, 150 | "sha256": "0mys5sykclpxv6dxv6pab03hbd0fbcfq40ixwxamhm6w386rbxvd" 151 | }, 152 | "hosted/pub.dartlang.org/frontend_server_client-2.1.3": { 153 | "name": "pub-frontend_server_client-2.1.3", 154 | "url": "https://pub.dartlang.org/packages/frontend_server_client/versions/2.1.3.tar.gz", 155 | "stripRoot": false, 156 | "sha256": "0c5mbd4mhiq0vpqmp9pxmz3y6301aahy04h6ll6lz40wy34g2klq" 157 | }, 158 | "hosted/pub.dartlang.org/glob-2.1.0": { 159 | "name": "pub-glob-2.1.0", 160 | "url": "https://pub.dartlang.org/packages/glob/versions/2.1.0.tar.gz", 161 | "stripRoot": false, 162 | "sha256": "0a6gbwsbz6rkg35dkff0zv88rvcflqdmda90hdfpn7jp1z1w9rhs" 163 | }, 164 | "hosted/pub.dartlang.org/html-0.15.0": { 165 | "name": "pub-html-0.15.0", 166 | "url": "https://pub.dartlang.org/packages/html/versions/0.15.0.tar.gz", 167 | "stripRoot": false, 168 | "sha256": "0n6mnid676j09iq3rli91hh3q5bzwfahfhk74ll73h6pz5zb8nr4" 169 | }, 170 | "hosted/pub.dartlang.org/http-0.13.4": { 171 | "name": "pub-http-0.13.4", 172 | "url": "https://pub.dartlang.org/packages/http/versions/0.13.4.tar.gz", 173 | "stripRoot": false, 174 | "sha256": "1l4fnz5w77w26vrndk6dwij3zw387nbvnqr4byiswdx0hfh5nfml" 175 | }, 176 | "hosted/pub.dartlang.org/http_multi_server-3.2.1": { 177 | "name": "pub-http_multi_server-3.2.1", 178 | "url": "https://pub.dartlang.org/packages/http_multi_server/versions/3.2.1.tar.gz", 179 | "stripRoot": false, 180 | "sha256": "1zdcm04z85jahb2hs7qs85rh974kw49hffhy9cn1gfda3077dvql" 181 | }, 182 | "hosted/pub.dartlang.org/http_parser-4.0.1": { 183 | "name": "pub-http_parser-4.0.1", 184 | "url": "https://pub.dartlang.org/packages/http_parser/versions/4.0.1.tar.gz", 185 | "stripRoot": false, 186 | "sha256": "0lj0ygi2im4p966r3c8yd0i7j61xr8g6vmp6pdxzz6kpjqz5cifv" 187 | }, 188 | "hosted/pub.dartlang.org/intl-0.17.0": { 189 | "name": "pub-intl-0.17.0", 190 | "url": "https://pub.dartlang.org/packages/intl/versions/0.17.0.tar.gz", 191 | "stripRoot": false, 192 | "sha256": "1hn6bi59vqjn49ck3qxzlyvwb2vy0g5wb0ax57xpbliwrl5zrhb9" 193 | }, 194 | "hosted/pub.dartlang.org/io-1.0.3": { 195 | "name": "pub-io-1.0.3", 196 | "url": "https://pub.dartlang.org/packages/io/versions/1.0.3.tar.gz", 197 | "stripRoot": false, 198 | "sha256": "1bp5l8hkrp6fjj7zw9af51hxyp52sjspc5558lq0lmi453l0czni" 199 | }, 200 | "hosted/pub.dartlang.org/json_rpc_2-3.0.2": { 201 | "name": "pub-json_rpc_2-3.0.2", 202 | "url": "https://pub.dartlang.org/packages/json_rpc_2/versions/3.0.2.tar.gz", 203 | "stripRoot": false, 204 | "sha256": "1wc4xajpycq5ldaapfbaf224139z1bh9jbr8g7msaza8c4yyjc2l" 205 | }, 206 | "hosted/pub.dartlang.org/logging-1.0.2": { 207 | "name": "pub-logging-1.0.2", 208 | "url": "https://pub.dartlang.org/packages/logging/versions/1.0.2.tar.gz", 209 | "stripRoot": false, 210 | "sha256": "0hl1mjh662c44ci7z60x92i0jsyqg1zm6k6fc89n9pdcxsqdpwfs" 211 | }, 212 | "hosted/pub.dartlang.org/matcher-0.12.12": { 213 | "name": "pub-matcher-0.12.12", 214 | "url": "https://pub.dartlang.org/packages/matcher/versions/0.12.12.tar.gz", 215 | "stripRoot": false, 216 | "sha256": "0ck3snlr8j689bxr0iv1kinva0craq0p6vwcv3cr31srfr2dkxb1" 217 | }, 218 | "hosted/pub.dartlang.org/meta-1.8.0": { 219 | "name": "pub-meta-1.8.0", 220 | "url": "https://pub.dartlang.org/packages/meta/versions/1.8.0.tar.gz", 221 | "stripRoot": false, 222 | "sha256": "01kqdd25nln5a219pr94s66p27m0kpqz0wpmwnm24kdy3ngif1v5" 223 | }, 224 | "hosted/pub.dartlang.org/mime-1.0.2": { 225 | "name": "pub-mime-1.0.2", 226 | "url": "https://pub.dartlang.org/packages/mime/versions/1.0.2.tar.gz", 227 | "stripRoot": false, 228 | "sha256": "1dr3qikzvp10q1saka7azki5gk2kkf2v7k9wfqjsyxmza2zlv896" 229 | }, 230 | "hosted/pub.dartlang.org/multicast_dns-0.3.2+1": { 231 | "name": "pub-multicast_dns-0.3.2+1", 232 | "url": "https://pub.dartlang.org/packages/multicast_dns/versions/0.3.2+1.tar.gz", 233 | "stripRoot": false, 234 | "sha256": "1aw0hl5mqvg80qs9pqljlbzw90fzmmm9bv2zxjqvk6gpm7cwmwyn" 235 | }, 236 | "hosted/pub.dartlang.org/mustache_template-2.0.0": { 237 | "name": "pub-mustache_template-2.0.0", 238 | "url": "https://pub.dartlang.org/packages/mustache_template/versions/2.0.0.tar.gz", 239 | "stripRoot": false, 240 | "sha256": "0dl4xcnaab8y7dj0n8dv339d6a92i4d31zy8nn6yzawb67x32jcz" 241 | }, 242 | "hosted/pub.dartlang.org/native_stack_traces-0.4.6": { 243 | "name": "pub-native_stack_traces-0.4.6", 244 | "url": "https://pub.dartlang.org/packages/native_stack_traces/versions/0.4.6.tar.gz", 245 | "stripRoot": false, 246 | "sha256": "0chcxzq9sisl616fc02rylb0bffqqjrzcv34rmkp0dz7vzbgifn5" 247 | }, 248 | "hosted/pub.dartlang.org/package_config-2.1.0": { 249 | "name": "pub-package_config-2.1.0", 250 | "url": "https://pub.dartlang.org/packages/package_config/versions/2.1.0.tar.gz", 251 | "stripRoot": false, 252 | "sha256": "1d4l0i4cby344zj45f5shrg2pkw1i1jn03kx0qqh0l7gh1ha7bpc" 253 | }, 254 | "hosted/pub.dartlang.org/path-1.8.2": { 255 | "name": "pub-path-1.8.2", 256 | "url": "https://pub.dartlang.org/packages/path/versions/1.8.2.tar.gz", 257 | "stripRoot": false, 258 | "sha256": "16ggdh29ciy7h8sdshhwmxn6dd12sfbykf2j82c56iwhhlljq181" 259 | }, 260 | "hosted/pub.dartlang.org/pedantic-1.11.1": { 261 | "name": "pub-pedantic-1.11.1", 262 | "url": "https://pub.dartlang.org/packages/pedantic/versions/1.11.1.tar.gz", 263 | "stripRoot": false, 264 | "sha256": "10ch0h3hi6cfwiz2ihfkh6m36m75c0m7fd0wwqaqggffsj2dn8ad" 265 | }, 266 | "hosted/pub.dartlang.org/petitparser-5.0.0": { 267 | "name": "pub-petitparser-5.0.0", 268 | "url": "https://pub.dartlang.org/packages/petitparser/versions/5.0.0.tar.gz", 269 | "stripRoot": false, 270 | "sha256": "01rcmvk1znjykph6znkd3skvfn61lj54km4xw6vwa5iwwg84p5ph" 271 | }, 272 | "hosted/pub.dartlang.org/platform-3.1.0": { 273 | "name": "pub-platform-3.1.0", 274 | "url": "https://pub.dartlang.org/packages/platform/versions/3.1.0.tar.gz", 275 | "stripRoot": false, 276 | "sha256": "1wzc3gb4ni6amkr50g7n3s7lg8mx50wlh55inqj8ig81r0pi24hs" 277 | }, 278 | "hosted/pub.dartlang.org/pool-1.5.1": { 279 | "name": "pub-pool-1.5.1", 280 | "url": "https://pub.dartlang.org/packages/pool/versions/1.5.1.tar.gz", 281 | "stripRoot": false, 282 | "sha256": "0wmzs46hjszv3ayhr1p5l7xza7q9rkg2q9z4swmhdqmhlz3c50x4" 283 | }, 284 | "hosted/pub.dartlang.org/process-4.2.4": { 285 | "name": "pub-process-4.2.4", 286 | "url": "https://pub.dartlang.org/packages/process/versions/4.2.4.tar.gz", 287 | "stripRoot": false, 288 | "sha256": "0dlkghbjy76vl244q73cn6fg3732k8y0pk50hx9i96lakyp6ipsy" 289 | }, 290 | "hosted/pub.dartlang.org/pub_semver-2.1.1": { 291 | "name": "pub-pub_semver-2.1.1", 292 | "url": "https://pub.dartlang.org/packages/pub_semver/versions/2.1.1.tar.gz", 293 | "stripRoot": false, 294 | "sha256": "1im633xwddksica1wkfm8vx1v9gfyy1i84j9a0rbs9k0lsmcc7n5" 295 | }, 296 | "hosted/pub.dartlang.org/shelf-1.3.1": { 297 | "name": "pub-shelf-1.3.1", 298 | "url": "https://pub.dartlang.org/packages/shelf/versions/1.3.1.tar.gz", 299 | "stripRoot": false, 300 | "sha256": "1hiqhqm9r4njkcgpbyr3d5s5iwfsay90y4kir03cs3ffdik4fnml" 301 | }, 302 | "hosted/pub.dartlang.org/shelf_packages_handler-3.0.1": { 303 | "name": "pub-shelf_packages_handler-3.0.1", 304 | "url": "https://pub.dartlang.org/packages/shelf_packages_handler/versions/3.0.1.tar.gz", 305 | "stripRoot": false, 306 | "sha256": "199rbdbifj46lg3iynznnsbs8zr4dfcw0s7wan8v73nvpqvli82q" 307 | }, 308 | "hosted/pub.dartlang.org/shelf_proxy-1.0.2": { 309 | "name": "pub-shelf_proxy-1.0.2", 310 | "url": "https://pub.dartlang.org/packages/shelf_proxy/versions/1.0.2.tar.gz", 311 | "stripRoot": false, 312 | "sha256": "0i9dhbiijy14zv3g6k554y1n0sjsnvjrrci2rsjrl0jlrm66ifiv" 313 | }, 314 | "hosted/pub.dartlang.org/shelf_static-1.1.1": { 315 | "name": "pub-shelf_static-1.1.1", 316 | "url": "https://pub.dartlang.org/packages/shelf_static/versions/1.1.1.tar.gz", 317 | "stripRoot": false, 318 | "sha256": "1kqbaslz7bna9lldda3ibrjg0gczbzlwgm9cic8shg0bnl0v3s34" 319 | }, 320 | "hosted/pub.dartlang.org/shelf_web_socket-1.0.2": { 321 | "name": "pub-shelf_web_socket-1.0.2", 322 | "url": "https://pub.dartlang.org/packages/shelf_web_socket/versions/1.0.2.tar.gz", 323 | "stripRoot": false, 324 | "sha256": "0z55cicghf8dfc9b788acyhfn8g0i1fq8v8qwpzwxy9fciypsl5f" 325 | }, 326 | "hosted/pub.dartlang.org/source_map_stack_trace-2.1.0": { 327 | "name": "pub-source_map_stack_trace-2.1.0", 328 | "url": "https://pub.dartlang.org/packages/source_map_stack_trace/versions/2.1.0.tar.gz", 329 | "stripRoot": false, 330 | "sha256": "0ixx1w93qy2lp06d5l51j8xvahb0zaym567xp7zwka410frdc55l" 331 | }, 332 | "hosted/pub.dartlang.org/source_maps-0.10.10": { 333 | "name": "pub-source_maps-0.10.10", 334 | "url": "https://pub.dartlang.org/packages/source_maps/versions/0.10.10.tar.gz", 335 | "stripRoot": false, 336 | "sha256": "1dxzkx7dc8f0y3nzgjyjsd5mm2mx1g1ilbdhz0h8i073i7vn321a" 337 | }, 338 | "hosted/pub.dartlang.org/source_span-1.9.0": { 339 | "name": "pub-source_span-1.9.0", 340 | "url": "https://pub.dartlang.org/packages/source_span/versions/1.9.0.tar.gz", 341 | "stripRoot": false, 342 | "sha256": "0j64s4vc22mzx8zw35lyd1q76phh84bsc5arsawcfkxa76l06542" 343 | }, 344 | "hosted/pub.dartlang.org/sse-4.1.0": { 345 | "name": "pub-sse-4.1.0", 346 | "url": "https://pub.dartlang.org/packages/sse/versions/4.1.0.tar.gz", 347 | "stripRoot": false, 348 | "sha256": "0l49m3li6d7y3m5mvri54irlsmyivs7cj4pdv7ppsk73nqlcnh84" 349 | }, 350 | "hosted/pub.dartlang.org/stack_trace-1.10.0": { 351 | "name": "pub-stack_trace-1.10.0", 352 | "url": "https://pub.dartlang.org/packages/stack_trace/versions/1.10.0.tar.gz", 353 | "stripRoot": false, 354 | "sha256": "01lyk22h1zxr3a39wmai9lvxykia0y8g7lc2kcpnjypxhf4g0sbl" 355 | }, 356 | "hosted/pub.dartlang.org/stream_channel-2.1.0": { 357 | "name": "pub-stream_channel-2.1.0", 358 | "url": "https://pub.dartlang.org/packages/stream_channel/versions/2.1.0.tar.gz", 359 | "stripRoot": false, 360 | "sha256": "0591c3bpjipx4jlzxwsyspmgpjryh6psl1ks38jkcxp3pffkybsv" 361 | }, 362 | "hosted/pub.dartlang.org/string_scanner-1.1.1": { 363 | "name": "pub-string_scanner-1.1.1", 364 | "url": "https://pub.dartlang.org/packages/string_scanner/versions/1.1.1.tar.gz", 365 | "stripRoot": false, 366 | "sha256": "0l3b1l9859gylhipcdacml0a0zlb8xhi42whpwqkc1jbkvimji36" 367 | }, 368 | "hosted/pub.dartlang.org/sync_http-0.3.1": { 369 | "name": "pub-sync_http-0.3.1", 370 | "url": "https://pub.dartlang.org/packages/sync_http/versions/0.3.1.tar.gz", 371 | "stripRoot": false, 372 | "sha256": "12ywdfknsmncn6c4241jgi8di2i3dqjjp7fbyrxkfmhf653gw6di" 373 | }, 374 | "hosted/pub.dartlang.org/term_glyph-1.2.1": { 375 | "name": "pub-term_glyph-1.2.1", 376 | "url": "https://pub.dartlang.org/packages/term_glyph/versions/1.2.1.tar.gz", 377 | "stripRoot": false, 378 | "sha256": "1x8nspxaccls0sxjamp703yp55yxdvhj6wg21lzwd296i9rwlxh9" 379 | }, 380 | "hosted/pub.dartlang.org/test_api-0.4.12": { 381 | "name": "pub-test_api-0.4.12", 382 | "url": "https://pub.dartlang.org/packages/test_api/versions/0.4.12.tar.gz", 383 | "stripRoot": false, 384 | "sha256": "1zsh799yd8nnkbsl2jhin9kc9hl3zv8nh0syys84alb1v8yksb3b" 385 | }, 386 | "hosted/pub.dartlang.org/test_core-0.4.16": { 387 | "name": "pub-test_core-0.4.16", 388 | "url": "https://pub.dartlang.org/packages/test_core/versions/0.4.16.tar.gz", 389 | "stripRoot": false, 390 | "sha256": "17y2hqy5psk99jcmy7q59036p8wdxhrxkgw0g61iw2ywg03z9ksx" 391 | }, 392 | "hosted/pub.dartlang.org/typed_data-1.3.1": { 393 | "name": "pub-typed_data-1.3.1", 394 | "url": "https://pub.dartlang.org/packages/typed_data/versions/1.3.1.tar.gz", 395 | "stripRoot": false, 396 | "sha256": "1x402bvyzdmdvmyqhyfamjxf54p9j8sa8ns2n5dwsdhnfqbw859g" 397 | }, 398 | "hosted/pub.dartlang.org/usage-4.1.0": { 399 | "name": "pub-usage-4.1.0", 400 | "url": "https://pub.dartlang.org/packages/usage/versions/4.1.0.tar.gz", 401 | "stripRoot": false, 402 | "sha256": "0x5nqjilcfjl4w0532iycxqrgprayv1r27lbb30hyprk2sxg6s7a" 403 | }, 404 | "hosted/pub.dartlang.org/uuid-3.0.6": { 405 | "name": "pub-uuid-3.0.6", 406 | "url": "https://pub.dartlang.org/packages/uuid/versions/3.0.6.tar.gz", 407 | "stripRoot": false, 408 | "sha256": "1ysj7dglqi753z2cn8j3ly979l0rz5cnw1sw891xyc07bgxzncb3" 409 | }, 410 | "hosted/pub.dartlang.org/vm_service-9.0.0": { 411 | "name": "pub-vm_service-9.0.0", 412 | "url": "https://pub.dartlang.org/packages/vm_service/versions/9.0.0.tar.gz", 413 | "stripRoot": false, 414 | "sha256": "0sb8fqflhm1pn17hkb30y6wxz5hgh42qqy7yvvr4125vc2cg76b8" 415 | }, 416 | "hosted/pub.dartlang.org/vm_snapshot_analysis-0.7.2": { 417 | "name": "pub-vm_snapshot_analysis-0.7.2", 418 | "url": "https://pub.dartlang.org/packages/vm_snapshot_analysis/versions/0.7.2.tar.gz", 419 | "stripRoot": false, 420 | "sha256": "0k7rxlnwpnxvdv0n2ndhv1r6vwgknqmg9lpl7dbgb69x10zfpkcp" 421 | }, 422 | "hosted/pub.dartlang.org/watcher-1.0.1": { 423 | "name": "pub-watcher-1.0.1", 424 | "url": "https://pub.dartlang.org/packages/watcher/versions/1.0.1.tar.gz", 425 | "stripRoot": false, 426 | "sha256": "04gm3bj5jq4krpanldqycqglmln3mj7j2l22pkqb3m37awgcckv1" 427 | }, 428 | "hosted/pub.dartlang.org/web_socket_channel-2.2.0": { 429 | "name": "pub-web_socket_channel-2.2.0", 430 | "url": "https://pub.dartlang.org/packages/web_socket_channel/versions/2.2.0.tar.gz", 431 | "stripRoot": false, 432 | "sha256": "147amn05v1f1a1grxjr7yzgshrczjwijwiywggsv6dgic8kxyj5a" 433 | }, 434 | "hosted/pub.dartlang.org/webdriver-3.0.0": { 435 | "name": "pub-webdriver-3.0.0", 436 | "url": "https://pub.dartlang.org/packages/webdriver/versions/3.0.0.tar.gz", 437 | "stripRoot": false, 438 | "sha256": "1653wzyscs4bx518z4qaf3zkv3dxqnrff8h07ppzmqlb7b36jkjz" 439 | }, 440 | "hosted/pub.dartlang.org/webkit_inspection_protocol-1.1.0": { 441 | "name": "pub-webkit_inspection_protocol-1.1.0", 442 | "url": "https://pub.dartlang.org/packages/webkit_inspection_protocol/versions/1.1.0.tar.gz", 443 | "stripRoot": false, 444 | "sha256": "0c3nzy9dk9rr0avxch2890chgcy5v04sr07ryx0l6m3cwhwi59vj" 445 | }, 446 | "hosted/pub.dartlang.org/xml-6.1.0": { 447 | "name": "pub-xml-6.1.0", 448 | "url": "https://pub.dartlang.org/packages/xml/versions/6.1.0.tar.gz", 449 | "stripRoot": false, 450 | "sha256": "1pinq9zagchh2pk9d3ja3g8rljb3sl31qz2gw7djij7ih0dswxal" 451 | }, 452 | "hosted/pub.dartlang.org/yaml-3.1.1": { 453 | "name": "pub-yaml-3.1.1", 454 | "url": "https://pub.dartlang.org/packages/yaml/versions/3.1.1.tar.gz", 455 | "stripRoot": false, 456 | "sha256": "0mqqmzn3c9rr38b5xm312fz1vyp6vb36lm477r9hak77bxzpp0iw" 457 | } 458 | } 459 | } 460 | -------------------------------------------------------------------------------- /elinux/pubspec-nix.lock: -------------------------------------------------------------------------------- 1 | { 2 | "pub": { 3 | "hosted/pub.dev/_fe_analyzer_shared-50.0.0": { 4 | "fetcher": "fetchzip", 5 | "args": { 6 | "name": "pub-_fe_analyzer_shared-50.0.0", 7 | "url": "https://pub.dev/packages/_fe_analyzer_shared/versions/50.0.0.tar.gz", 8 | "stripRoot": false, 9 | "sha256": "1hyd5pmjcfyvfwhsc0wq6k0229abmqq5zn95g31hh42bklb2gci5" 10 | } 11 | }, 12 | "hosted/pub.dev/analyzer-5.2.0": { 13 | "fetcher": "fetchzip", 14 | "args": { 15 | "name": "pub-analyzer-5.2.0", 16 | "url": "https://pub.dev/packages/analyzer/versions/5.2.0.tar.gz", 17 | "stripRoot": false, 18 | "sha256": "0niy5b3w39aywpjpw5a84pxdilhh3zzv1c22x8ywml756pybmj4r" 19 | } 20 | }, 21 | "hosted/pub.dev/archive-3.3.2": { 22 | "fetcher": "fetchzip", 23 | "args": { 24 | "name": "pub-archive-3.3.2", 25 | "url": "https://pub.dev/packages/archive/versions/3.3.2.tar.gz", 26 | "stripRoot": false, 27 | "sha256": "052n98iyp9imi3x4g7pcvzscc1sdw9xp3bn4xnsydpshki9kcxjs" 28 | } 29 | }, 30 | "hosted/pub.dev/args-2.3.1": { 31 | "fetcher": "fetchzip", 32 | "args": { 33 | "name": "pub-args-2.3.1", 34 | "url": "https://pub.dev/packages/args/versions/2.3.1.tar.gz", 35 | "stripRoot": false, 36 | "sha256": "0c78zkzg2d2kzw1qrpiyrj1qvm4pr0yhnzapbqk347m780ha408g" 37 | } 38 | }, 39 | "hosted/pub.dev/async-2.10.0": { 40 | "fetcher": "fetchzip", 41 | "args": { 42 | "name": "pub-async-2.10.0", 43 | "url": "https://pub.dev/packages/async/versions/2.10.0.tar.gz", 44 | "stripRoot": false, 45 | "sha256": "00hhylamsjcqmcbxlsrfimri63gb384l31r9mqvacn6c6bvk4yfx" 46 | } 47 | }, 48 | "hosted/pub.dev/boolean_selector-2.1.1": { 49 | "fetcher": "fetchzip", 50 | "args": { 51 | "name": "pub-boolean_selector-2.1.1", 52 | "url": "https://pub.dev/packages/boolean_selector/versions/2.1.1.tar.gz", 53 | "stripRoot": false, 54 | "sha256": "0hxq8072hb89q9s91xlz9fvrjxfy7hw6jkdwkph5dp77df841kmj" 55 | } 56 | }, 57 | "hosted/pub.dev/browser_launcher-1.1.1": { 58 | "fetcher": "fetchzip", 59 | "args": { 60 | "name": "pub-browser_launcher-1.1.1", 61 | "url": "https://pub.dev/packages/browser_launcher/versions/1.1.1.tar.gz", 62 | "stripRoot": false, 63 | "sha256": "0glhihph79xpml0mzpyj38l1qsz1xk7n9c02wqdb0xw1k9zgdpy8" 64 | } 65 | }, 66 | "hosted/pub.dev/build-2.4.0": { 67 | "fetcher": "fetchzip", 68 | "args": { 69 | "name": "pub-build-2.4.0", 70 | "url": "https://pub.dev/packages/build/versions/2.4.0.tar.gz", 71 | "stripRoot": false, 72 | "sha256": "0l9j3apb0v59y1h8wsyj07b549cv7wz02xwikn9nhwf8cbf95zd4" 73 | } 74 | }, 75 | "hosted/pub.dev/built_collection-5.1.1": { 76 | "fetcher": "fetchzip", 77 | "args": { 78 | "name": "pub-built_collection-5.1.1", 79 | "url": "https://pub.dev/packages/built_collection/versions/5.1.1.tar.gz", 80 | "stripRoot": false, 81 | "sha256": "0bqjahxr42q84w91nhv3n4cr580l3s3ffx3vgzyyypgqnrck0hv3" 82 | } 83 | }, 84 | "hosted/pub.dev/built_value-8.4.2": { 85 | "fetcher": "fetchzip", 86 | "args": { 87 | "name": "pub-built_value-8.4.2", 88 | "url": "https://pub.dev/packages/built_value/versions/8.4.2.tar.gz", 89 | "stripRoot": false, 90 | "sha256": "0sslr4258snvcj8qhbdk6wapka174als0viyxddwqlnhs7dlci8i" 91 | } 92 | }, 93 | "hosted/pub.dev/characters-1.2.1": { 94 | "fetcher": "fetchzip", 95 | "args": { 96 | "name": "pub-characters-1.2.1", 97 | "url": "https://pub.dev/packages/characters/versions/1.2.1.tar.gz", 98 | "stripRoot": false, 99 | "sha256": "14410hzmgm60nn83srzyvsykpa4vvsj18icaf5sj00q5fmpbhkcq" 100 | } 101 | }, 102 | "hosted/pub.dev/clock-1.1.1": { 103 | "fetcher": "fetchzip", 104 | "args": { 105 | "name": "pub-clock-1.1.1", 106 | "url": "https://pub.dev/packages/clock/versions/1.1.1.tar.gz", 107 | "stripRoot": false, 108 | "sha256": "1z1mpmd7b6dw9w20vb5l5y3r6fmck4iriydlv9hhvmp7p6ss37hk" 109 | } 110 | }, 111 | "hosted/pub.dev/code_builder-4.4.0": { 112 | "fetcher": "fetchzip", 113 | "args": { 114 | "name": "pub-code_builder-4.4.0", 115 | "url": "https://pub.dev/packages/code_builder/versions/4.4.0.tar.gz", 116 | "stripRoot": false, 117 | "sha256": "02178xj9qv14s7z6vkvlylbi7w7kca7lbqbnn8fpla180vcx3km7" 118 | } 119 | }, 120 | "hosted/pub.dev/collection-1.17.0": { 121 | "fetcher": "fetchzip", 122 | "args": { 123 | "name": "pub-collection-1.17.0", 124 | "url": "https://pub.dev/packages/collection/versions/1.17.0.tar.gz", 125 | "stripRoot": false, 126 | "sha256": "1iyl3v3j7mj3sxjf63b1kc182fwrwd04mjp5x2i61hic8ihfw545" 127 | } 128 | }, 129 | "hosted/pub.dev/completion-1.0.0": { 130 | "fetcher": "fetchzip", 131 | "args": { 132 | "name": "pub-completion-1.0.0", 133 | "url": "https://pub.dev/packages/completion/versions/1.0.0.tar.gz", 134 | "stripRoot": false, 135 | "sha256": "09l687h5m8zfkcwx5izqjlqh7i6pz95jvnl8d128911pyxbwaknm" 136 | } 137 | }, 138 | "hosted/pub.dev/convert-3.1.1": { 139 | "fetcher": "fetchzip", 140 | "args": { 141 | "name": "pub-convert-3.1.1", 142 | "url": "https://pub.dev/packages/convert/versions/3.1.1.tar.gz", 143 | "stripRoot": false, 144 | "sha256": "0adsigjk3l1c31i6k91p28dqyjlgwiqrs4lky5djrm2scf8k6cri" 145 | } 146 | }, 147 | "hosted/pub.dev/coverage-1.6.1": { 148 | "fetcher": "fetchzip", 149 | "args": { 150 | "name": "pub-coverage-1.6.1", 151 | "url": "https://pub.dev/packages/coverage/versions/1.6.1.tar.gz", 152 | "stripRoot": false, 153 | "sha256": "0akbg1yp2h4vprc8r9xvrpgvp5d26h7m80h5sbzgr5dlis1bcw0d" 154 | } 155 | }, 156 | "hosted/pub.dev/crypto-3.0.2": { 157 | "fetcher": "fetchzip", 158 | "args": { 159 | "name": "pub-crypto-3.0.2", 160 | "url": "https://pub.dev/packages/crypto/versions/3.0.2.tar.gz", 161 | "stripRoot": false, 162 | "sha256": "1kjfb8fvdxazmv9ps2iqdhb8kcr31115h0nwn6v4xmr71k8jb8ds" 163 | } 164 | }, 165 | "hosted/pub.dev/csslib-0.17.2": { 166 | "fetcher": "fetchzip", 167 | "args": { 168 | "name": "pub-csslib-0.17.2", 169 | "url": "https://pub.dev/packages/csslib/versions/0.17.2.tar.gz", 170 | "stripRoot": false, 171 | "sha256": "0n4mqfbikcx5gspj6ayx3djr0iy68p8wy0pr80bfk3wdnb95214m" 172 | } 173 | }, 174 | "hosted/pub.dev/dart_style-2.2.5": { 175 | "fetcher": "fetchzip", 176 | "args": { 177 | "name": "pub-dart_style-2.2.5", 178 | "url": "https://pub.dev/packages/dart_style/versions/2.2.5.tar.gz", 179 | "stripRoot": false, 180 | "sha256": "1afndh2j5afx638rizz6vzrg6b24mkg7f396xfwyc9c0qn5m81nf" 181 | } 182 | }, 183 | "hosted/pub.dev/dds-2.5.0": { 184 | "fetcher": "fetchzip", 185 | "args": { 186 | "name": "pub-dds-2.5.0", 187 | "url": "https://pub.dev/packages/dds/versions/2.5.0.tar.gz", 188 | "stripRoot": false, 189 | "sha256": "0qjkmc7wq6w4lln766d2smvr7v1qd2xqgny046abrx98bdmkr7qh" 190 | } 191 | }, 192 | "hosted/pub.dev/dds_service_extensions-1.3.1": { 193 | "fetcher": "fetchzip", 194 | "args": { 195 | "name": "pub-dds_service_extensions-1.3.1", 196 | "url": "https://pub.dev/packages/dds_service_extensions/versions/1.3.1.tar.gz", 197 | "stripRoot": false, 198 | "sha256": "178gp1jv5bkr3dnkp40ynai4cyaf0xz33albyi36zphsr9p2as0z" 199 | } 200 | }, 201 | "hosted/pub.dev/devtools_shared-2.18.0": { 202 | "fetcher": "fetchzip", 203 | "args": { 204 | "name": "pub-devtools_shared-2.18.0", 205 | "url": "https://pub.dev/packages/devtools_shared/versions/2.18.0.tar.gz", 206 | "stripRoot": false, 207 | "sha256": "0r79mx4gh35nxanmzwp57jjsny9vsc461h8sx48chigxjzyp6dac" 208 | } 209 | }, 210 | "hosted/pub.dev/dwds-16.0.2+1": { 211 | "fetcher": "fetchzip", 212 | "args": { 213 | "name": "pub-dwds-16.0.2+1", 214 | "url": "https://pub.dev/packages/dwds/versions/16.0.2+1.tar.gz", 215 | "stripRoot": false, 216 | "sha256": "15vz2yvwqkgmwc444qmgwi4rvgzcl1bf3gqn0cv8k43i4dc0479z" 217 | } 218 | }, 219 | "hosted/pub.dev/fake_async-1.3.1": { 220 | "fetcher": "fetchzip", 221 | "args": { 222 | "name": "pub-fake_async-1.3.1", 223 | "url": "https://pub.dev/packages/fake_async/versions/1.3.1.tar.gz", 224 | "stripRoot": false, 225 | "sha256": "0xyswdmj7f7ns0qhfq1s8z0wnh0gd277l73az1dh0x1zd6l7wp7k" 226 | } 227 | }, 228 | "hosted/pub.dev/file-6.1.4": { 229 | "fetcher": "fetchzip", 230 | "args": { 231 | "name": "pub-file-6.1.4", 232 | "url": "https://pub.dev/packages/file/versions/6.1.4.tar.gz", 233 | "stripRoot": false, 234 | "sha256": "0ajcfblf8d4dicp1sgzkbrhd0b0v0d8wl70jsnf5drjck3p3ppk7" 235 | } 236 | }, 237 | "hosted/pub.dev/fixnum-1.0.1": { 238 | "fetcher": "fetchzip", 239 | "args": { 240 | "name": "pub-fixnum-1.0.1", 241 | "url": "https://pub.dev/packages/fixnum/versions/1.0.1.tar.gz", 242 | "stripRoot": false, 243 | "sha256": "1m8cdfqp9d6w1cik3fwz9bai1wf9j11rjv2z0zlv7ich87q9kkjk" 244 | } 245 | }, 246 | "hosted/pub.dev/flutter_template_images-4.2.0": { 247 | "fetcher": "fetchzip", 248 | "args": { 249 | "name": "pub-flutter_template_images-4.2.0", 250 | "url": "https://pub.dev/packages/flutter_template_images/versions/4.2.0.tar.gz", 251 | "stripRoot": false, 252 | "sha256": "1b98hfljp8xip4k6yr8hpcsnr7p0437wya2m25nqwbli3xzslw04" 253 | } 254 | }, 255 | "hosted/pub.dev/frontend_server_client-3.1.0": { 256 | "fetcher": "fetchzip", 257 | "args": { 258 | "name": "pub-frontend_server_client-3.1.0", 259 | "url": "https://pub.dev/packages/frontend_server_client/versions/3.1.0.tar.gz", 260 | "stripRoot": false, 261 | "sha256": "0nv4avkv2if9hdcfzckz36f3mclv7vxchivrg8j3miaqhnjvv4bj" 262 | } 263 | }, 264 | "hosted/pub.dev/glob-2.1.1": { 265 | "fetcher": "fetchzip", 266 | "args": { 267 | "name": "pub-glob-2.1.1", 268 | "url": "https://pub.dev/packages/glob/versions/2.1.1.tar.gz", 269 | "stripRoot": false, 270 | "sha256": "1a6vicag8xg6lwr1jdiyjx00lg6n4bgadlzpbl4izpcgp2gcs0sb" 271 | } 272 | }, 273 | "hosted/pub.dev/html-0.15.1": { 274 | "fetcher": "fetchzip", 275 | "args": { 276 | "name": "pub-html-0.15.1", 277 | "url": "https://pub.dev/packages/html/versions/0.15.1.tar.gz", 278 | "stripRoot": false, 279 | "sha256": "1dcda7hlqc3kji4gdj8dlhhn7xx1lmgmxk9ggd9vlcqkcwm00php" 280 | } 281 | }, 282 | "hosted/pub.dev/http-0.13.5": { 283 | "fetcher": "fetchzip", 284 | "args": { 285 | "name": "pub-http-0.13.5", 286 | "url": "https://pub.dev/packages/http/versions/0.13.5.tar.gz", 287 | "stripRoot": false, 288 | "sha256": "10zwf9j31g5qpzkf306wlkjkhkzhknf2a8fwxh1qvy3w317cgdfw" 289 | } 290 | }, 291 | "hosted/pub.dev/http_multi_server-3.2.1": { 292 | "fetcher": "fetchzip", 293 | "args": { 294 | "name": "pub-http_multi_server-3.2.1", 295 | "url": "https://pub.dev/packages/http_multi_server/versions/3.2.1.tar.gz", 296 | "stripRoot": false, 297 | "sha256": "1zdcm04z85jahb2hs7qs85rh974kw49hffhy9cn1gfda3077dvql" 298 | } 299 | }, 300 | "hosted/pub.dev/http_parser-4.0.2": { 301 | "fetcher": "fetchzip", 302 | "args": { 303 | "name": "pub-http_parser-4.0.2", 304 | "url": "https://pub.dev/packages/http_parser/versions/4.0.2.tar.gz", 305 | "stripRoot": false, 306 | "sha256": "027c4sjkhkkx3sk1aqs6s4djb87syi9h521qpm1bf21bq3gga5jd" 307 | } 308 | }, 309 | "hosted/pub.dev/intl-0.17.0": { 310 | "fetcher": "fetchzip", 311 | "args": { 312 | "name": "pub-intl-0.17.0", 313 | "url": "https://pub.dev/packages/intl/versions/0.17.0.tar.gz", 314 | "stripRoot": false, 315 | "sha256": "1hn6bi59vqjn49ck3qxzlyvwb2vy0g5wb0ax57xpbliwrl5zrhb9" 316 | } 317 | }, 318 | "hosted/pub.dev/io-1.0.3": { 319 | "fetcher": "fetchzip", 320 | "args": { 321 | "name": "pub-io-1.0.3", 322 | "url": "https://pub.dev/packages/io/versions/1.0.3.tar.gz", 323 | "stripRoot": false, 324 | "sha256": "1bp5l8hkrp6fjj7zw9af51hxyp52sjspc5558lq0lmi453l0czni" 325 | } 326 | }, 327 | "hosted/pub.dev/js-0.6.5": { 328 | "fetcher": "fetchzip", 329 | "args": { 330 | "name": "pub-js-0.6.5", 331 | "url": "https://pub.dev/packages/js/versions/0.6.5.tar.gz", 332 | "stripRoot": false, 333 | "sha256": "13fbxgyg1v6bmzvxamg6494vk3923fn3mgxj6f4y476aqwk99n50" 334 | } 335 | }, 336 | "hosted/pub.dev/json_rpc_2-3.0.2": { 337 | "fetcher": "fetchzip", 338 | "args": { 339 | "name": "pub-json_rpc_2-3.0.2", 340 | "url": "https://pub.dev/packages/json_rpc_2/versions/3.0.2.tar.gz", 341 | "stripRoot": false, 342 | "sha256": "1wc4xajpycq5ldaapfbaf224139z1bh9jbr8g7msaza8c4yyjc2l" 343 | } 344 | }, 345 | "hosted/pub.dev/logging-1.1.0": { 346 | "fetcher": "fetchzip", 347 | "args": { 348 | "name": "pub-logging-1.1.0", 349 | "url": "https://pub.dev/packages/logging/versions/1.1.0.tar.gz", 350 | "stripRoot": false, 351 | "sha256": "0f5gwba77hc1ksvfhlqwi9x62gxf57h80iny0jp7ab52npk8z6gw" 352 | } 353 | }, 354 | "hosted/pub.dev/matcher-0.12.13": { 355 | "fetcher": "fetchzip", 356 | "args": { 357 | "name": "pub-matcher-0.12.13", 358 | "url": "https://pub.dev/packages/matcher/versions/0.12.13.tar.gz", 359 | "stripRoot": false, 360 | "sha256": "0pjgc38clnjbv124n8bh724db1wcc4kk125j7dxl0icz7clvm0p0" 361 | } 362 | }, 363 | "hosted/pub.dev/material_color_utilities-0.2.0": { 364 | "fetcher": "fetchzip", 365 | "args": { 366 | "name": "pub-material_color_utilities-0.2.0", 367 | "url": "https://pub.dev/packages/material_color_utilities/versions/0.2.0.tar.gz", 368 | "stripRoot": false, 369 | "sha256": "1ibynby90nk5vriv91jqpgbiijcsn44lx9fzlwma1p7aac9v7sm5" 370 | } 371 | }, 372 | "hosted/pub.dev/meta-1.8.0": { 373 | "fetcher": "fetchzip", 374 | "args": { 375 | "name": "pub-meta-1.8.0", 376 | "url": "https://pub.dev/packages/meta/versions/1.8.0.tar.gz", 377 | "stripRoot": false, 378 | "sha256": "01kqdd25nln5a219pr94s66p27m0kpqz0wpmwnm24kdy3ngif1v5" 379 | } 380 | }, 381 | "hosted/pub.dev/mime-1.0.2": { 382 | "fetcher": "fetchzip", 383 | "args": { 384 | "name": "pub-mime-1.0.2", 385 | "url": "https://pub.dev/packages/mime/versions/1.0.2.tar.gz", 386 | "stripRoot": false, 387 | "sha256": "1dr3qikzvp10q1saka7azki5gk2kkf2v7k9wfqjsyxmza2zlv896" 388 | } 389 | }, 390 | "hosted/pub.dev/mockito-5.4.0": { 391 | "fetcher": "fetchzip", 392 | "args": { 393 | "name": "pub-mockito-5.4.0", 394 | "url": "https://pub.dev/packages/mockito/versions/5.4.0.tar.gz", 395 | "stripRoot": false, 396 | "sha256": "1wbx6dfv8hj7hgaraxxln56r0zb7dvqiz34y8n48cxca6a6qpc19" 397 | } 398 | }, 399 | "hosted/pub.dev/multicast_dns-0.3.2+2": { 400 | "fetcher": "fetchzip", 401 | "args": { 402 | "name": "pub-multicast_dns-0.3.2+2", 403 | "url": "https://pub.dev/packages/multicast_dns/versions/0.3.2+2.tar.gz", 404 | "stripRoot": false, 405 | "sha256": "10k994f2pk5yysg869yjc9k6zqg4yqfq7yjslyxnhv8cf3yaf5h5" 406 | } 407 | }, 408 | "hosted/pub.dev/mustache_template-2.0.0": { 409 | "fetcher": "fetchzip", 410 | "args": { 411 | "name": "pub-mustache_template-2.0.0", 412 | "url": "https://pub.dev/packages/mustache_template/versions/2.0.0.tar.gz", 413 | "stripRoot": false, 414 | "sha256": "0dl4xcnaab8y7dj0n8dv339d6a92i4d31zy8nn6yzawb67x32jcz" 415 | } 416 | }, 417 | "hosted/pub.dev/native_stack_traces-0.5.2": { 418 | "fetcher": "fetchzip", 419 | "args": { 420 | "name": "pub-native_stack_traces-0.5.2", 421 | "url": "https://pub.dev/packages/native_stack_traces/versions/0.5.2.tar.gz", 422 | "stripRoot": false, 423 | "sha256": "0g81rp6569ynlilvam9ry0sf1cp03pzac9xdqh9s57pfr2m1227k" 424 | } 425 | }, 426 | "hosted/pub.dev/node_preamble-2.0.2": { 427 | "fetcher": "fetchzip", 428 | "args": { 429 | "name": "pub-node_preamble-2.0.2", 430 | "url": "https://pub.dev/packages/node_preamble/versions/2.0.2.tar.gz", 431 | "stripRoot": false, 432 | "sha256": "12ajg76r9aqmqkavvlxbnb3sszg1szcq3f30badkd0xc25mnhyh8" 433 | } 434 | }, 435 | "hosted/pub.dev/package_config-2.1.0": { 436 | "fetcher": "fetchzip", 437 | "args": { 438 | "name": "pub-package_config-2.1.0", 439 | "url": "https://pub.dev/packages/package_config/versions/2.1.0.tar.gz", 440 | "stripRoot": false, 441 | "sha256": "1d4l0i4cby344zj45f5shrg2pkw1i1jn03kx0qqh0l7gh1ha7bpc" 442 | } 443 | }, 444 | "hosted/pub.dev/path-1.8.2": { 445 | "fetcher": "fetchzip", 446 | "args": { 447 | "name": "pub-path-1.8.2", 448 | "url": "https://pub.dev/packages/path/versions/1.8.2.tar.gz", 449 | "stripRoot": false, 450 | "sha256": "16ggdh29ciy7h8sdshhwmxn6dd12sfbykf2j82c56iwhhlljq181" 451 | } 452 | }, 453 | "hosted/pub.dev/pedantic-1.11.1": { 454 | "fetcher": "fetchzip", 455 | "args": { 456 | "name": "pub-pedantic-1.11.1", 457 | "url": "https://pub.dev/packages/pedantic/versions/1.11.1.tar.gz", 458 | "stripRoot": false, 459 | "sha256": "10ch0h3hi6cfwiz2ihfkh6m36m75c0m7fd0wwqaqggffsj2dn8ad" 460 | } 461 | }, 462 | "hosted/pub.dev/petitparser-5.1.0": { 463 | "fetcher": "fetchzip", 464 | "args": { 465 | "name": "pub-petitparser-5.1.0", 466 | "url": "https://pub.dev/packages/petitparser/versions/5.1.0.tar.gz", 467 | "stripRoot": false, 468 | "sha256": "1pqqqqiy9ald24qsi24q9qrr0zphgpsrnrv9rlx4vwr6xak7d8c0" 469 | } 470 | }, 471 | "hosted/pub.dev/platform-3.1.0": { 472 | "fetcher": "fetchzip", 473 | "args": { 474 | "name": "pub-platform-3.1.0", 475 | "url": "https://pub.dev/packages/platform/versions/3.1.0.tar.gz", 476 | "stripRoot": false, 477 | "sha256": "1wzc3gb4ni6amkr50g7n3s7lg8mx50wlh55inqj8ig81r0pi24hs" 478 | } 479 | }, 480 | "hosted/pub.dev/pool-1.5.1": { 481 | "fetcher": "fetchzip", 482 | "args": { 483 | "name": "pub-pool-1.5.1", 484 | "url": "https://pub.dev/packages/pool/versions/1.5.1.tar.gz", 485 | "stripRoot": false, 486 | "sha256": "0wmzs46hjszv3ayhr1p5l7xza7q9rkg2q9z4swmhdqmhlz3c50x4" 487 | } 488 | }, 489 | "hosted/pub.dev/process-4.2.4": { 490 | "fetcher": "fetchzip", 491 | "args": { 492 | "name": "pub-process-4.2.4", 493 | "url": "https://pub.dev/packages/process/versions/4.2.4.tar.gz", 494 | "stripRoot": false, 495 | "sha256": "0dlkghbjy76vl244q73cn6fg3732k8y0pk50hx9i96lakyp6ipsy" 496 | } 497 | }, 498 | "hosted/pub.dev/pub_semver-2.1.3": { 499 | "fetcher": "fetchzip", 500 | "args": { 501 | "name": "pub-pub_semver-2.1.3", 502 | "url": "https://pub.dev/packages/pub_semver/versions/2.1.3.tar.gz", 503 | "stripRoot": false, 504 | "sha256": "10hdhsb2ikzzsfqclp4ydjsj73jpq695apx2rgyjri2l9i9inn86" 505 | } 506 | }, 507 | "hosted/pub.dev/shelf-1.4.0": { 508 | "fetcher": "fetchzip", 509 | "args": { 510 | "name": "pub-shelf-1.4.0", 511 | "url": "https://pub.dev/packages/shelf/versions/1.4.0.tar.gz", 512 | "stripRoot": false, 513 | "sha256": "0x2xl7glrnq0hdxpy2i94a4wxbdrd6dm46hvhzgjn8alsm8z0wz1" 514 | } 515 | }, 516 | "hosted/pub.dev/shelf_packages_handler-3.0.1": { 517 | "fetcher": "fetchzip", 518 | "args": { 519 | "name": "pub-shelf_packages_handler-3.0.1", 520 | "url": "https://pub.dev/packages/shelf_packages_handler/versions/3.0.1.tar.gz", 521 | "stripRoot": false, 522 | "sha256": "199rbdbifj46lg3iynznnsbs8zr4dfcw0s7wan8v73nvpqvli82q" 523 | } 524 | }, 525 | "hosted/pub.dev/shelf_proxy-1.0.2": { 526 | "fetcher": "fetchzip", 527 | "args": { 528 | "name": "pub-shelf_proxy-1.0.2", 529 | "url": "https://pub.dev/packages/shelf_proxy/versions/1.0.2.tar.gz", 530 | "stripRoot": false, 531 | "sha256": "0i9dhbiijy14zv3g6k554y1n0sjsnvjrrci2rsjrl0jlrm66ifiv" 532 | } 533 | }, 534 | "hosted/pub.dev/shelf_static-1.1.1": { 535 | "fetcher": "fetchzip", 536 | "args": { 537 | "name": "pub-shelf_static-1.1.1", 538 | "url": "https://pub.dev/packages/shelf_static/versions/1.1.1.tar.gz", 539 | "stripRoot": false, 540 | "sha256": "1kqbaslz7bna9lldda3ibrjg0gczbzlwgm9cic8shg0bnl0v3s34" 541 | } 542 | }, 543 | "hosted/pub.dev/shelf_web_socket-1.0.3": { 544 | "fetcher": "fetchzip", 545 | "args": { 546 | "name": "pub-shelf_web_socket-1.0.3", 547 | "url": "https://pub.dev/packages/shelf_web_socket/versions/1.0.3.tar.gz", 548 | "stripRoot": false, 549 | "sha256": "0rr87nx2wdf9alippxiidqlgi82fbprnsarr1jswg9qin0yy4jpn" 550 | } 551 | }, 552 | "hosted/pub.dev/source_gen-1.3.0": { 553 | "fetcher": "fetchzip", 554 | "args": { 555 | "name": "pub-source_gen-1.3.0", 556 | "url": "https://pub.dev/packages/source_gen/versions/1.3.0.tar.gz", 557 | "stripRoot": false, 558 | "sha256": "0yfnga95m1j8fqjmils605yp1jly5jd0x9v6g05kmrq5cynkx7a1" 559 | } 560 | }, 561 | "hosted/pub.dev/source_map_stack_trace-2.1.1": { 562 | "fetcher": "fetchzip", 563 | "args": { 564 | "name": "pub-source_map_stack_trace-2.1.1", 565 | "url": "https://pub.dev/packages/source_map_stack_trace/versions/2.1.1.tar.gz", 566 | "stripRoot": false, 567 | "sha256": "0b5d4c5n5qd3j8n10gp1khhr508wfl3819bhk6xnl34qxz8n032k" 568 | } 569 | }, 570 | "hosted/pub.dev/source_maps-0.10.11": { 571 | "fetcher": "fetchzip", 572 | "args": { 573 | "name": "pub-source_maps-0.10.11", 574 | "url": "https://pub.dev/packages/source_maps/versions/0.10.11.tar.gz", 575 | "stripRoot": false, 576 | "sha256": "18ixrlz3l2alk3hp0884qj0mcgzhxmjpg6nq0n1200pfy62pc4z6" 577 | } 578 | }, 579 | "hosted/pub.dev/source_span-1.9.1": { 580 | "fetcher": "fetchzip", 581 | "args": { 582 | "name": "pub-source_span-1.9.1", 583 | "url": "https://pub.dev/packages/source_span/versions/1.9.1.tar.gz", 584 | "stripRoot": false, 585 | "sha256": "1lq4sy7lw15qsv9cijf6l48p16qr19r7njzwr4pxn8vv1kh6rb86" 586 | } 587 | }, 588 | "hosted/pub.dev/sse-4.1.1": { 589 | "fetcher": "fetchzip", 590 | "args": { 591 | "name": "pub-sse-4.1.1", 592 | "url": "https://pub.dev/packages/sse/versions/4.1.1.tar.gz", 593 | "stripRoot": false, 594 | "sha256": "0srsipzgnv7lbylaz4w7r1m7vn3yq6861h4f9rhn47qm2lfm9xd9" 595 | } 596 | }, 597 | "hosted/pub.dev/stack_trace-1.11.0": { 598 | "fetcher": "fetchzip", 599 | "args": { 600 | "name": "pub-stack_trace-1.11.0", 601 | "url": "https://pub.dev/packages/stack_trace/versions/1.11.0.tar.gz", 602 | "stripRoot": false, 603 | "sha256": "0bggqvvpkrfvqz24bnir4959k0c45azc3zivk4lyv3mvba6092na" 604 | } 605 | }, 606 | "hosted/pub.dev/stream_channel-2.1.1": { 607 | "fetcher": "fetchzip", 608 | "args": { 609 | "name": "pub-stream_channel-2.1.1", 610 | "url": "https://pub.dev/packages/stream_channel/versions/2.1.1.tar.gz", 611 | "stripRoot": false, 612 | "sha256": "054by84c60yxphr3qgg6f82gg6d22a54aqjp265anlm8dwz1ji32" 613 | } 614 | }, 615 | "hosted/pub.dev/string_scanner-1.2.0": { 616 | "fetcher": "fetchzip", 617 | "args": { 618 | "name": "pub-string_scanner-1.2.0", 619 | "url": "https://pub.dev/packages/string_scanner/versions/1.2.0.tar.gz", 620 | "stripRoot": false, 621 | "sha256": "0p1r0v2923avwfg03rk0pmc6f21m0zxpcx6i57xygd25k6hdfi00" 622 | } 623 | }, 624 | "hosted/pub.dev/sync_http-0.3.1": { 625 | "fetcher": "fetchzip", 626 | "args": { 627 | "name": "pub-sync_http-0.3.1", 628 | "url": "https://pub.dev/packages/sync_http/versions/0.3.1.tar.gz", 629 | "stripRoot": false, 630 | "sha256": "12ywdfknsmncn6c4241jgi8di2i3dqjjp7fbyrxkfmhf653gw6di" 631 | } 632 | }, 633 | "hosted/pub.dev/term_glyph-1.2.1": { 634 | "fetcher": "fetchzip", 635 | "args": { 636 | "name": "pub-term_glyph-1.2.1", 637 | "url": "https://pub.dev/packages/term_glyph/versions/1.2.1.tar.gz", 638 | "stripRoot": false, 639 | "sha256": "1x8nspxaccls0sxjamp703yp55yxdvhj6wg21lzwd296i9rwlxh9" 640 | } 641 | }, 642 | "hosted/pub.dev/test-1.22.0": { 643 | "fetcher": "fetchzip", 644 | "args": { 645 | "name": "pub-test-1.22.0", 646 | "url": "https://pub.dev/packages/test/versions/1.22.0.tar.gz", 647 | "stripRoot": false, 648 | "sha256": "08kimbjvkdw3bkj7za36p3yqdr8dnlb5v30c250kvdncb7k09h4x" 649 | } 650 | }, 651 | "hosted/pub.dev/test_api-0.4.16": { 652 | "fetcher": "fetchzip", 653 | "args": { 654 | "name": "pub-test_api-0.4.16", 655 | "url": "https://pub.dev/packages/test_api/versions/0.4.16.tar.gz", 656 | "stripRoot": false, 657 | "sha256": "0mfyjpqkkmaqdh7xygrydx12591wq9ll816f61n80dc6rmkdx7px" 658 | } 659 | }, 660 | "hosted/pub.dev/test_core-0.4.20": { 661 | "fetcher": "fetchzip", 662 | "args": { 663 | "name": "pub-test_core-0.4.20", 664 | "url": "https://pub.dev/packages/test_core/versions/0.4.20.tar.gz", 665 | "stripRoot": false, 666 | "sha256": "1r8dnvkxxvh55z1c8lrsja1m0dkf5i4lgwwqixcx0mqvxx5w3005" 667 | } 668 | }, 669 | "hosted/pub.dev/typed_data-1.3.1": { 670 | "fetcher": "fetchzip", 671 | "args": { 672 | "name": "pub-typed_data-1.3.1", 673 | "url": "https://pub.dev/packages/typed_data/versions/1.3.1.tar.gz", 674 | "stripRoot": false, 675 | "sha256": "1x402bvyzdmdvmyqhyfamjxf54p9j8sa8ns2n5dwsdhnfqbw859g" 676 | } 677 | }, 678 | "hosted/pub.dev/usage-4.1.0": { 679 | "fetcher": "fetchzip", 680 | "args": { 681 | "name": "pub-usage-4.1.0", 682 | "url": "https://pub.dev/packages/usage/versions/4.1.0.tar.gz", 683 | "stripRoot": false, 684 | "sha256": "0x5nqjilcfjl4w0532iycxqrgprayv1r27lbb30hyprk2sxg6s7a" 685 | } 686 | }, 687 | "hosted/pub.dev/uuid-3.0.7": { 688 | "fetcher": "fetchzip", 689 | "args": { 690 | "name": "pub-uuid-3.0.7", 691 | "url": "https://pub.dev/packages/uuid/versions/3.0.7.tar.gz", 692 | "stripRoot": false, 693 | "sha256": "1nh1hxfr6bhyadqqcxrpwrphmm75f1iq4rzfjdwa2486xwlh7vx3" 694 | } 695 | }, 696 | "hosted/pub.dev/vector_math-2.1.4": { 697 | "fetcher": "fetchzip", 698 | "args": { 699 | "name": "pub-vector_math-2.1.4", 700 | "url": "https://pub.dev/packages/vector_math/versions/2.1.4.tar.gz", 701 | "stripRoot": false, 702 | "sha256": "1rkpldi01mhhkgx315rrr6hnj48jilxy62v7rfzarf504pz4klmy" 703 | } 704 | }, 705 | "hosted/pub.dev/vm_service-9.4.0": { 706 | "fetcher": "fetchzip", 707 | "args": { 708 | "name": "pub-vm_service-9.4.0", 709 | "url": "https://pub.dev/packages/vm_service/versions/9.4.0.tar.gz", 710 | "stripRoot": false, 711 | "sha256": "05xaxaxzyfls6jklw1hzws2jmina1cjk10gbl7a63djh1ghnzjb5" 712 | } 713 | }, 714 | "hosted/pub.dev/vm_snapshot_analysis-0.7.2": { 715 | "fetcher": "fetchzip", 716 | "args": { 717 | "name": "pub-vm_snapshot_analysis-0.7.2", 718 | "url": "https://pub.dev/packages/vm_snapshot_analysis/versions/0.7.2.tar.gz", 719 | "stripRoot": false, 720 | "sha256": "0k7rxlnwpnxvdv0n2ndhv1r6vwgknqmg9lpl7dbgb69x10zfpkcp" 721 | } 722 | }, 723 | "hosted/pub.dev/watcher-1.0.2": { 724 | "fetcher": "fetchzip", 725 | "args": { 726 | "name": "pub-watcher-1.0.2", 727 | "url": "https://pub.dev/packages/watcher/versions/1.0.2.tar.gz", 728 | "stripRoot": false, 729 | "sha256": "1sk7gvwa7s0h4l652qrgbh7l8wyqc6nr6lki8m4rj55720p0fnyg" 730 | } 731 | }, 732 | "hosted/pub.dev/web_socket_channel-2.2.0": { 733 | "fetcher": "fetchzip", 734 | "args": { 735 | "name": "pub-web_socket_channel-2.2.0", 736 | "url": "https://pub.dev/packages/web_socket_channel/versions/2.2.0.tar.gz", 737 | "stripRoot": false, 738 | "sha256": "147amn05v1f1a1grxjr7yzgshrczjwijwiywggsv6dgic8kxyj5a" 739 | } 740 | }, 741 | "hosted/pub.dev/webdriver-3.0.1": { 742 | "fetcher": "fetchzip", 743 | "args": { 744 | "name": "pub-webdriver-3.0.1", 745 | "url": "https://pub.dev/packages/webdriver/versions/3.0.1.tar.gz", 746 | "stripRoot": false, 747 | "sha256": "096kiz0irqpxxcgz785d2j6whb6x7v93fp8qh4madzdxbmxwp33p" 748 | } 749 | }, 750 | "hosted/pub.dev/webkit_inspection_protocol-1.2.0": { 751 | "fetcher": "fetchzip", 752 | "args": { 753 | "name": "pub-webkit_inspection_protocol-1.2.0", 754 | "url": "https://pub.dev/packages/webkit_inspection_protocol/versions/1.2.0.tar.gz", 755 | "stripRoot": false, 756 | "sha256": "0z400dzw7gf68a3wm95xi2mf461iigkyq6x69xgi7qs3fvpmn3hx" 757 | } 758 | }, 759 | "hosted/pub.dev/xml-6.2.2": { 760 | "fetcher": "fetchzip", 761 | "args": { 762 | "name": "pub-xml-6.2.2", 763 | "url": "https://pub.dev/packages/xml/versions/6.2.2.tar.gz", 764 | "stripRoot": false, 765 | "sha256": "0nm6mrn6phyj9lv1k8cvfsshva862490vawy05n8xc2wg1dbf1jl" 766 | } 767 | }, 768 | "hosted/pub.dev/yaml-3.1.1": { 769 | "fetcher": "fetchzip", 770 | "args": { 771 | "name": "pub-yaml-3.1.1", 772 | "url": "https://pub.dev/packages/yaml/versions/3.1.1.tar.gz", 773 | "stripRoot": false, 774 | "sha256": "0mqqmzn3c9rr38b5xm312fz1vyp6vb36lm477r9hak77bxzpp0iw" 775 | } 776 | } 777 | } 778 | } --------------------------------------------------------------------------------