dotfiles/packages/teslamate/default.nix
Alejandro Angulo ea351a8a38
Packaged teslamate
- Need to provide RELEASE_COOKIE environment variable when running the
  app (https://github.com/NixOS/nixpkgs/issues/166229)

- Deploy script has an output directory hardcoded that doesn't play nice
  with nix. I made change and generated a patch file with `git diff` in
  my local copy of the repo. I also had to make sure to change the
  filepaths in the patchfile to remove the `assets/` prefix. The
  contents of the this directory must be moved to `priv/static/assets`.

- Have to manually install the phoenix node dependencies (these aren't
  fetched from npm, but from the repo itself).
2023-12-17 17:32:49 -08:00

94 lines
2.6 KiB
Nix

{
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
'';
}