Initial commit

This commit is contained in:
Anselm Schüler 2022-05-09 18:31:18 +02:00
commit b48afe877e
3 changed files with 84 additions and 0 deletions

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# flutter-flake
This is a flake that configures Flutter for you.
It was created because I hated configuring Android for Flutter. Its currently mostly made to do that.
Feel free to open a PR if you want to add MacOS support or something.
This isnt well tested. If youre a flutter developer, please report any (potentially glaringly obvious) problems.

17
android/flake.nix Normal file
View File

@ -0,0 +1,17 @@
{
inputs = {
flutter-flake.url = "github:schuelermine/flutter-flake/b0";
flake-utils.url = "github:numtide/flake-utils/master";
};
outputs = { self, nixpkgs, flutter-flake, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: {
devShells.default = flutter-flake.lib.get-devShell {
inherit nixpkgs system;
enable-android = true;
nixpkgsConfig = {
allowUnfree = true;
android_sdk.accept_license = true;
};
};
});
}

58
flake.nix Normal file
View File

@ -0,0 +1,58 @@
{
outputs = { self }: {
templates.android = {
path = ./android;
description =
"A flake for getting a dev shell with Android SDK & Flutter using flutter-flake";
};
lib = let
optional = q: x: optList q [ x ];
optList = q: xs: if q then xs else [ ];
optStr = q: str:
if q then ''
${str}
'' else
"";
guard = q: k: if q then k else null;
in {
get-devShell = { nixpkgs, pkgs ? import nixpkgs {
inherit system;
config = nixpkgsConfig;
}, system, nixpkgsConfig ? { }, enable-android ? false
, enable-linuxDesktop ? false, enable-web ? true
, enable-windowsDesktop ? false, enable-macDesktop ? false
, enable-ios ? false
, chromeExecutable ? pkgs.ungoogled-chromium + "/bin/chromium" }:
let
androidComposition = pkgs.androidenv.composeAndroidPackages {
platformToolsVersion = "31.0.3";
toolsVersion = "26.1.1";
};
flutter-deps = optional enable-android androidComposition.androidsdk
++ optList enable-linuxDesktop
(with pkgs; [ clang cmake ninja pkg-config gtk3 ]);
flutter-fhs = pkgs.buildFHSUserEnv {
name = "flutter";
targetPkgs = (_: flutter-deps);
runScript = pkgs.flutter + "/bin/flutter";
};
in if enable-ios || enable-macDesktop || enable-windowsDesktop then
builtins.throw ''
iOS, macOS and Windows are not supported currently. Feel free to contribute.
''
else
pkgs.mkShell {
packages = with pkgs; [ flutter-fhs ] ++ flutter-deps;
${guard enable-web "CHROME_EXECUTABLE"} = chromeExecutable;
shellHook = optStr enable-android ''
flutter config --android-sdk ${androidComposition.androidsdk}/libexec/android-sdk
'';
};
};
};
}