{ kicad, runCommand, nix-filter, lib, withTracks ? false, withZones ? false, src, pcb_path, boardName ? (lib.removeSuffix ".kicad_pcb" (builtins.baseNameOf pcb_path)), }: let zonesArg = if withZones then "--include-zones" else ""; tracksArg = if withTracks then "--include-tracks" else ""; sharePath = "share/npry/clef/model"; in runCommand "${boardName}.model" { nativeBuildInputs = [ kicad ]; src = nix-filter { root = src; include = [ (nix-filter.matchExt "kicad_pcb") (nix-filter.matchExt "stp") (nix-filter.matchExt "step") (nix-filter.matchExt "wrl") ]; }; allowedRequisites = []; KICAD8_3DMODEL_DIR = "${kicad.libraries.packages3d}/share/kicad/3dmodels"; } '' set -e export HOME=$(mktemp -d) echo "board: '${boardName}'" >&2 mkdir -p $out/${sharePath} cd "$out/${sharePath}" kicad-cli pcb export step --subst-models --no-dnp ${tracksArg} ${zonesArg} "$src/${pcb_path}" -o "${boardName}.step" kicad-cli pcb export glb --subst-models --no-dnp ${tracksArg} ${zonesArg} "$src/${pcb_path}" -o "${boardName}.glb" ''