dotfiles/packages/teslamate/default.nix

94 lines
2.6 KiB
Nix
Raw Permalink Normal View History

{
lib,
callPackage,
beamPackages,
buildNpmPackage,
fetchFromGitHub,
nodejs,
breakpointHook,
...
}: let
pname = "teslamate";
version = "1.28.2";
src = fetchFromGitHub {
owner = "teslamate-org";
repo = "teslamate";
rev = "v${version}";
hash = "sha256-CH3u6ijzvVdjfTVu06UcyW4NhVQKeUKtC/j+UeDELNc=";
};
mixNixDeps = import ./mix.nix {
inherit beamPackages lib;
overrides = (
final: prev:
(lib.mapAttrs
(_: value:
value.override {
appConfigPath = src + "/config";
})
prev)
// {
ex_cldr = prev.ex_cldr.overrideAttrs (old: rec {
# Copied from https://github.com/NixOS/nixpkgs/blob/d8fd23629b3910e8bdbd313e29532d3e33dd73d5/pkgs/servers/mobilizon/default.nix#L34-L47
version = "2.37.5";
# We have to use the GitHub sources, as it otherwise tries to download
# the locales at build time.
src = fetchFromGitHub {
owner = "elixir-cldr";
repo = "cldr";
rev = "v${version}";
sha256 = "sha256-T5Qvuo+xPwpgBsqHNZYnTCA4loToeBn1LKTMsDcCdYs=";
};
postInstall = ''
cp $src/priv/cldr/locales/* $out/lib/erlang/lib/ex_cldr-${old.version}/priv/cldr/locales/
'';
});
}
);
};
assets = buildNpmPackage {
pname = "${pname}-assets";
inherit version;
src = "${src}/assets";
npmDepsHash = "sha256-h92i/cRf4I0c4vUc6oBt5T4yvM0JNQMkoDy2YHcVWS4=";
patches = [./deploy_output.patch];
dontNpmBuild = true;
installPhase = ''
runHook preinstall
rm ./node_modules/phoenix
cp -r ${mixNixDeps.phoenix}/src ./node_modules/phoenix
rm ./node_modules/phoenix_live_view
cp -r ${mixNixDeps.phoenix_live_view}/src ./node_modules/phoenix_live_view
rm ./node_modules/phoenix_html
cp -r ${mixNixDeps.phoenix_html}/src ./node_modules/phoenix_html
npm run deploy
cp -r . "$out"
runHook postInstall
'';
};
in
beamPackages.mixRelease {
inherit pname version src mixNixDeps;
nativeBuildInputs = [nodejs];
preBuild = ''
mkdir -p priv/static/assets
# assets patched to write to scripts/deploy_output
cp -r ${assets}/scripts/deploy_output ./priv/static/assets
'';
postBuild = ''
# for external task you need a workaround for the no deps check flag
# https://github.com/phoenixframework/phoenix/issues/2690
mix do deps.loadpaths --no-deps-check phx.digest, release --overwrite
'';
}