diff --git a/.envrc b/.envrc
index 36d4f505..d6ad5d61 100644
--- a/.envrc
+++ b/.envrc
@@ -1,7 +1,4 @@
-
-if [[ "$OSTYPE" == "linux-gnu"* ]]; then
use nix
-fi
export PATH=$PATH:$HOME/.cargo/bin
export JB55=32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245
diff --git a/README.md b/README.md
index c48e38ee..40f25f43 100644
--- a/README.md
+++ b/README.md
@@ -10,29 +10,54 @@ Look it actually runs on android!
-## Compiling
+# Developer Setup
+
+## Linux/MacOS
+
+First, install [nix][nix] if you don't have it.
The `shell.nix` provides a reproducible build environment for android and rust. I recommend using [direnv][direnv] to load this environment when you `cd` into the directory.
+If you don't have [direnv][direnv], enter the dev shell via:
+
+```bash
+$ nix-shell
+```
+
Once you have your dev shell setup, you can build with this command:
```bash
-$ cargo apk run --release
+$ cargo run --release
```
-This will build and run the app on your android device. If you don't have the `aarch64-linux-android` rust target yet, you can install it with:
+## Android
+
+The dev shell should also have all of the android-sdk dependencies needed for development, but you still need the `aarch64-linux-android` rustup target installed:
```
$ rustup target add aarch64-linux-android
```
-You can also just type
+To run on a real device, just type:
```bash
-$ cargo run --release
+$ cargo apk run --release
```
-To run the multiplatform desktop version of the app called NoteDeck.
-
+## Android Emulator
+
+- Install [Android Studio](https://developer.android.com/studio)
+- Open 'Device Manager' in Android Studio
+- Add a new device with API level `34` and ABI `arm64-v8a` (even though the app uses 30, the 30 emulator can't find the vulkan adapter, but 34 works fine)
+- Start up the emulator
+
+while the emulator is running, run:
+
+```bash
+cargo apk run --release
+```
+
+The app should appear on the emulator
[direnv]: https://direnv.net/
+[nix]: https://nixos.org/download/
diff --git a/shell.nix b/shell.nix
index 8568fb71..f64460cf 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,34 +1,57 @@
-{ pkgs ? import {}, use_android ? true }:
+{ pkgs ? import { }
+, android ? fetchTarball "https://github.com/tadfisher/android-nixpkgs/archive/refs/tags/2024-04-02.tar.gz"
+, use_android ? true }:
with pkgs;
+
let
x11libs = lib.makeLibraryPath [ xorg.libX11 xorg.libXcursor xorg.libXrandr xorg.libXi libglvnd vulkan-loader vulkan-validation-layers libxkbcommon ];
+ android-nixpkgs = callPackage android { };
ndk-version = "24.0.8215888";
- androidComposition = androidenv.composeAndroidPackages {
- includeNDK = true;
- ndkVersions = [ ndk-version ];
- platformVersions = [ "28" "29" "30" ];
- useGoogleAPIs = false;
- #useGoogleTVAddOns = false;
- #includeExtras = [
- # "extras;google;gcm"
- #];
- };
- androidsdk = androidComposition.androidsdk;
- android-home = "${androidsdk}/libexec/android-sdk";
- ndk-home = "${android-home}/ndk/${ndk-version}";
+
+ android-sdk = android-nixpkgs.sdk (sdkPkgs: with sdkPkgs; [
+ cmdline-tools-latest
+ build-tools-34-0-0
+ platform-tools
+ platforms-android-30
+ emulator
+ ndk-24-0-8215888
+ ]);
+
+ android-sdk-path = "${android-sdk.out}/share/android-sdk";
+ android-ndk-path = "${android-sdk-path}/ndk/${ndk-version}";
+
in
-
mkShell ({
+ buildInputs = [] ++ pkgs.lib.optional use_android [
+ android-sdk
+ ];
nativeBuildInputs = [
- cargo-udeps cargo-edit cargo-watch rustup rustfmt libiconv pkg-config cmake fontconfig
- brotli wabt gdb heaptrack
-
- heaptrack
-
- ] ++ pkgs.lib.optional use_android [ jre openssl libiconv androidsdk cargo-apk ] ;
+ #cargo-udeps
+ #cargo-edit
+ #cargo-watch
+ #rustup
+ #rustfmt
+ libiconv
+ pkg-config
+ #cmake
+ fontconfig
+ #brotli
+ #wabt
+ #gdb
+ #heaptrack
+ ] ++ lib.optional use_android [
+ jre
+ openssl
+ libiconv
+ cargo-apk
+ ] ++ lib.optional stdenv.isDarwin [
+ darwin.apple_sdk.frameworks.Security
+ darwin.apple_sdk.frameworks.OpenGL
+ darwin.apple_sdk.frameworks.CoreServices
+ darwin.apple_sdk.frameworks.AppKit
+ ];
+ ANDROID_NDK_ROOT = android-ndk-path;
+} // (if !stdenv.isDarwin then {
LD_LIBRARY_PATH="${x11libs}";
-} // (if !use_android then {} else {
- ANDROID_HOME = android-home;
- NDK_HOME = ndk-home;
-}))
+} else {}))