{ description = "A plantcare webapp"; inputs = { flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (sys: let pkgs = import nixpkgs { system = sys; overlays = [ (import rust-overlay) ]; }; rust = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" "rust-analyzer" ]; }; platform = pkgs.makeRustPlatform { rustc = rust; cargo = rust; }; node = pkgs.nodejs_20; deps = [ rust node pkgs.prefetch-npm-deps ]; backend = platform.buildRustPackage { name = "plantback"; src = ./back; cargoLock = { lockFile = ./back/Cargo.lock; }; }; frontend = pkgs.buildNpmPackage { name = "plantfront"; src = ./front; nodejs = node; npmBuildScript = "build-only"; npmDepsHash = "sha256-0BTgt0zjKa6NPEAPyqJEkej0LuhglKpx645JpVSE2Ag="; installPhase = '' mv ./dist $out ''; }; in { packages.backend = backend; packages.frontend = frontend; packages.default = pkgs.runCommand "plant" {} '' mkdir $out cp -r ${backend} $out/back cp -r ${frontend} $out/front ''; devShells.default = pkgs.mkShell { shellHook = '' PATH="$PWD/front/node_modules/.bin:$PATH" ''; packages = deps; }; } ); }