Last active
April 23, 2024 22:17
-
-
Save chaoky/835e93529722086724aac19b9afe10ec to your computer and use it in GitHub Desktop.
expo react native nix derivation and shell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# I'm using a wrapped mkNodeModules for pnpm support | |
# mkYarnModules and importNpmLock are avaible for yarn/npm in nixpkgs | |
# also using chaoky/gradle-dot-nix fork for the local-repos option | |
{ pkgs, utils, gradle-dot-nix }: | |
let | |
nodejs = pkgs.nodejs_21; | |
pnpm = pkgs.nodePackages.pnpm; | |
java = pkgs.jdk17; | |
androidPkgs = pkgs.androidenv.composeAndroidPackages { | |
platformVersions = [ "34" ]; | |
buildToolsVersions = [ "34.0.0" "33.0.1" ]; | |
cmakeVersions = [ "3.22.1" ]; | |
ndkVersion = "25.1.8937393"; | |
includeNDK = true; | |
}; | |
nodeModules = utils.mkNodeModules { | |
inherit nodejs pnpm; | |
src = ./.; | |
}; | |
gradleModules = import gradle-dot-nix { | |
inherit pkgs; | |
gradle-verification-metadata-file = ./android/gradle/verification-metadata.xml; | |
local-repos = [ "${nodeModules}/node_modules/jsc-android/dist" ]; | |
}; | |
android = pkgs.stdenv.mkDerivation { | |
name = "app for android"; | |
src = ./.; | |
nativeBuildInputs = with pkgs; [ | |
nodejs | |
vips | |
java | |
androidPkgs.androidsdk | |
androidPkgs.platform-tools | |
(gradle.override { inherit java; }) | |
]; | |
shellHook = '' | |
export JAVA_HOME=${java.home} | |
export ANDROID_SDK_ROOT=${androidPkgs.androidsdk}/libexec/android-sdk | |
export ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk-bundle/ | |
''; | |
buildPhase = '' | |
runHook shellHook | |
cp -r ${nodeModules}/node_modules . | |
chmod -R +w node_modules | |
bash ./gradlePatch.sh ${gradleModules.mvn-repo} | |
cd android | |
gradle \ | |
--offline \ | |
--parallel \ | |
--console=plain \ | |
-Dorg.gradle.internal.plugins.portal.url.override=${gradleModules.mvn-repo} \ | |
-Dorg.gradle.project.android.aapt2FromMavenOverride=$ANDROID_SDK_ROOT/build-tools/34.0.0/aapt2 \ | |
assembleRelease | |
''; | |
installPhase = '' | |
mkdir -p $out | |
cp app/build/outputs/apk/release/* $out | |
''; | |
}; | |
web = pkgs.stdenv.mkDerivation { | |
name = "app for web"; | |
src = ./.; | |
nativeBuildInputs = with pkgs; [ | |
nodejs | |
vips | |
]; | |
buildPhase = '' | |
cp -r ${nodeModules}/node_modules . | |
node ./node_modules/.bin/expo export -p web | |
''; | |
installPhase = '' | |
mkdir -p $out | |
cp -r dist $out | |
''; | |
}; | |
in | |
{ | |
inherit android web; | |
shell = pkgs.mkShell { | |
inputsFrom = [ android ]; | |
packages = with pkgs; [ watchman pnpm ]; | |
}; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
abs=$(realpath $1) | |
escp=${abs//\//\\/} | |
search='\(mavenCentral()\|google()\|jcenter()\|gradlePluginPortal()\)' | |
replace='maven { url = uri("'"$escp"'") }' | |
find -L . \ | |
-name build.gradle -or \ | |
-name build.gradle.kts -or \ | |
-name settings.gradle -or \ | |
-name settings.gradle.kts \ | |
| xargs sed -i "s/$search/$replace/g" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ pkgs }: | |
let | |
android = pkgs.androidenv.composeAndroidPackages { | |
platformVersions = [ "34" ]; | |
buildToolsVersions = [ "34.0.0" "33.0.1" ]; | |
cmakeVersions = [ "3.22.1" ]; | |
ndkVersion = "25.1.8937393"; | |
includeNDK = true; | |
}; | |
in | |
{ | |
shell = pkgs.mkShell { | |
buildInputs = with pkgs; [ vips jdk17 nodejs_21 nodePackages.pnpm android.androidsdk ]; | |
shellHook = '' | |
export JAVA_HOME=${pkgs.jdk17} | |
export ANDROID_SDK_ROOT=${android.androidsdk}/libexec/android-sdk | |
''; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment