Something went wrong. Try again.
[AWIP] Local-first peer-to-peer connectivity and sharing across Android, Linux and Windows, made with Tauri
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185{ description = "PeerBay, local-first peer-to-peer connectivity for Android, Linux, and Windows";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; crane.url = "github:ipetkov/crane"; crane-tauri.url = "github:JPHutchins/crane-tauri"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; };
outputs = { self, nixpkgs, crane, crane-tauri, flake-utils, rust-overlay, ... }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; overlays = [ (import rust-overlay) ]; }; inherit (pkgs) lib; rustToolchain = pkgs.rust-bin.stable."1.99.0".default.override { targets = [ "aarch64-linux-android" "x86_64-linux-android" ]; }; craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; frontendPackage = builtins.fromJSON (builtins.readFile ./package.json); tauriManifest = fromTOML (builtins.readFile ./src-tauri/Cargo.toml); tauriPackage = tauriManifest.package;
frontendSrc = lib.fileset.toSource { root = ./.; fileset = lib.fileset.unions [ ./package.json ./bun.lock ./tsconfig.json ./vite.config.js ./src ./static ]; };
nodeModules = pkgs.stdenvNoCC.mkDerivation { pname = "${frontendPackage.name}-node-modules"; version = frontendPackage.version; src = frontendSrc;
nativeBuildInputs = [ pkgs.bun pkgs.writableTmpDirAsHomeHook ];
dontConfigure = true; dontFixup = true;
buildPhase = '' runHook preBuild export BUN_INSTALL_CACHE_DIR=$(mktemp -d) bun install \ --frozen-lockfile \ --ignore-scripts \ --no-progress \ --cpu="*" \ --os="*" runHook postBuild '';
installPhase = '' runHook preInstall mkdir -p "$out" cp -R node_modules "$out/node_modules" runHook postInstall '';
outputHashMode = "recursive"; outputHash = "sha256-pGr7PGUH8lhc8t3Thd1tsoLc3G4SN4+MBeQAGHIvzSs="; };
frontend = pkgs.stdenvNoCC.mkDerivation { pname = "${frontendPackage.name}-frontend"; version = frontendPackage.version; src = frontendSrc;
nativeBuildInputs = [ pkgs.bun pkgs.nodejs ]; dontConfigure = true;
buildPhase = '' runHook preBuild cp -R ${nodeModules}/node_modules ./node_modules chmod -R u+w ./node_modules patchShebangs node_modules bun run build runHook postBuild '';
installPhase = '' runHook preInstall cp -R build "$out" runHook postInstall ''; };
tauri = crane-tauri.lib.buildTauriApp { inherit pkgs craneLib; } { pname = tauriPackage.name; version = tauriPackage.version; src = ./.; inherit frontend; };
androidNdkVersion = "29.0.14206865"; androidenv = pkgs.callPackage "${pkgs.path}/pkgs/development/mobile/androidenv" { licenseAccepted = true; }; androidComposition = androidenv.composeAndroidPackages { platformVersions = [ "36" "37.0" ]; buildToolsVersions = [ "36.0.0" ]; includeNDK = true; ndkVersion = androidNdkVersion; includeCmake = false; includeEmulator = false; includeSources = false; includeSystemImages = false; }; androidSdk = androidComposition.androidsdk; androidPlatformTools = androidComposition.platform-tools; androidJdk = pkgs.jdk25; androidSdkRoot = "${androidSdk}/libexec/android-sdk"; androidNdkRoot = "${androidSdkRoot}/ndk/${androidNdkVersion}"; in { packages = { inherit frontend; default = tauri.app; wrapped = tauri.wrappedApp; };
checks = { inherit (tauri) app;
clippy = craneLib.cargoClippy ( tauri.commonArgs // { cargoArtifacts = tauri.cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- -D warnings"; TAURI_CONFIG = tauri.tauriConfig; } );
fmt = craneLib.cargoFmt { src = tauri.commonArgs.src; }; };
devShells.default = craneLib.devShell { checks = self.checks.${system}; packages = [ androidSdk androidPlatformTools androidJdk ]; JAVA_HOME = androidJdk.home; ANDROID_HOME = androidSdkRoot; ANDROID_SDK_ROOT = androidSdkRoot; ANDROID_NDK_HOME = androidNdkRoot; ANDROID_NDK_ROOT = androidNdkRoot; }; } );}