deer social fork for personal usage. but you might see a use idk. github mirror
1{
2 inputs = {
3 nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
4 flake-utils.url = "github:numtide/flake-utils";
5 android-nixpkgs.url = "github:tadfisher/android-nixpkgs";
6 wrangler-flake.url = "github:ryand56/wrangler";
7 };
8
9 outputs = {
10 nixpkgs,
11 flake-utils,
12 wrangler-flake,
13 android-nixpkgs,
14 ...
15 }:
16 flake-utils.lib.eachDefaultSystem (
17 system: let
18 noEmulator = (builtins.getEnv "NO_EMULATOR") == "1";
19 xdgStateHome = builtins.getEnv "XDG_STATE_HOME";
20
21 android-arch =
22 if system == "aarch64-darwin"
23 then "arm64-v8a"
24 else "x86-64";
25 android-arch-underline =
26 if system == "aarch64-darwin"
27 then "arm64-v8a"
28 else "x86_64";
29 homedir = builtins.getEnv "HOME";
30 state-home =
31 if pkgs.lib.last (pkgs.lib.splitString "-" system) == "darwin"
32 then "${homedir}/." # ~/.android
33 else "${xdgStateHome}/";
34
35 pkgs = import nixpkgs {
36 inherit system;
37 config = {
38 android_sdk.accept_license = true;
39 allowUnfree = true;
40 };
41 };
42 pinnedJDK = pkgs.jdk17;
43 androidSdk = android-nixpkgs.sdk.${system} (
44 sdk:
45 with sdk;
46 [
47 build-tools-35-0-0
48 cmdline-tools-latest
49 platform-tools
50 platforms-android-35
51 sources-android-35
52 ndk-27-1-12297006
53 cmake-3-22-1
54 ]
55 ++ pkgs.lib.optionals (!noEmulator) [
56 emulator
57 sdk."system-images-android-35-google-apis-${android-arch}"
58 sdk."system-images-android-35-google-apis-playstore-${android-arch}"
59 ]
60 );
61
62 create-avd = pkgs.writeShellScriptBin "create-avd" ''
63 avdmanager create avd \
64 --name android-35 \
65 --package 'system-images;android-35;google_apis_playstore;${android-arch-underline}' \
66 --tag google_apis_playstore \
67 --device pixel_8 \
68 --force
69 '';
70 in
71 with pkgs; {
72 packages = {
73 default = callPackage ./default.nix {};
74 };
75 devShells = {
76 default = mkShell rec {
77 buildInputs = [
78 androidSdk
79 pinnedJDK
80 ];
81
82 JAVA_HOME = pinnedJDK;
83 ANDROID_HOME = "${androidSdk}/share/android-sdk";
84 ANDROID_SDK_ROOT = "${androidSdk}/share/android-sdk";
85 ANDROID_USER_HOME = "${state-home}android"; # has leading '/' sorted out already
86 ANDROID_AVD_HOME = "${ANDROID_USER_HOME}/avd";
87
88 GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/35.0.0/aapt2";
89
90 packages =
91 [
92 gradle_8
93
94 just
95 fastmod
96 nodejs
97 yarn
98 crowdin-cli
99 eas-cli
100
101 bundletool
102
103 typescript
104 typescript-language-server
105
106 go
107 gopls
108
109 wrangler-flake.packages.${system}.wrangler
110 ]
111 ++ pkgs.lib.optionals (!noEmulator) [create-avd];
112
113 shellHook = ''
114 export GRADLE_USER_HOME=~/.cache/gradle
115 '';
116 };
117 };
118 }
119 );
120}