minimal working dev env

This commit is contained in:
Dmitriy Kholkin 2022-08-01 18:49:29 +03:00
parent 0400bb6247
commit d3f2d1c0b4
Signed by: AtaraxiaDev
GPG Key ID: FD266B810DF48DF2

229
flake.nix
View File

@ -1,84 +1,161 @@
{ {
outputs = { self }: { description = "Flutter FHS Environment";
templates.android = { inputs = {
path = ./android; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
description = flutter-nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
"A flake for getting a dev shell with Android SDK & Flutter using flutter-flake"; devshell = {
url = "github:numtide/devshell";
inputs.nixpkgs.follows = "nixpkgs";
}; };
lib = let android-nixpkgs = {
optional = q: x: optList q [ x ]; url = "github:tadfisher/android-nixpkgs";
optList = q: xs: if q then xs else [ ]; inputs.nixpkgs.follows = "nixpkgs";
optStr = q: str: };
if q then '' };
${str}
'' else
"";
guard = q: k: if q then k else null;
in { outputs = { self, nixpkgs, flutter-nixpkgs, devshell, android-nixpkgs }: {
get-devShell = { nixpkgs, pkgs ? import nixpkgs { getShell = {
pkgs ? import nixpkgs {
inherit system; inherit system;
config = nixpkgsConfig; config = nixpkgsConfig // {
}, system, nixpkgsConfig ? { }, enable-android ? false allowUnfree = true;
, enable-linuxDesktop ? false, enable-web ? false android_sdk.accept_license = true;
, enable-windowsDesktop ? false, enable-macDesktop ? false };
, enable-ios ? false, extra-deps ? [ ], androidConfig ? { } overlays = [ devshell.overlay ];
, chromeExecutable ? pkgs.ungoogled-chromium + "/bin/chromium" }: }
, flutter-pkgs ? import flutter-nixpkgs {
inherit system;
}
, name ? "flutter-project", system, nixpkgsConfig ? { }
, enable-android ? false, enable-ios ? false
, enable-linuxDesktop ? false, enable-web ? false
, enable-windowsDesktop ? false, enable-macDesktop ? false
, extra-deps ? [ ], extra-libs ? [ ], jdk ? pkgs.jdk11
, chromeExecutable ? pkgs.ungoogled-chromium + "/bin/chromium"
, android-sdk ? android-nixpkgs.sdk.${system} (sdkPkgs: with sdkPkgs; [
cmdline-tools-latest
build-tools-30-0-3
emulator
patcher-v4
platform-tools
platforms-android-31
])
}: with pkgs; let
optList = q: xs: if q then xs else [ ];
linuxLibs = [
at-spi2-atk
at-spi2-core
dbus
atk
bzip2
cairo
epoxy
expat
fontconfig
freetype
fribidi
gdk-pixbuf
glib
graphite2
gtk3
harfbuzz
libGL
libdatrie
libffi
libjpeg
libpng
libselinux
libsepol
libthai
libtiff
libuuid
libxkbcommon
pango
pcre
pixman
wayland
xorg.libX11
xorg.libXau
xorg.libXcomposite
xorg.libXcursor
xorg.libXdmcp
xorg.libXext
xorg.libXfixes
xorg.libXft
xorg.libXi
xorg.libXinerama
xorg.libXrandr
xorg.libXrender
xorg.libxcb
xorg.xorgproto
zlib
];
let flutter-deps = optList enable-android [
androidComposition = pkgs.androidenv.composeAndroidPackages { android-sdk
platformToolsVersion = "31.0.3"; gradle
toolsVersion = "26.1.1"; jdk
includeEmulator = true; ] ++ optList enable-linuxDesktop [
} // androidConfig; clang
cmake
flutter-deps = optional enable-android androidComposition.androidsdk ninja
++ optList enable-linuxDesktop (with pkgs; [ pkg-config
clang ]
cmake ++ optList enable-linuxDesktop (map lib.getLib linuxLibs)
ninja ++ optList enable-linuxDesktop (map lib.getDev linuxLibs)
pkg-config ++ (map lib.getLib extra-libs) ++ (map lib.getDev extra-libs);
# libs: in pkgs.devshell.mkShell {
atk name = name;
cairo env = [
epoxy {
gdk-pixbuf name = "PATH";
glib prefix = "$HOME/.pub-cache/bin";
gtk3 }
harfbuzz {
pango name = "PATH";
pcre prefix = "${flutter-pkgs.flutter}/bin/cache/dart-sdk/bin";
xorg.libX11.dev }
xorg.xorgproto ] ++ optList enable-android [
]); {
name = "ANDROID_HOME";
flutter-fhs = pkgs.buildFHSUserEnv { value = "${android-sdk}/share/android-sdk";
name = "flutter"; }
targetPkgs = (_: flutter-deps); {
runScript = pkgs.flutter + "/bin/flutter"; name = "ANDROID_SDK_ROOT";
}; value = "${android-sdk}/share/android-sdk";
}
in if enable-ios || enable-macDesktop || enable-windowsDesktop then {
builtins.throw '' name = "JAVA_HOME";
iOS, macOS and Windows are not supported currently. Feel free to contribute. value = jdk.home;
'' }
else ] ++ optList enable-linuxDesktop [
assert !enable-ios; {
assert !enable-macDesktop; name = "LD_LIBRARY_PATH";
assert !enable-windowsDesktop; prefix = "$DEVSHELL_DIR/lib";
pkgs.mkShell { }
packages = with pkgs; [ flutter-fhs ] ++ flutter-deps; {
shellHook = optStr enable-android '' name = "C_INCLUDE_PATH";
flutter config --enable-android prefix = "$DEVSHELL_DIR/include";
flutter config --android-sdk ${androidComposition.androidsdk}/libexec/android-sdk }
'' + optStr enable-linuxDesktop '' {
flutter config --enable-linux-desktop name = "CPLUS_INCLUDE_PATH";
'' + optStr enable-web '' prefix = "$DEVSHELL_DIR/include";
export CHROME_EXECUTABLE=${chromeExecutable} }
''; {
CPATH = optStr enable-linuxDesktop "${pkgs.xorg.libX11.dev}/include:${pkgs.xorg.xorgproto}/include:${pkgs.epoxy}/lib"; name = "PKG_CONFIG_PATH";
LD_LIBRARY_PATH = with pkgs; lib.optionals enable-linuxDesktop pkgs.lib.makeLibraryPath [ epoxy gtk3 pango harfbuzz atk cairo gdk-pixbuf glib ]; prefix = "$DEVSHELL_DIR/lib/pkgconfig";
}; }
{
name = "CMAKE_PREFIX_PATH";
prefix = "$DEVSHELL_DIR";
}
] ++ optList enable-web [
{
name = "CHROME_EXECUTABLE";
value = chromeExecutable;
}
];
packages = [ flutter-pkgs.flutter ] ++ flutter-deps ++ extra-deps;
}; };
}; };
} }