Files
kaptan/flake.nix
T
Onur Özkan 6e15063502 save
Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-08-17 18:51:40 +03:00

100 lines
3.3 KiB
Nix

{
description = "Kaptan development environment";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
outputs = { nixpkgs, ... }:
let
systems = [
"x86_64-linux"
"aarch64-linux"
];
forAllSystems = nixpkgs.lib.genAttrs systems;
perSystem = system:
let
pkgs = nixpkgs.legacyPackages.${system};
groundSuite = pkgs.buildNpmPackage {
pname = "kaptan-ground-suite";
version = "0.1.0";
src = ./ground-suite;
npmDepsHash = "sha256-l217EpOz2oEBQK6bzJV0DSEdBkK7HIlB4a7JMF+FadA=";
npmBuildScript = "check";
PLAYWRIGHT_CHROMIUM_EXECUTABLE = "${pkgs.chromium}/bin/chromium";
installPhase = ''
runHook preInstall
mkdir -p $out/libexec/ground-suite
cp -R dist node_modules src public scripts tests package.json package-lock.json tsconfig.json tsconfig.app.json vite.config.ts vitest.config.ts playwright.config.ts $out/libexec/ground-suite/
runHook postInstall
'';
};
groundSuiteCommand = pkgs.writeShellApplication {
name = "ground-suite";
runtimeInputs = [ pkgs.nodejs pkgs.coreutils pkgs.chromium ];
text = ''
suite_root=${groundSuite}/libexec/ground-suite
if [ "''${1:-}" = test ]; then
shift
test_root=$(mktemp -d -t kaptan-ground-suite-test.XXXXXX)
trap 'rm -rf "$test_root"' EXIT
cp -R "$suite_root" "$test_root/suite"
chmod -R u+w "$test_root/suite"
cd "$test_root/suite"
export PLAYWRIGHT_CHROMIUM_EXECUTABLE=${pkgs.chromium}/bin/chromium
npm test -- "$@"
exit $?
fi
exec node "$suite_root/scripts/server.mjs" "$@"
'';
};
in { inherit pkgs groundSuite groundSuiteCommand; };
in
{
packages = forAllSystems (system:
let values = perSystem system; in {
ground-suite = values.groundSuite;
default = values.groundSuite;
});
apps = forAllSystems (system:
let values = perSystem system; in {
ground-suite = {
type = "app";
program = "${values.groundSuiteCommand}/bin/ground-suite";
};
});
checks = forAllSystems (system:
let values = perSystem system; in {
ground-suite = values.groundSuite;
});
devShells = forAllSystems (system:
let
pkgs = nixpkgs.legacyPackages.${system};
python = pkgs.python3.withPackages (pythonPackages: with pythonPackages; [
pymavlink
pyserial
]);
in
{
default = pkgs.mkShell {
packages = [
pkgs.rustup
pkgs.dfu-util
pkgs.mdbook
pkgs.flutter
python
];
};
ground-suite = pkgs.mkShell {
packages = [ pkgs.nodejs ];
shellHook = ''
echo "Kaptan Ground Suite development shell (Node $(node --version), npm $(npm --version))"
echo "Run: cd ground-suite && npm ci && npm run dev"
echo "SIMULATED DATA ONLY"
'';
};
});
};
}