minimal working dev env
This commit is contained in:
parent
0400bb6247
commit
d3f2d1c0b4
229
flake.nix
229
flake.nix
@ -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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user