elmskell/package.nix
2025-06-02 12:44:29 +00:00

53 lines
1.3 KiB
Nix

{
esbuild,
elmPackages,
haskellPackages,
stdenv,
...
}: let
ghcExeOptions = "-Wall -Wcompact -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N";
ghcPackages = p: [
p.aeson
p.blaze-html
p.blaze-markup
p.directory
p.elm-street
p.http-types
p.scotty
p.text
p.wai-extra
p.warp
];
elmConfig = elmPackages.fetchElmDeps {
elmPackages = import ./frontend/elm-srcs.nix;
elmVersion = "0.19.1";
registryDat = ./frontend/registry.dat;
};
in
stdenv.mkDerivation {
pname = "elmskell";
version = "0.1.0";
src = ./src;
nativeBuildInputs = [
esbuild
(haskellPackages.ghcWithPackages ghcPackages)
elmPackages.elm
];
buildInputs = [
];
configurePhase = ''
${elmConfig}
'';
buildPhase = ''
ghc -v ${ghcExeOptions} ./Main.hs -o ./main
elm make ./Main.elm --optimize --output=tmp.js
esbuild ./tmp.js --minify --target=es5 --outfile=main.js
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/src
cp ./main $out/bin/elmskell
cp ./main.js $out/src/main.js
cp ./init.js $out/src/init.js
'';
}