mirror of
https://github.com/EthanShoeDev/fressh.git
synced 2026-01-11 14:22: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"
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
1938
packages/react-native-uniffi-russh/rust/Cargo.lock
generated
1938
packages/react-native-uniffi-russh/rust/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -3,14 +3,58 @@ name = "uniffi-russh"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
# Runtime + FFI + SSH deps
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
[dependencies]
|
||||
uniffi.workspace = true
|
||||
# UniFFI runtime (from your workspace). The `tokio` feature enables
|
||||
# the `#[uniffi::export(async_runtime = "tokio")]` path so async Rust fns
|
||||
# surface as Promises on the JS side.
|
||||
uniffi = { workspace = true, features = ["tokio"] }
|
||||
|
||||
# Lightweight error enum derive for FFI-safe error reporting.
|
||||
thiserror = "1.0.64"
|
||||
|
||||
# # Tokio async runtime + IO bits. We use:
|
||||
# # - rt-multi-thread : multithreaded scheduler
|
||||
# # - macros : attribute macros (if you ever need #[tokio::test], etc.)
|
||||
# # - time : timers/sleeps
|
||||
# # - net : sockets; russh uses this
|
||||
# # - sync : async Mutex, channels, etc.
|
||||
# # - io-util : AsyncRead/Write extension traits (write_all/flush)
|
||||
# tokio = { version = "1.47.1", features = ["rt-multi-thread", "macros", "time", "net", "sync", "io-util"] }
|
||||
|
||||
# # Common async ecosystem utilities (not strictly required by our code, but
|
||||
# # frequently useful and pulled in by transitive deps).
|
||||
# bytes = "1.10.1"
|
||||
# futures = "0.3.31"
|
||||
|
||||
# # SSH client and keys. `russh` is the client; `russh-keys` handles key types,
|
||||
# # generation, and OpenSSH (PEM) encoding/decoding.
|
||||
russh = { version = "0.54.3", default-features = false, features = ["ring", "flate2", "rsa"] }
|
||||
russh-keys = "0.49.2"
|
||||
|
||||
# # Secure RNG for key generation (OsRng).
|
||||
# rand = "0.8"
|
||||
|
||||
# # Handy but currently optional; you can remove it if unused.
|
||||
# once_cell = "1.21.3"
|
||||
|
||||
# # Optional helper for async trait impls; safe to keep even if unused.
|
||||
# async-trait = "0.1"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
# Build-time codegen for UniFFI
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
[build-dependencies]
|
||||
# UniFFI build helper to generate bindings at compile time.
|
||||
uniffi = { workspace = true, features = ["build"] }
|
||||
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
# Library outputs
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
[lib]
|
||||
# - cdylib : C-compatible dynamic library (Android/iOS; what RN/JSI loads)
|
||||
# - staticlib: Static archive (useful for iOS static linking)
|
||||
# - lib : Normal Rust rlib (unit tests, internal usage)
|
||||
crate-type = ["cdylib", "staticlib", "lib"]
|
||||
|
||||
Reference in New Issue
Block a user