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
+ ]);
+ });
+}