mirror of
https://github.com/EthanShoeDev/fressh.git
synced 2026-01-11 06:12:51 +00:00
commit
This commit is contained in:
110
flake.nix
110
flake.nix
@@ -1,4 +1,5 @@
|
||||
{
|
||||
# nix run nixpkgs#alejandra -- format ./flake.nix
|
||||
description = "Expo RN devshells (local emulator / remote AVD)";
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
@@ -9,25 +10,31 @@
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, android-nixpkgs, ... }:
|
||||
let
|
||||
systems = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
||||
forAllSystems = f: nixpkgs.lib.genAttrs systems (system:
|
||||
f {
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ android-nixpkgs.overlays.default ];
|
||||
config.allowUnfree = true; # emulator is unfree
|
||||
};
|
||||
}
|
||||
);
|
||||
in
|
||||
{
|
||||
devShells = forAllSystems ({ pkgs }: let
|
||||
makeAndroidSdk = mode:
|
||||
let
|
||||
androidSdk = pkgs.androidSdk (sdk:
|
||||
if mode == "full" then
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
android-nixpkgs,
|
||||
...
|
||||
}: let
|
||||
systems = ["x86_64-linux" "aarch64-darwin" "x86_64-darwin"];
|
||||
forAllSystems = f:
|
||||
nixpkgs.lib.genAttrs systems (
|
||||
system:
|
||||
f {
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [android-nixpkgs.overlays.default];
|
||||
config.allowUnfree = true; # emulator is unfree
|
||||
};
|
||||
}
|
||||
);
|
||||
in {
|
||||
devShells = forAllSystems ({pkgs}: let
|
||||
makeAndroidSdk = mode: let
|
||||
androidSdk = pkgs.androidSdk (
|
||||
sdk:
|
||||
if mode == "full"
|
||||
then
|
||||
(with sdk; [
|
||||
cmdline-tools-latest
|
||||
platform-tools
|
||||
@@ -39,24 +46,23 @@
|
||||
ndk-26-1-10909125
|
||||
cmake-3-22-1
|
||||
])
|
||||
else if mode == "remote" then
|
||||
else if mode == "remote"
|
||||
then
|
||||
(with sdk; [
|
||||
cmdline-tools-latest # ← required for a valid SDK
|
||||
platform-tools # adb/fastboot
|
||||
cmdline-tools-latest # ← required for a valid SDK
|
||||
platform-tools # adb/fastboot
|
||||
])
|
||||
else
|
||||
throw "makeAndroidSdk: unknown mode '${mode}'. Use \"full\" or \"remote\"."
|
||||
);
|
||||
else throw "makeAndroidSdk: unknown mode '${mode}'. Use \"full\" or \"remote\"."
|
||||
);
|
||||
|
||||
# Standard path from nixpkgs' androidSdk wrapper
|
||||
# https://ryantm.github.io/nixpkgs/languages-frameworks/android/#notes-on-environment-variables-in-android-projects
|
||||
sdkRoot = "${androidSdk}/libexec/android-sdk";
|
||||
in
|
||||
{
|
||||
inherit androidSdk sdkRoot;
|
||||
};
|
||||
# Standard path from nixpkgs' androidSdk wrapper
|
||||
# https://ryantm.github.io/nixpkgs/languages-frameworks/android/#notes-on-environment-variables-in-android-projects
|
||||
sdkRoot = "${androidSdk}/libexec/android-sdk";
|
||||
in {
|
||||
inherit androidSdk sdkRoot;
|
||||
};
|
||||
|
||||
fullAndroidSdk = makeAndroidSdk "full";
|
||||
fullAndroidSdk = makeAndroidSdk "full";
|
||||
remoteAndroidSdk = makeAndroidSdk "remote";
|
||||
|
||||
defaultPkgs = with pkgs; [
|
||||
@@ -68,9 +74,11 @@
|
||||
watchman
|
||||
jdk17
|
||||
gradle_8
|
||||
cmake
|
||||
ninja
|
||||
pkg-config
|
||||
];
|
||||
in {
|
||||
|
||||
# Minimal: only universal dev tools you always want
|
||||
default = pkgs.mkShell {
|
||||
packages = defaultPkgs;
|
||||
@@ -78,7 +86,7 @@
|
||||
|
||||
# Local emulator: full SDK + AVD bits for API 36
|
||||
android-local = pkgs.mkShell {
|
||||
packages = defaultPkgs ++ [ fullAndroidSdk.androidSdk ];
|
||||
packages = defaultPkgs ++ [fullAndroidSdk.androidSdk];
|
||||
shellHook = ''
|
||||
# Resolve SDK root robustly (libexec first, then share)
|
||||
_CANDS=(
|
||||
@@ -117,21 +125,23 @@
|
||||
|
||||
# Remote AVD workflow: no emulator/image; add scrcpy + adb only
|
||||
android-remote = pkgs.mkShell {
|
||||
packages = defaultPkgs ++ [
|
||||
remoteAndroidSdk.androidSdk # provides adb/fastboot only
|
||||
pkgs.scrcpy
|
||||
];
|
||||
shellHook = ''
|
||||
export ANDROID_SDK_ROOT="${remoteAndroidSdk.sdkRoot}"
|
||||
export ANDROID_HOME="${remoteAndroidSdk.sdkRoot}"
|
||||
export PATH="${remoteAndroidSdk.sdkRoot}/platform-tools:$PATH"
|
||||
hash -r
|
||||
echo "Using Nix adb from: $ANDROID_SDK_ROOT"
|
||||
which -a adb
|
||||
adb version || true
|
||||
echo "Tip: ssh -N -L 5037:127.0.0.1:5037 user@remote && scrcpy"
|
||||
'';
|
||||
};
|
||||
packages =
|
||||
defaultPkgs
|
||||
++ [
|
||||
remoteAndroidSdk.androidSdk # provides adb/fastboot only
|
||||
pkgs.scrcpy
|
||||
];
|
||||
shellHook = ''
|
||||
export ANDROID_SDK_ROOT="${remoteAndroidSdk.sdkRoot}"
|
||||
export ANDROID_HOME="${remoteAndroidSdk.sdkRoot}"
|
||||
export PATH="${remoteAndroidSdk.sdkRoot}/platform-tools:$PATH"
|
||||
hash -r
|
||||
echo "Using Nix adb from: $ANDROID_SDK_ROOT"
|
||||
which -a adb
|
||||
adb version || true
|
||||
echo "Tip: ssh -N -L 5037:127.0.0.1:5037 user@remote && scrcpy"
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user