diff options
Diffstat (limited to 'nix/fabrication.nix')
| -rw-r--r-- | nix/fabrication.nix | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/nix/fabrication.nix b/nix/fabrication.nix index 82a5d3f..18bc6f6 100644 --- a/nix/fabrication.nix +++ b/nix/fabrication.nix @@ -4,62 +4,79 @@ zip, runCommand, + nix-filter, + lib, - panel, -}: let - schSrc = nix-filter { - root = ./..; + src, + pcb_path, + sch_path, - include = [ - (nix-filter.matchExt "kicad_sch") - ]; - }; + boardName ? (lib.removeSuffix ".kicad_pcb" (builtins.baseNameOf pcb_path)), + + fabHouse ? "jlcpcb", + withAssembly ? true, +}: let + sharePath = "share/npry/clef/fab"; - pcbSrc = nix-filter { - root = ./..; + fabSrc = nix-filter { + root = src; include = [ + (nix-filter.matchExt "kicad_sch") + (nix-filter.matchExt "kicad_wks") (nix-filter.matchExt "kicad_pcb") (nix-filter.matchExt "kicad_pro") + + (_args: path: type: type == "directory") ]; }; -in runCommand "ocularium.fab" { +in runCommand "${boardName}.fab" { nativeBuildInputs = [ kicad kikit zip ]; - src = panel; + src = fabSrc; allowedRequisites = []; } '' set -e - mkdir -p $out/share/npry/ocularium/fab - mkdir -p $out/share/npry/ocularium/panel/fab - export HOME=$(mktemp -d) - cd $out/share/npry/ocularium/fab + echo "board: '${boardName}'" >&2 + + mkdir -p "$out/${sharePath}" + cd "$src" - kikit fab jlcpcb --assembly \ + kikit fab ${fabHouse} \ + ${if withAssembly then "--assembly" else ""} \ --no-drc \ - --schematic ${schSrc}/okm.kicad_sch \ + --schematic "${sch_path}" \ --field 'LCSC Part #,LCSC Part No' \ --missingError \ - ${pcbSrc}/okm.kicad_pcb . - rm -rf gerber + "${pcb_path}" \ + "$out/${sharePath}" - cd ../panel + cd "$out/${sharePath}" + rm -vf "gerbers.zip" - kikit fab jlcpcb --assembly \ - --no-drc \ - --schematic ${schSrc}/okm.kicad_sch \ - --field 'LCSC Part #,LCSC Part No' \ - --missingError \ - $src/share/npry/ocularium/panel.kicad_pcb . - rm -rf gerber + pushd gerber + + # normalize + for f in ${boardName}-*; do + mv -nv "$f" "''${f#${boardName}-}" + done + + for f in ${boardName}.*; do + mv -nv "$f" "board''${f#${boardName}}" + done + + popd + + zip -vj "gerbers.zip" gerber/* + rm -vrf gerber '' |
