Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions .github/actions/setup/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@ runs:
using: composite

steps:
- name: ⚙️ Setup pnpm
- name: ⚙️ Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: 🚧 Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version-file: .node-version
cache: 'pnpm'

- name: 📥 Install dependencies
shell: bash
run: pnpm install --frozen-lockfile

- name: 🐳 Setup nx.dev
uses: nrwl/nx-set-shas@v4
with:
main-branch-name: ${{ github.ref_name }}

- name: 📥 Install dependencies
shell: bash
run: pnpm install
14 changes: 13 additions & 1 deletion .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -118,5 +118,17 @@
"builtin": true
},
"globals": {},
"ignorePatterns": ["entry.server.ts", "**/vendor"]
"ignorePatterns": [
".nx",
".direnv",
".repo",
"**/vendor",
"**/.wrangler",
"**/build",
"**/dist",
"**/.expo",
"**/ios",
"**/andriod",
"entry.server.ts"
]
}
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

.nx
.direnv
.repo
**/coverage
**/.wrangler
**/build
Expand Down
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.12.0
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

215 changes: 111 additions & 104 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
};
};

inherit (pkgs) lib;

androidComposition = pkgs.androidenv.composeAndroidPackages {
cmdLineToolsVersion = "9.0";
toolsVersion = "26.1.1";
Expand All @@ -29,139 +31,144 @@
"extras;google;m2repository"
];
};
in
{
devShells.default = pkgs.mkShell {
name = "DevBox";

buildInputs = with pkgs; lib.unique ([
# Node.js ecosystem
devPackages = with pkgs;
lib.unique ([
corepack
nodejs_24
bun

# Python environment
python3
python3Packages.pip
python3Packages.virtualenv
python3Packages.setuptools
python3Packages.wheel

# Android development
python312
uv
androidComposition.androidsdk
androidComposition.platform-tools
androidComposition.build-tools
androidComposition.platforms
androidComposition.cmake
jdk17_headless
gradle

watchman
] ++ lib.optionals stdenv.isDarwin [
# iOS development (macOS only)
cocoapods
ruby_3_2
ruby_3_4
xcbeautify
libimobiledevice
ccache
]);

shellHook = ''
# Set up Node.js environment
export NODE_ENV=development

# Set up pnpm
export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"

# Set up Android environment
export ANDROID_HOME="${androidComposition.androidsdk}/libexec/android-sdk"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_NDK_ROOT="$ANDROID_HOME/ndk-bundle"
export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"

# Set up Java environment
export JAVA_HOME="${pkgs.jdk17_headless}"
export PATH="$JAVA_HOME/bin:$PATH"

# Set up Gradle
export GRADLE_HOME="${pkgs.gradle}/lib/gradle"
export PATH="$GRADLE_HOME/bin:$PATH"
shellHookScript = pkgs.writeShellScript "devbox-shell-hook" ''
export NODE_ENV=development

export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"

export ANDROID_HOME="${androidComposition.androidsdk}/libexec/android-sdk"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_NDK_ROOT="$ANDROID_HOME/ndk-bundle"
export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"

export JAVA_HOME="${pkgs.jdk17_headless}"
export PATH="$JAVA_HOME/bin:$PATH"

export GRADLE_HOME="${pkgs.gradle}/lib/gradle"
export PATH="$GRADLE_HOME/bin:$PATH"

if [[ "$OSTYPE" == "darwin"* ]]; then
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
export PATH="$DEVELOPER_DIR/Toolchains/XcodeDefault.xctoolchain/usr/bin:$DEVELOPER_DIR/usr/bin:$PATH"
export SDKROOT="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
export MACOSX_DEPLOYMENT_TARGET="11.0"
export IOS_DEPLOYMENT_TARGET="15.1"
export IPHONEOS_DEPLOYMENT_TARGET="15.1"
fi

export PATH="$(pwd)/node_modules/.bin:$PATH"

export NODE_OPTIONS="--max-old-space-size=8192"
export GRADLE_OPTS="-Xmx4g -XX:+UseG1GC"

export UV_CACHE_DIR="''${XDG_CACHE_HOME:-$HOME/.cache}/uv"
export UV_PYTHON_INSTALL_DIR="$UV_CACHE_DIR/python"
export UV_LINK_MODE=copy
export UV_PROJECT_ENVIRONMENT="$(pwd)/.venv"
export UV_PROJECT_PYTHON="3.12.0"

uv_activate_project_env() {
if [ -d "$UV_PROJECT_ENVIRONMENT" ]; then
export VIRTUAL_ENV="$UV_PROJECT_ENVIRONMENT"
export PATH="$VIRTUAL_ENV/bin:$PATH"
if [ -f "$VIRTUAL_ENV/bin/activate" ]; then
# shellcheck disable=SC1090
. "$VIRTUAL_ENV/bin/activate"
fi
fi
}

uv_prepare_project_env() {
local current_version
if [ -f "$UV_PROJECT_ENVIRONMENT/pyvenv.cfg" ]; then
current_version="$(grep -E '^version_info' "$UV_PROJECT_ENVIRONMENT/pyvenv.cfg" | awk -F ' = ' '{print $2}')"
if [ "''${current_version:-}" != "$UV_PROJECT_PYTHON" ]; then
rm -rf "$UV_PROJECT_ENVIRONMENT"
fi
fi

# Enable modern React Native features
export ANDROID_HERMES_ENABLED=true
export ANDROID_NEW_ARCH_ENABLED=true
if [ ! -d "$UV_PROJECT_ENVIRONMENT" ]; then
uv venv --python "$UV_PROJECT_PYTHON"
fi

# iOS development setup
if [[ "$OSTYPE" == "darwin"* ]]; then
# Set up CocoaPods
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
uv python pin "$UV_PROJECT_PYTHON" --project >/dev/null 2>&1 || true
}

# Ensure we're using Nix's Ruby and CocoaPods
export PATH="${pkgs.ruby_3_2}/bin:${pkgs.cocoapods}/bin:$PATH"
export GEM_HOME="${pkgs.cocoapods}/lib/ruby/gems/3.2.0"
export GEM_PATH="${pkgs.cocoapods}/lib/ruby/gems/3.2.0"
uv_prepare_project_env
uv_activate_project_env

# Set up Xcode tools with highest priority
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
export PATH="$DEVELOPER_DIR/Toolchains/XcodeDefault.xctoolchain/usr/bin:$DEVELOPER_DIR/usr/bin:$PATH"
alias pip="uv pip"
alias pip-sync="uv pip sync"

# Enable new architecture for iOS
export RCT_NEW_ARCH_ENABLED=1
devbox_debug_env() {
echo "=== Development Environment ==="

# Set up Xcode environment
export SDKROOT="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
export MACOSX_DEPLOYMENT_TARGET="11.0"
echo "Android SDK:"
echo " SDK Root: $ANDROID_HOME"
echo " NDK Root: $ANDROID_NDK_ROOT"
echo " SDK Version: $(sdkmanager --version 2>/dev/null || echo 'N/A')"
echo " Platform Tools: $(adb version 2>/dev/null | head -n1 || echo 'N/A')"
echo " Build Tools: $(ls -1 $ANDROID_HOME/build-tools 2>/dev/null | sort -V | tail -n1 || echo 'N/A')"
echo " Platform: Android $(ls -1 $ANDROID_HOME/platforms 2>/dev/null | grep -o '[0-9]*' | sort -V | tail -n1 || echo 'N/A')"
echo " NDK Version: $(ls -1 $ANDROID_HOME/ndk 2>/dev/null | sort -V | tail -n1 || echo 'N/A')"

# Set up iOS development environment
export IOS_DEPLOYMENT_TARGET="15.1"
export IPHONEOS_DEPLOYMENT_TARGET="15.1"
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "iOS Environment:"
echo " Xcode Version: $(xcodebuild -version 2>/dev/null | head -n1 || echo 'N/A')"
echo " GCC Version: $(gcc --version 2>/dev/null | head -n1 || echo 'N/A')"
echo " Clang Version: $(clang --version 2>/dev/null | head -n1 || echo 'N/A')"
echo " CocoaPods Version: $(pod --version 2>/dev/null || echo 'N/A')"
echo " Ruby Version: $(ruby --version 2>/dev/null || echo 'N/A')"
echo " Deployment Target: $IOS_DEPLOYMENT_TARGET"
fi

# Add project's node_modules/.bin to PATH
export PATH="$(pwd)/node_modules/.bin:$PATH"

# Performance optimizations
export NODE_OPTIONS="--max-old-space-size=8192"
export GRADLE_OPTS="-Xmx4g -XX:+UseG1GC"

# Print development environment information (controlled by DEBUG_ENV)
if [ "$DEBUG_ENV" = "1" ] || [ "$DEBUG_ENV" = "true" ]; then
echo "=== Development Environment ==="

# Android Environment
echo "Android SDK:"
echo " SDK Root: $ANDROID_HOME"
echo " NDK Root: $ANDROID_NDK_ROOT"
echo " SDK Version: $(sdkmanager --version 2>/dev/null || echo 'N/A')"
echo " Platform Tools: $(adb version 2>/dev/null | head -n1 || echo 'N/A')"
echo " Build Tools: $(ls -1 $ANDROID_HOME/build-tools 2>/dev/null | sort -V | tail -n1 || echo 'N/A')"
echo " Platform: Android $(ls -1 $ANDROID_HOME/platforms 2>/dev/null | grep -o '[0-9]*' | sort -V | tail -n1 || echo 'N/A')"
echo " NDK Version: $(ls -1 $ANDROID_HOME/ndk 2>/dev/null | sort -V | tail -n1 || echo 'N/A')"

# iOS Environment (macOS only)
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "iOS Environment:"
echo " Xcode Version: $(xcodebuild -version 2>/dev/null | head -n1 || echo 'N/A')"
echo " GCC Version: $(gcc --version 2>/dev/null | head -n1 || echo 'N/A')"
echo " Clang Version: $(clang --version 2>/dev/null | head -n1 || echo 'N/A')"
echo " CocoaPods Version: $(pod --version 2>/dev/null || echo 'N/A')"
echo " Ruby Version: $(ruby --version 2>/dev/null || echo 'N/A')"
echo " Deployment Target: $IOS_DEPLOYMENT_TARGET"
fi

# Common Environment
echo "Common Environment:"
echo " Node Version: $(node --version 2>/dev/null || echo 'N/A')"
echo " NPM Version: $(npm --version 2>/dev/null || echo 'N/A')"
echo " PNPM Version: $(pnpm --version 2>/dev/null || echo 'N/A')"
echo " Python Version: $(python3 --version 2>/dev/null || echo 'N/A')"
echo " Java Version: $(java -version 2>&1 | head -n1 || echo 'N/A')"
echo " Gradle Version: $(gradle --version 2>/dev/null | grep Gradle | head -n1 || echo 'N/A')"
echo "====================================="
echo "Common Environment:"
echo " Node Version: $(node --version 2>/dev/null || echo 'N/A')"
echo " NPM Version: $(npm --version 2>/dev/null || echo 'N/A')"
echo " PNPM Version: $(pnpm --version 2>/dev/null || echo 'N/A')"
echo " UV Version: $(uv --version 2>/dev/null | head -n1 || echo 'N/A')"
if [ -n "$VIRTUAL_ENV" ]; then
echo " Active Python Env: $VIRTUAL_ENV"
fi
'';
echo " Python Version: $(python3 --version 2>/dev/null || echo 'N/A')"
echo " Java Version: $(java -version 2>&1 | head -n1 || echo 'N/A')"
echo " Gradle Version: $(gradle --version 2>/dev/null | grep Gradle | head -n1 || echo 'N/A')"
echo "====================================="
}
'';
in
{
devShells.default = pkgs.mkShell {
name = "DevBox";
buildInputs = devPackages;
shellHook = "source ${shellHookScript}";
};
}
);
Expand Down
12 changes: 8 additions & 4 deletions nx.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,16 @@
"plugins": [
{
"plugin": "@nx/expo/plugin",
"include": ["**/mobile"],
"options": {
"prebuildTargetName": "prebuild",
"buildTargetName": "native-build",
"startTargetName": "start",
"serveTargetName": "serve",
"runIosTargetName": "run-ios",
"runAndroidTargetName": "run-android"
"runAndroidTargetName": "run-android",
"exportTargetName": "export",
"prebuildTargetName": "prebuild",
"installTargetName": "install",
"buildTargetName": "build",
"submitTargetName": "submit"
}
}
],
Expand Down
Loading
Loading