on master help sign in
crush-android/flake.nix
71 lines 2.4 kB history raw
1{
2 description = "Dev environment for crush-android (Kotlin / Jetpack Compose client for the crush server API)";
4 inputs = {
5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6 flake-utils.url = "github:numtide/flake-utils";
7 };
9 outputs = { self, nixpkgs, flake-utils }:
10 flake-utils.lib.eachDefaultSystem (system:
11 let
12 # Versions kept in sync with the Gradle project (compileSdk / build-tools).
13 platformVersion = "37";
14 buildToolsVersion = "37.0.0";
16 pkgs = import nixpkgs {
17 inherit system;
18 config = {
19 allowUnfree = true; # Android SDK is unfree
20 android_sdk.accept_license = true;
21 };
22 };
24 android = pkgs.androidenv.composeAndroidPackages {
25 platformVersions = [ platformVersion ];
26 buildToolsVersions = [ buildToolsVersion ];
27 cmdLineToolsVersion = "latest";
29 # Flip these on if the host has /dev/kvm and you want an AVD.
30 includeEmulator = false;
31 includeSystemImages = false;
32 systemImageTypes = [ "google_apis" ];
33 abiVersions = [ "x86_64" ];
35 includeNDK = false;
36 };
38 sdk = android.androidsdk;
39 sdkRoot = "${sdk}/libexec/android-sdk";
41 # Gradle's bundled aapt2 binary is dynamically linked against a loader
42 # path that does not exist on NixOS, so it segfaults. Point Gradle and
43 # Android Studio at the Nix-built aapt2 instead.
44 aapt2Path = "${sdkRoot}/build-tools/${buildToolsVersion}/aapt2";
45 in {
46 devShells.default = pkgs.mkShell {
47 buildInputs = [
48 pkgs.jdk17
49 pkgs.gradle
50 sdk
51 ];
53 ANDROID_HOME = sdkRoot;
54 ANDROID_SDK_ROOT = sdkRoot;
55 JAVA_HOME = "${pkgs.jdk17}";
57 # Override Gradle's bundled aapt2 (see note above).
58 GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${aapt2Path}";
60 shellHook = ''
61 echo "crush-android dev shell"
62 echo " JDK: $(java -version 2>&1 | head -1)"
63 echo " ANDROID_HOME: $ANDROID_HOME"
64 echo " aapt2: ${aapt2Path}"
65 echo ""
66 echo "Build: ./gradlew assembleDebug"
67 echo "Device: adb devices"
68 '';
69 };
70 });