example-spa-elm-app/flake.nix

146 lines
4.5 KiB
Nix
Raw Normal View History

2025-01-03 22:34:36 +00:00
{
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
utils.url = "github:numtide/flake-utils";
mkElmDerivation.url = "github:jeslie0/mkElmDerivation";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
};
outputs =
inputs:
inputs.utils.lib.eachDefaultSystem (
system:
let
pkgs = import inputs.nixpkgs {
localSystem = system;
overlays = [
inputs.mkElmDerivation.overlays.default
(final: prev: {
example-spa-elm-app = prev.callPackage (
{
stdenv,
lib,
elmPackages,
uglify-js,
rustPlatform,
cargo,
rustc,
}:
stdenv.mkDerivation (
let
allPackagesJsonPath = "${inputs.mkElmDerivation}/mkElmDerivation/all-packages.json";
elmHashesJsonPath = "${inputs.mkElmDerivation}/mkElmDerivation/elm-hashes.json";
snapshot = import "${inputs.mkElmDerivation}/src/snapshot/default.nix" (
prev.haskellPackages // { inherit lib; }
);
elmJson = ./frontend/elm.json;
in
{
pname = "example-spa-elm-app";
version = "0.1.0";
src = inputs.self;
nativeBuildInputs = [
elmPackages.elm
uglify-js
rustPlatform.cargoSetupHook
cargo
rustc
];
cargoDeps = pkgs.rustPlatform.importCargoLock {
lockFile = ./backend/Cargo.lock;
allowBuiltinFetchGit = true;
};
cargoRoot = "backend";
makeFlags = [
"RELEASE=1"
"frontend"
"backend"
];
postPatch = ''
patchShebangs ./frontend/build.sh
'';
preBuild = ''
(
cd frontend
${
(import "${inputs.mkElmDerivation}/nix/lib.nix" {
inherit
stdenv
lib
snapshot
allPackagesJsonPath
;
}).mkDotElmCommand
elmHashesJsonPath
elmJson
}
)
export ELM_HOME=$PWD/frontend/.elm
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r ./public $out/
cp ./backend/target/release/backend $out/
2025-01-03 22:34:36 +00:00
runHook postInstall
'';
}
)
) { };
2025-01-31 15:45:50 +00:00
elm-go = prev.callPackage (
{
lib,
buildNpmPackage,
elmPackages,
}:
buildNpmPackage {
name = "elm-go";
version = "5.0.20";
src = pkgs.fetchFromGitHub {
owner = "lucamug";
repo = "elm-go";
rev = "9a7bd8c980a03b026128fcd626b9395b4e2cb1e0";
sha256 = "sha256-B5Cngv8EGOY79u9aZeixA3EBt8rIc6bkYA4zoqycpk8=";
};
npmDepsHash = "sha256-0LfLpUbav8cVoZ9/Cjb7Mr8jdo1/KjVcjR4lcYB3AzY=";
dontNpmBuild = true;
makeWrapperArgs = [
"--suffix PATH : ${lib.makeBinPath [ elmPackages.elm ]}"
];
}
) { };
2025-01-03 22:34:36 +00:00
})
];
};
in
{
packages = {
default = inputs.self.packages."${system}".example-spa-elm-app;
example-spa-elm-app = pkgs.example-spa-elm-app;
};
devShells.default =
with pkgs;
mkShell {
inputsFrom = [ example-spa-elm-app ];
2025-01-30 17:39:22 +00:00
buildInputs = [
2025-01-31 15:45:50 +00:00
elm-go
];
2025-01-03 22:34:36 +00:00
};
}
);
}