flutter-flake/flake.nix

59 lines
1.9 KiB
Nix
Raw Normal View History

2022-05-09 18:31:18 +02:00
{
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
'';
};
};
};
}