From c9f8efc867b81bef59306098559521222e910d7b Mon Sep 17 00:00:00 2001 From: randogoth Date: Tue, 13 Oct 2026 10:47:34 +0300 Subject: [PATCH] chore: set up Flutter and Android SDK with devbox --- .gitignore | 4 + devbox.json | 32 +++++++ devbox.lock | 85 +++++++++++++++++++ .../android-studio-devbox-config.sh | 59 +++++++++++++ nix-android-sdk/flake.nix | 27 ++++++ 5 files changed, 207 insertions(+) create mode 100644 devbox.json create mode 100644 devbox.lock create mode 100755 nix-android-sdk/android-studio-devbox-config.sh create mode 100644 nix-android-sdk/flake.nix diff --git a/.gitignore b/.gitignore index 79c113f..cab8055 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,7 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +# devbox +.devbox/ +nix-android-sdk/flake.lock diff --git a/devbox.json b/devbox.json new file mode 100644 index 0000000..447af4d --- /dev/null +++ b/devbox.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/main/schema/schemas/devbox.schema.json", + "packages": { + "flutter@3.41.9-sdk-links": {}, + "nixpkgs#openjdk17": {}, + "path:./nix-android-sdk#android-sdk": {}, + "gtk3": {}, + "clang": {}, + "cmake": {}, + "ninja": {}, + "pkg-config": {}, + "patchelf": {} + }, + "env": { + "ANDROID_HOME": "$DEVBOX_PACKAGES_DIR/share/android-sdk", + "ANDROID_SDK_ROOT": "$DEVBOX_PACKAGES_DIR/share/android-sdk" + }, + "shell": { + "init_hook": [ + "export PKG_CONFIG_PATH=\"$PWD/.devbox/nix/profile/default/lib/pkgconfig:$PKG_CONFIG_PATH\"", + "export LD_LIBRARY_PATH=\"$PWD/.devbox/nix/profile/default/lib:$LD_LIBRARY_PATH\"", + "flutter config --jdk-dir \"$(dirname \"$(dirname \"$(command -v java)\")\")\" > /dev/null" + ], + "scripts": { + "analyze": "flutter analyze", + "test": "flutter test", + "run": "flutter run", + "run-linux": "flutter run -d linux", + "build-linux": "flutter build linux" + } + } +} diff --git a/devbox.lock b/devbox.lock new file mode 100644 index 0000000..abfef91 --- /dev/null +++ b/devbox.lock @@ -0,0 +1,85 @@ +{ + "lockfile_version": "1", + "packages": { + "clang": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#clang", + "source": "nixpkg" + }, + "cmake": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#cmake", + "source": "nixpkg" + }, + "flutter@3.41.9-sdk-links": { + "last_modified": "2026-05-21T08:15:18Z", + "resolved": "github:NixOS/nixpkgs/4a29d733e8a7d5b824c3d8c958a946a9867b3eb2#flutter", + "source": "devbox-search", + "version": "3.41.9-sdk-links", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/mp9x3mn0x5hs11m8z4m20w8gndkkccb7-flutter-wrapped-3.41.9-sdk-links", + "default": true + } + ], + "store_path": "/nix/store/mp9x3mn0x5hs11m8z4m20w8gndkkccb7-flutter-wrapped-3.41.9-sdk-links" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/aidhap5ilmmf4fzyr0gwxxls0d7b9h7z-flutter-wrapped-3.41.9-sdk-links", + "default": true + } + ], + "store_path": "/nix/store/aidhap5ilmmf4fzyr0gwxxls0d7b9h7z-flutter-wrapped-3.41.9-sdk-links" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/27gbcgwqbaaf81i792zssg862xcwzwzg-flutter-wrapped-3.41.9-sdk-links", + "default": true + } + ], + "store_path": "/nix/store/27gbcgwqbaaf81i792zssg862xcwzwzg-flutter-wrapped-3.41.9-sdk-links" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/fqcjikcpdcn123csd805bmg05jv75szj-flutter-wrapped-3.41.9-sdk-links", + "default": true + } + ], + "store_path": "/nix/store/fqcjikcpdcn123csd805bmg05jv75szj-flutter-wrapped-3.41.9-sdk-links" + } + } + }, + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "last_modified": "2026-09-29T03:29:29Z", + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?lastModified=1790652569&narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D" + }, + "gtk3": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#gtk3", + "source": "nixpkg" + }, + "ninja": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#ninja", + "source": "nixpkg" + }, + "nixpkgs#openjdk17": { + "last_modified": "1970-01-01T00:00:00Z", + "resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#openjdk17" + }, + "patchelf": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#patchelf", + "source": "nixpkg" + }, + "pkg-config": { + "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#pkg-config", + "source": "nixpkg" + } + } +} diff --git a/nix-android-sdk/android-studio-devbox-config.sh b/nix-android-sdk/android-studio-devbox-config.sh new file mode 100755 index 0000000..55f37ae --- /dev/null +++ b/nix-android-sdk/android-studio-devbox-config.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" +IDEA_DIR="$PROJECT_DIR/.idea" +LIBRARIES_DIR="$IDEA_DIR/libraries" +FLUTTER_SDK="$PROJECT_DIR/.devbox/nix/profile/default" +DART_SDK="$FLUTTER_SDK/bin/cache/dart-sdk" + +mkdir -p "$IDEA_DIR" +if [ ! -x "$FLUTTER_SDK/bin/flutter" ]; then + echo "Flutter not found at $FLUTTER_SDK/bin/flutter. Run devbox install to download it." >&2 + exit 1 +fi + +if [ ! -d "$DART_SDK" ]; then + echo "Dart SDK not found at $DART_SDK. Run flutter doctor to populate the cache." >&2 + exit 1 +fi + +mkdir -p "$LIBRARIES_DIR" + +cat > "$IDEA_DIR/flutter.xml" <<'EOF' + + + + + +EOF + +cat > "$IDEA_DIR/dart.xml" <<'EOF' + + + + + +EOF + +dart_libs=$(find "$DART_SDK/lib" -maxdepth 1 -mindepth 1 -type d -printf '%f\n' | sort) +tmp_file=$(mktemp) +{ + echo '' + echo ' ' + echo ' ' + for lib in $dart_libs; do + printf ' \n' "$lib" + done + echo ' ' + echo ' ' + echo ' ' + echo ' ' + echo '' +} > "$tmp_file" +mv "$tmp_file" "$LIBRARIES_DIR/Dart_SDK.xml" + +echo "Android Studio configured. Flutter SDK: $FLUTTER_SDK" diff --git a/nix-android-sdk/flake.nix b/nix-android-sdk/flake.nix new file mode 100644 index 0000000..f7bcb08 --- /dev/null +++ b/nix-android-sdk/flake.nix @@ -0,0 +1,27 @@ +{ + description = "A Flake for the Android SDK"; + + inputs = { + flake-utils.url = "github:numtide/flake-utils"; + android-nixpkgs.url = "github:tadfisher/android-nixpkgs/stable"; + }; + + outputs = { self, flake-utils, android-nixpkgs }: + flake-utils.lib.eachSystem ["x86_64-linux" "x86_64-darwin" "aarch64-darwin"] (system: { + packages.android-sdk = android-nixpkgs.sdk."${system}" (sdkPkgs: with sdkPkgs; [ + cmdline-tools-latest + build-tools-33-0-0 + build-tools-34-0-0 + build-tools-35-0-0 + build-tools-36-1-0 + cmake-3-22-1 + platform-tools + platforms-android-33 + platforms-android-34 + platforms-android-35 + platforms-android-36 + emulator + ndk-27-0-12077973 + ]); + }); +}