mirror of
https://github.com/netfun2000/hipudding-teslamate.git
synced 2026-02-27 09:44:28 +08:00
Latest version - after rewrite in Rust - just released yesterday is much nicer and has fewer bugs. For example, it now uses process-compose which is full screen interface for showing running processes. Blog post: https://devenv.sh/blog/2024/03/20/devenv-10-rewrite-in-rust/
164 lines
5.5 KiB
Nix
164 lines
5.5 KiB
Nix
{
|
|
description = "TeslaMate Logger";
|
|
|
|
inputs = {
|
|
nixpkgs = { url = "github:NixOS/nixpkgs/nixos-unstable"; };
|
|
flake-utils = { url = "github:numtide/flake-utils"; };
|
|
devenv.url = "github:cachix/devenv";
|
|
};
|
|
|
|
outputs = inputs@{ self, nixpkgs, flake-utils, devenv }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
inherit (pkgs.lib) optional optionals;
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
elixir = pkgs.beam.packages.erlang.elixir_1_16;
|
|
beamPackages = pkgs.beam.packagesWith pkgs.beam.interpreters.erlang;
|
|
|
|
src = ./.;
|
|
version = "0.0.0";
|
|
pname = "teslamate";
|
|
|
|
mixFodDeps = beamPackages.fetchMixDeps {
|
|
TOP_SRC = src;
|
|
pname = "${pname}-mix-deps";
|
|
inherit src version;
|
|
hash = "sha256-CeGtWKLjZJsoHk+uSAIz8s46XyGJWa3ECm5rSRfqlrc=";
|
|
# hash = pkgs.lib.fakeHash;
|
|
};
|
|
|
|
nodejs = pkgs.nodejs;
|
|
nodePackages = pkgs.buildNpmPackage {
|
|
name = "teslamate";
|
|
src = ./assets;
|
|
npmDepsHash = "sha256-05AKPyms4WP8MHBqWMup8VXR3a1tv/f/7jT8c6EpWBw=";
|
|
# npmDepsHash = pkgs.lib.fakeHash;
|
|
dontNpmBuild = true;
|
|
inherit nodejs;
|
|
|
|
installPhase = ''
|
|
mkdir $out
|
|
cp -r node_modules $out
|
|
ln -s $out/node_modules/.bin $out/bin
|
|
|
|
rm $out/node_modules/phoenix
|
|
ln -s ${mixFodDeps}/phoenix $out/node_modules
|
|
|
|
rm $out/node_modules/phoenix_html
|
|
ln -s ${mixFodDeps}/phoenix_html $out/node_modules
|
|
|
|
rm $out/node_modules/phoenix_live_view
|
|
ln -s ${mixFodDeps}/phoenix_live_view $out/node_modules
|
|
'';
|
|
};
|
|
|
|
cldr = pkgs.fetchFromGitHub {
|
|
owner = "elixir-cldr";
|
|
repo = "cldr";
|
|
rev = "v2.37.5";
|
|
sha256 = "sha256-T5Qvuo+xPwpgBsqHNZYnTCA4loToeBn1LKTMsDcCdYs=";
|
|
# sha256 = pkgs.lib.fakeHash;
|
|
};
|
|
|
|
pkg = beamPackages.mixRelease {
|
|
TOP_SRC = src;
|
|
inherit pname version elixir src mixFodDeps;
|
|
|
|
LOCALES = "${cldr}/priv/cldr";
|
|
|
|
postBuild = ''
|
|
ln -sf ${mixFodDeps}/deps deps
|
|
ln -sf ${nodePackages}/node_modules assets/node_modules
|
|
export PATH="${pkgs.nodejs}/bin:${nodePackages}/bin:$PATH"
|
|
${nodejs}/bin/npm run deploy --prefix ./assets
|
|
|
|
# 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
|
|
mix phx.digest --no-deps-check
|
|
'';
|
|
|
|
};
|
|
|
|
postgres_port = 7000;
|
|
mosquitto_port = 7001;
|
|
process_compose_port = 7002;
|
|
|
|
psql = pkgs.writeShellScriptBin "teslamate_psql" ''
|
|
exec "${pkgs.postgresql}/bin/psql" --host "$DATABASE_HOST" --user "$DATABASE_USER" --port "$DATABASE_PORT" "$DATABASE_NAME" "$@"
|
|
'';
|
|
mosquitto_sub = pkgs.writeShellScriptBin "teslamate_sub" ''
|
|
exec "${pkgs.mosquitto}/bin/mosquitto_sub" -h "$MQTT_HOST" -p "$MQTT_PORT" -u "$MQTT_USERNAME" -P "$MQTT_PASSWORD" "$@"
|
|
'';
|
|
|
|
devShell = devenv.lib.mkShell {
|
|
inherit inputs pkgs;
|
|
modules = with pkgs; [{
|
|
packages = [
|
|
elixir
|
|
elixir_ls
|
|
glibcLocales
|
|
node2nix
|
|
nodejs
|
|
prefetch-npm-deps
|
|
# for dashboard scripts
|
|
jq
|
|
psql
|
|
mosquitto
|
|
mosquitto_sub
|
|
] ++ optional stdenv.isLinux inotify-tools
|
|
++ optional stdenv.isDarwin terminal-notifier
|
|
++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
|
|
CoreFoundation
|
|
CoreServices
|
|
]);
|
|
enterShell = ''
|
|
export LOCALES="${cldr}/priv/cldr";
|
|
export PORT="4000"
|
|
export ENCRYPTION_KEY="your_secure_encryption_key_here"
|
|
export DATABASE_USER="teslamate"
|
|
export DATABASE_PASS="your_secure_password_here"
|
|
export DATABASE_NAME="teslamate"
|
|
export DATABASE_HOST="127.0.0.1"
|
|
export DATABASE_PORT="${toString postgres_port}"
|
|
export MQTT_HOST="127.0.0.1"
|
|
export MQTT_PORT="${toString mosquitto_port}"
|
|
export RELEASE_COOKIE="1234567890123456789"
|
|
export TZDATA_DIR="$PWD/tzdata"
|
|
'';
|
|
enterTest = ''
|
|
mix test
|
|
'';
|
|
processes.mqtt = {
|
|
exec =
|
|
"${pkgs.mosquitto}/bin/mosquitto -p ${toString mosquitto_port}";
|
|
};
|
|
process.process-compose = {
|
|
port = process_compose_port;
|
|
tui = true;
|
|
};
|
|
services.postgres = {
|
|
enable = true;
|
|
package = pkgs.postgresql_15;
|
|
listen_addresses = "127.0.0.1";
|
|
port = postgres_port;
|
|
initialDatabases = [{ name = "teslamate"; }];
|
|
initialScript = ''
|
|
CREATE USER teslamate with encrypted password 'your_secure_password_here';
|
|
GRANT ALL PRIVILEGES ON DATABASE teslamate TO teslamate;
|
|
ALTER USER teslamate WITH SUPERUSER;
|
|
'';
|
|
};
|
|
}];
|
|
|
|
};
|
|
in {
|
|
packages = {
|
|
devenv-up = devShell.config.procfileScript;
|
|
default = pkg;
|
|
};
|
|
devShells.default = devShell;
|
|
});
|
|
}
|