mirror of
https://github.com/perstarkse/minne.git
synced 2026-06-30 10:01:40 +02:00
1f0c7d4e51
removed devenv in favor for plain nix, implemented using flake-parts
173 lines
5.1 KiB
Nix
173 lines
5.1 KiB
Nix
# Local development shell, git hooks, and process-compose runner.
|
|
{ inputs, ... }:
|
|
{
|
|
perSystem =
|
|
{
|
|
pkgs,
|
|
lib,
|
|
system,
|
|
minneCtx,
|
|
...
|
|
}:
|
|
let
|
|
inherit (minneCtx) rustToolchain surrealdbPkg devGraphicsLibs;
|
|
|
|
ortDylib =
|
|
if pkgs.stdenv.isDarwin then
|
|
"${pkgs.onnxruntime}/lib/libonnxruntime.dylib"
|
|
else
|
|
"${pkgs.onnxruntime}/lib/libonnxruntime.so";
|
|
|
|
processComposeFile = pkgs.writeText "minne-process-compose.yaml" ''
|
|
version: "0.5"
|
|
|
|
environment:
|
|
- MINIO_ROOT_USER=minioadmin
|
|
- MINIO_ROOT_PASSWORD=minioadmin
|
|
- MINIO_REGION=us-east-1
|
|
|
|
processes:
|
|
surreal_db:
|
|
command: |
|
|
mkdir -p database
|
|
exec ${surrealdbPkg}/bin/surreal start \
|
|
--bind 127.0.0.1:8000 \
|
|
--log info \
|
|
--user root_user \
|
|
--pass root_password \
|
|
rocksdb:database/database.db
|
|
availability:
|
|
restart: on_failure
|
|
|
|
tailwind:
|
|
command: ${pkgs.tailwindcss_4}/bin/tailwindcss --cwd html-router -i app.css -o assets/style.css --watch=always
|
|
availability:
|
|
restart: on_failure
|
|
|
|
minio:
|
|
command: |
|
|
mkdir -p .data/minio
|
|
exec ${pkgs.minio}/bin/minio server .data/minio \
|
|
--address 127.0.0.1:19000 \
|
|
--console-address 127.0.0.1:19001
|
|
availability:
|
|
restart: on_failure
|
|
|
|
minio_setup:
|
|
command: |
|
|
for _ in $(seq 1 30); do
|
|
if ${pkgs.minio-client}/bin/mc alias set local http://127.0.0.1:19000 minioadmin minioadmin 2>/dev/null; then
|
|
${pkgs.minio-client}/bin/mc mb local/minne-tests --ignore-existing
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo "minio did not become ready" >&2
|
|
exit 1
|
|
depends_on:
|
|
minio:
|
|
condition: process_started
|
|
'';
|
|
|
|
processComposeRunner = pkgs.writeShellScriptBin "minne-dev-up" ''
|
|
set -euo pipefail
|
|
root="''${MINNE_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
|
cd "$root"
|
|
exec ${pkgs.process-compose}/bin/process-compose up -f ${processComposeFile} "$@"
|
|
'';
|
|
|
|
moldFlags = if pkgs.stdenv.isLinux then "-C link-arg=-fuse-ld=mold" else "";
|
|
|
|
preCommitCheck = inputs.git-hooks.lib.${system}.run {
|
|
src = inputs.self;
|
|
hooks = {
|
|
rustfmt.enable = true;
|
|
clippy = {
|
|
enable = true;
|
|
settings.allFeatures = true;
|
|
};
|
|
nixfmt.enable = true;
|
|
};
|
|
tools = {
|
|
cargo = rustToolchain.toolchain;
|
|
clippy = rustToolchain.toolchain;
|
|
rustfmt = rustToolchain.toolchain;
|
|
nixfmt = pkgs.nixfmt;
|
|
};
|
|
};
|
|
|
|
installGitHooks = ''
|
|
legacy="$(git rev-parse --git-path hooks/pre-commit.legacy 2>/dev/null || true)"
|
|
if [ -n "$legacy" ] && [ -f "$legacy" ]; then
|
|
rm -f "$legacy"
|
|
fi
|
|
# prek migration can leave core.hooksPath set; pre-commit refuses to install then.
|
|
hooks_path="$(git config --local --get core.hooksPath 2>/dev/null || true)"
|
|
if [ -n "$hooks_path" ]; then
|
|
git config --local --unset-all core.hooksPath
|
|
fi
|
|
'';
|
|
|
|
devPackages = [
|
|
rustToolchain.toolchain
|
|
surrealdbPkg
|
|
processComposeRunner
|
|
pkgs.process-compose
|
|
pkgs.minio
|
|
pkgs.minio-client
|
|
pkgs.openssl
|
|
pkgs.nodejs
|
|
pkgs.watchman
|
|
pkgs.vscode-langservers-extracted
|
|
pkgs.cargo-xwin
|
|
pkgs.clang
|
|
pkgs.onnxruntime
|
|
pkgs.cargo-watch
|
|
pkgs.tailwindcss_4
|
|
pkgs.python3
|
|
pkgs.fontconfig
|
|
pkgs.fontconfig.dev
|
|
pkgs.libGL
|
|
pkgs.libGLU
|
|
pkgs.libclang
|
|
pkgs.mold
|
|
pkgs.nixfmt
|
|
];
|
|
|
|
devEnv = {
|
|
NIX_CFLAGS_COMPILE = "-Wno-error=cpp";
|
|
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
|
|
LD_LIBRARY_PATH = lib.makeLibraryPath devGraphicsLibs;
|
|
ORT_DYLIB_PATH = ortDylib;
|
|
S3_ENDPOINT = "http://127.0.0.1:19000";
|
|
S3_BUCKET = "minne-tests";
|
|
MINNE_TEST_S3_ENDPOINT = "http://127.0.0.1:19000";
|
|
MINNE_TEST_S3_BUCKET = "minne-tests";
|
|
RUSTFLAGS = moldFlags;
|
|
MINNE_ROOT = "${inputs.self}";
|
|
};
|
|
in
|
|
{
|
|
packages.process-compose-runner = processComposeRunner;
|
|
|
|
apps.dev = {
|
|
type = "app";
|
|
program = "${processComposeRunner}/bin/minne-dev-up";
|
|
meta.description = "Start local dev services (SurrealDB, MinIO, Tailwind)";
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = devPackages;
|
|
env = devEnv;
|
|
shellHook = ''
|
|
${preCommitCheck.shellHook}
|
|
${installGitHooks}
|
|
echo "Minne dev shell (fenix ${rustToolchain.rustVersion})"
|
|
echo " nix run .#dev # or: minne-dev-up"
|
|
echo " cargo test --workspace"
|
|
echo " nix flake check"
|
|
'';
|
|
};
|
|
};
|
|
}
|