plant/flake.nix

59 lines
1.7 KiB
Nix

{
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;
};
}
);
}