{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
jetpack-nixos.url = "github:anduril/jetpack-nixos";
pre-commit-hooks = {
url = "github:cachix/git-hooks.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { nixpkgs, flake-utils, jetpack-nixos, pre-commit-hooks, ... }:
let
supported-systems = with flake-utils.lib.system; [
x86_64-linux
aarch64-linux
];
in
flake-utils.lib.eachSystem supported-systems (system:
let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
cudaPackages = if system == "aarch64-linux" then jetpack-nixos.legacyPackages.aarch64-linux.cudaPackages else pkgs.cudaPackages;
tensorrt = if system == "aarch64-linux" then jetpack-nixos.legacyPackages.aarch64-linux.cudaPackages.tensorrt else pkgs.cudaPackages.tensorrt;
inherit (cudaPackages) cudatoolkit cudnn cuda_cudart;
python = pkgs.python3.withPackages (ps: with ps; [
numpy
onnx
]);
inputs = with pkgs; [
bacon
cmake
cmake-format
clang
clang-tools
linuxHeaders
llvmPackages.compiler-rt
nixpkgs-fmt
openssl
pkg-config
pre-commit
cudatoolkit
tensorrt
rustc
cargo
clippy
rustfmt
spdlog
fmt
cxx-rs
python
];
libs = pkgs.lib.makeLibraryPath (with pkgs; [
addDriverRunpath.driverLink
stdenv.cc.cc.lib
cudaPackages.cudatoolkit
cudaPackages.cuda_nvrtc
libGL
glib
zlib
tensorrt.lib
cudnn
cuda_cudart
spdlog
fmt
]);
includes = pkgs.lib.makeSearchPath "include" [
pkgs.glibc.dev
];
pre-commit-checks = pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
clippy = {
name = "clippy";
enable = true;
entry = "cargo clippy --all-targets";
types = [ "rust" ];
pass_filenames = false;
language = "system";
};
rustfmt.enable = true;
clang-format = {
enable = true;
types_or = [ "c" "c++" ];
};
};
};
in
{
devShells = {
default = pkgs.mkShell {
nativeBuildInputs = inputs;
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib/";
TENSORRT_LIBRARIES = "${tensorrt.lib}/lib";
CUDA_INCLUDE_DIRS = "${cudatoolkit}/include";
CUDA_LIBRARIES = "${cudatoolkit}/lib";
LD_LIBRARY_PATH = libs;
LIBRARY_PATH = libs;
CPLUS_INCLUDE_PATH = "${pkgs.gcc}/include/c++/${pkgs.gcc.version}:${pkgs.gcc}/include/c++/${pkgs.gcc.version}/${pkgs.stdenv.hostPlatform.config}:${includes}";
C_INCLUDE_PATH = includes;
shellHook = ''
export CC="clang"
export CXX="clang++"
${pre-commit-checks.shellHook}
'';
};
};
});
}