diff options
Diffstat (limited to 'hw/clef/nix/model.nix')
| -rw-r--r-- | hw/clef/nix/model.nix | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/hw/clef/nix/model.nix b/hw/clef/nix/model.nix new file mode 100644 index 0000000..da8be82 --- /dev/null +++ b/hw/clef/nix/model.nix @@ -0,0 +1,58 @@ +{ + 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 "kicad_pro") + + (nix-filter.matchExt "stp") + (nix-filter.matchExt "STP") + (nix-filter.matchExt "step") + (nix-filter.matchExt "STEP") + (nix-filter.matchExt "wrl") + + (_args: path: type: type == "directory") + ]; + }; + + allowedRequisites = []; + + KICAD8_3DMODEL_DIR = "${kicad.libraries.packages3d}/share/kicad/3dmodels"; +} '' + set -e + + export HOME=$(mktemp -d) + + echo "board: '${boardName}'" >&2 + echo "KICAD8_3DMODEL_DIR: $KICAD8_3DMODEL_DIR" >&2 + + mkdir -p $out/${sharePath} + cd "$src" + + kicad-cli pcb export step --subst-models --no-dnp ${tracksArg} ${zonesArg} "${pcb_path}" -o "$out/${sharePath}/${boardName}.step" + kicad-cli pcb export glb --subst-models --no-dnp ${tracksArg} ${zonesArg} "${pcb_path}" -o "$out/${sharePath}/${boardName}.glb" +'' |
