regalade/flake.nix
2023-07-27 23:46:54 +02:00

107 lines
2.6 KiB
Nix

{
description = "A basic flake with a shell";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.naersk.url = "github:nix-community/naersk";
inputs.rust-overlay.url = "github:oxalica/rust-overlay";
inputs.trunk = {
url = "github:thedodd/trunk";
flake = false;
};
inputs.dioxus = {
url = "github:DioxusLabs/dioxus";
flake = false;
};
outputs = {
self,
nixpkgs,
flake-utils,
naersk,
rust-overlay,
trunk,
dioxus,
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [(import rust-overlay)];
};
rust = pkgs.rust-bin.stable.latest.default.override {
targets = ["wasm32-unknown-unknown"];
};
naersk' = pkgs.callPackage naersk {
cargo = rust;
rustc = rust;
};
dioxus-cli = naersk'.buildPackage {
src = "${dioxus}/packages/cli";
buildInputs = [pkgs.openssl];
nativeBuildInputs = [pkgs.pkg-config];
};
in {
devShell = pkgs.mkShell {
nativeBuildInputs = [
rust
dioxus-cli
(naersk'.buildPackage trunk)
pkgs.httpie
pkgs.sea-orm-cli
];
RUST_PATH = "${rust}";
RUST_DOC_PATH = "${rust}/share/doc/rust/html/std/index.html";
};
packages = {
server = naersk'.buildPackage ./.;
frontend = let
pkg = {
stdenv,
makeRustPlatform,
wasm-bindgen-cli,
}: let
rustPlatformWasm = makeRustPlatform {
rustc = rust;
cargo = rust;
};
in
stdenv.mkDerivation {
pname = "regalade-web";
version = "0.1.0";
src = ./.;
cargoDeps = rustPlatformWasm.importCargoLock {lockFile = ./Cargo.lock;};
nativeBuildInputs = [
dioxus-cli
wasm-bindgen-cli
rustPlatformWasm.cargoSetupHook
rustPlatformWasm.cargoBuildHook
];
buildPhase = ''
runHook preBuild
export XDG_DATA_HOME=/build/data
mkdir -p $XDG_DATA_HOME
cd app
dioxus build --release
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -R dist $out
runHook postInstall
'';
};
in
pkgs.callPackage pkg {};
};
});
}