regalade/flake.nix

133 lines
3.6 KiB
Nix
Raw Normal View History

2023-05-19 11:23:44 +02:00
{
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;
};
2023-05-19 11:23:44 +02:00
outputs = {
self,
nixpkgs,
flake-utils,
naersk,
rust-overlay,
trunk,
dioxus,
2023-05-19 11:23:44 +02:00
}:
2023-07-28 00:05:34 +02:00
(flake-utils.lib.eachDefaultSystem (system: let
2023-05-19 11:23:44 +02:00
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;
};
2023-07-27 23:46:54 +02:00
dioxus-cli = naersk'.buildPackage {
src = "${dioxus}/packages/cli";
buildInputs = [pkgs.openssl];
nativeBuildInputs = [pkgs.pkg-config];
};
2023-05-19 11:23:44 +02:00
in {
devShell = pkgs.mkShell {
nativeBuildInputs = [
rust
2023-07-27 23:46:54 +02:00
dioxus-cli
(naersk'.buildPackage trunk)
pkgs.httpie
pkgs.sea-orm-cli
];
2023-05-19 11:23:44 +02:00
RUST_PATH = "${rust}";
RUST_DOC_PATH = "${rust}/share/doc/rust/html/std/index.html";
};
2023-07-27 23:46:54 +02:00
packages = {
server = naersk'.buildPackage ./.;
frontend = let
pkg = {
stdenv,
makeRustPlatform,
wasm-bindgen-cli,
apiServerBase ? "http://localhost:8085",
frontendRoot ? "http://localhost:8080",
2023-07-29 12:07:45 +02:00
fetchzip,
bootstrap ? let
version = "5.3.1";
in
fetchzip {
url = "https://github.com/twbs/bootstrap/releases/download/v${version}/bootstrap-${version}-dist.zip";
hash = "sha256-BKtQB7IaslmmW6cLF4m/uUJQaBDndRf7tJ9gjItKVI4=";
},
bootstrapIcons ? let
version = "1.10.5";
in
fetchzip {
url = "https://github.com/twbs/icons/releases/download/v${version}/bootstrap-icons-${version}.zip";
hash = "sha256-o+owSIRMIXOH/GvQlVNlnCv/hcWD6kmoXNwm7F1Dmxs=";
},
2023-07-27 23:46:54 +02:00
}: let
rustPlatformWasm = makeRustPlatform {
rustc = rust;
cargo = rust;
};
in
stdenv.mkDerivation {
pname = "regalade-web";
version = "0.1.0";
src = ./.;
cargoDeps = rustPlatformWasm.importCargoLock {lockFile = ./Cargo.lock;};
REGALADE_API_SERVER_BASE = apiServerBase;
REGALADE_FRONTEND_DOMAIN = frontendRoot;
2023-07-27 23:46:54 +02:00
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
2023-07-29 12:07:45 +02:00
ln -s ${bootstrap} $out/bootstrap
ln -s ${bootstrapIcons} $out/bootstrap-icons
2023-07-27 23:46:54 +02:00
runHook postInstall
'';
};
in
pkgs.callPackage pkg {};
};
2023-07-28 00:05:34 +02:00
}))
// {
nixosModules.default = import ./nixos self;
};
2023-05-19 11:23:44 +02:00
}