diff --git a/flake.nix b/flake.nix index 18ecb78..cc8c3d4 100644 --- a/flake.nix +++ b/flake.nix @@ -11,71 +11,168 @@ build = { variant }: let - adapter_production_files = pkgs.stdenv.mkDerivation { - name = "production-files"; + bom = pkgs.stdenv.mkDerivation { + name = "bom"; src = ./kirdy_LD_adapter_${variant}; - nativeBuildInputs = [ pkgs.kicad pkgs.zip pkgs.python3 ]; + nativeBuildInputs = [ pkgs.kicad pkgs.python3 ]; + + SCH = "kirdy_LD_adapter_${variant}.kicad_sch"; + PCB = "kirdy_LD_adapter_${variant}.kicad_pcb"; buildPhase = '' - echo ${variant} - # kicad-cli requires the use of $HOME - TMP_DIR="$(pwd)/$(mktemp -d tmp.XXXX)" - export HOME=$TMP_DIR + export HOME=$(mktemp -d tmp.XXXX) - SCH=kirdy_LD_adapter_${variant}.kicad_sch - PCB=kirdy_LD_adapter_${variant}.kicad_pcb - - # Get Revision Number from the Title Block in KiCAD Top Schematics + # Get Revision Number from the Title Block in KiCAD PCB REV=$(cat $SCH | grep rev | cut -d'"' -f 2) PREFIX=kirdy_LD_adapter_${variant}_$REV kicad-cli sch export python-bom $SCH -o $PREFIX"_bom".xml export PYTHONPATH=${pkgs.kicad.base}/share/kicad/plugins python ${kicad_bom_generator}/generate_bom_from_xml.py $PREFIX"_bom".xml $PREFIX"_bom".csv - - kicad-cli sch export pdf $SCH -o $PREFIX.pdf - kicad-cli pcb export pos $PCB --format csv --units mm -o $PREFIX"_pos".csv - - export KICAD7_3DMODEL_DIR=${pkgs.kicad.libraries.packages3d}/share/kicad/3dmodels - kicad-cli pcb export step $PCB --subst-models --force -o $PREFIX.step - - mkdir -p $PREFIX"_gerber_drill" - kicad-cli pcb export gerbers $PCB -l 'F.Cu,B.Cu,F.Paste,B.Paste,F.Silkscreen,B.Silkscreen,F.Mask,B.Mask,Edge.Cuts' --no-x2 --subtract-soldermask -o ./$PREFIX"_gerber_drill" - - # The additional trailing slash is due to a bug in the kicad-cli tool. https://gitlab.com/kicad/code/kicad/-/issues/14438 - kicad-cli pcb export drill $PCB -u mm --generate-map --map-format gerberx2 -o ./$PREFIX"_gerber_drill"/ - - zip -r -j $PREFIX"_gerber_drill" $PREFIX"_gerber_drill" - - rm -r $TMP_DIR ''; installPhase = '' - mkdir -p $out/production_files - cp $PREFIX"_bom".csv $out/production_files/$PREFIX"_bom".csv - cp $PREFIX.pdf $out/production_files/$PREFIX.pdf - cp $PREFIX"_pos".csv $out/production_files/$PREFIX"_pos.csv" - cp $PREFIX.step $out/production_files/$PREFIX.step - cp $PREFIX"_gerber_drill".zip $out/production_files/$PREFIX"_gerber_drill".zip - - cp $PREFIX.step $out/production_files/$PREFIX.step + mkdir -p $out + cp $PREFIX"_bom".csv $out/$PREFIX"_bom".csv ''; }; + step = pkgs.stdenv.mkDerivation { + name = "step"; + src = ./kirdy_LD_adapter_${variant}; + + nativeBuildInputs = [ pkgs.kicad pkgs.python3 ]; + + SCH = "kirdy_LD_adapter_${variant}.kicad_sch"; + PCB = "kirdy_LD_adapter_${variant}.kicad_pcb"; + + buildPhase = '' + # kicad-cli requires the use of $HOME + export HOME=$(mktemp -d tmp.XXXX) + + # Get Revision Number from the Title Block in KiCAD PCB + REV=$(cat $SCH | grep rev | cut -d'"' -f 2) + PREFIX=kirdy_LD_adapter_${variant}_$REV + + export KICAD7_3DMODEL_DIR=${pkgs.kicad.libraries.packages3d}/share/kicad/3dmodels + kicad-cli pcb export step $PCB --subst-models --force -o $PREFIX.step + ''; + + installPhase = '' + mkdir -p $out + cp $PREFIX.step $out/$PREFIX.step + ''; + }; + + pos = pkgs.stdenv.mkDerivation { + name = "pos"; + src = ./kirdy_LD_adapter_${variant}; + + nativeBuildInputs = [ pkgs.kicad ]; + + SCH = "kirdy_LD_adapter_${variant}.kicad_sch"; + PCB = "kirdy_LD_adapter_${variant}.kicad_pcb"; + + buildPhase = '' + # kicad-cli requires the use of $HOME + export HOME=$(mktemp -d tmp.XXXX) + + # Get Revision Number from the Title Block in KiCAD PCB + REV=$(cat $SCH | grep rev | cut -d'"' -f 2) + PREFIX=kirdy_LD_adapter_${variant}_$REV + + kicad-cli pcb export pos $PCB --format csv --units mm -o $PREFIX"_pos".csv + ''; + + installPhase = '' + mkdir -p $out + cp $PREFIX"_pos".csv $out/$PREFIX"_pos.csv" + ''; + }; + + gerber_and_drill = pkgs.stdenv.mkDerivation { + name = "gerber_and_drill"; + src = ./kirdy_LD_adapter_${variant}; + + nativeBuildInputs = [ pkgs.kicad pkgs.zip ]; + + SCH = "kirdy_LD_adapter_${variant}.kicad_sch"; + PCB = "kirdy_LD_adapter_${variant}.kicad_pcb"; + + buildPhase = '' + # kicad-cli requires the use of $HOME + export HOME=$(mktemp -d tmp.XXXX) + + # Get Revision Number from the Title Block in KiCAD Top Schematics + REV=$(cat $SCH | grep rev | cut -d'"' -f 2) + PREFIX=kirdy_LD_adapter_${variant}_$REV + + mkdir -p $PREFIX"_gerber" + kicad-cli pcb export gerbers $PCB -l 'F.Cu,B.Cu,F.Paste,B.Paste,F.Silkscreen,B.Silkscreen,F.Mask,B.Mask,Edge.Cuts' --no-x2 --subtract-soldermask -o ./$PREFIX"_gerber" + + mkdir -p $PREFIX"_drill" + # The additional trailing slash is due to a bug in the kicad-cli tool. https://gitlab.com/kicad/code/kicad/-/issues/14438 + kicad-cli pcb export drill $PCB -u mm --generate-map --map-format gerberx2 -o ./$PREFIX"_drill"/ + ''; + + installPhase = '' + mkdir -p $out + cp -r $PREFIX"_gerber" $out/ + cp -r $PREFIX"_drill" $out/ + ''; + }; + + pdf = pkgs.stdenv.mkDerivation { + name = "pdf"; + src = ./kirdy_LD_adapter_${variant}; + + nativeBuildInputs = [ pkgs.kicad ]; + + SCH = "kirdy_LD_adapter_${variant}.kicad_sch"; + + buildPhase = '' + # kicad-cli requires the use of $HOME + export HOME=$(mktemp -d tmp.XXXX) + + # Get Revision Number from the Title Block in KiCAD Top Schematics + REV=$(cat $SCH | grep rev | cut -d'"' -f 2) + PREFIX=kirdy_LD_adapter_${variant}_$REV + + kicad-cli sch export pdf $SCH -o $PREFIX.pdf + ''; + + installPhase = '' + mkdir -p $out + cp $PREFIX.pdf $out/$PREFIX.pdf + ''; + }; + + all_prod_files = + pkgs.runCommand "LD_adapter_${variant}_all_prod_files" { + buildInputs = [ ]; + } '' + mkdir -p $out + ln -s ${pdf}/$(ls ${pdf} | grep "pdf") $out + ln -s ${bom}/$(ls ${bom} | grep ".csv") $out + ln -s ${pos}/$(ls ${pos} | grep ".csv") $out + ln -s ${step}/$(ls ${step} | grep ".step") $out + ln -s ${gerber_and_drill}/$(ls ${gerber_and_drill} | grep "gerber") $out + ln -s ${gerber_and_drill}/$(ls ${gerber_and_drill} | grep "drill") $out + ''; + copper_plate_production_files = pkgs.stdenv.mkDerivation { name = "production-files"; src = ./kirdy_LD_adapter_copper_plate; nativeBuildInputs = [ pkgs.kicad pkgs.zip pkgs.python3 ]; + PCB = "kirdy_LD_adapter_copper_plate.kicad_pcb"; + buildPhase = '' # kicad-cli requires the use of $HOME - TMP_DIR="$(pwd)/$(mktemp -d tmp.XXXX)" - export HOME=$TMP_DIR - - PCB=kirdy_LD_adapter_copper_plate.kicad_pcb + export HOME=$(mktemp -d tmp.XXXX) # Get Revision Number from the Title Block in KiCAD PCB REV=$(cat $PCB | grep rev | cut -d'"' -f 2) @@ -83,19 +180,22 @@ export KICAD7_3DMODEL_DIR=${pkgs.kicad.libraries.packages3d}/share/kicad/3dmodels kicad-cli pcb export step $PCB --subst-models --force -o $PREFIX.step - - rm -r $TMP_DIR ''; installPhase = '' - mkdir -p $out/production_files - cp $PREFIX.step $out/production_files/$PREFIX.step + mkdir -p $out + + cp $PREFIX.step $out/$PREFIX.step ''; }; - in { - "LD_adapter_${variant}_PCB" = adapter_production_files; - "LD_adapter_${variant}_copper_plate" = copper_plate_production_files; + "LD_adapter_${variant}_step" = step; + "LD_adapter_${variant}_gerber_and_drill" = gerber_and_drill; + "LD_adapter_${variant}_bom" = bom; + "LD_adapter_${variant}_pos" = pos; + "LD_adapter_${variant}_pdf" = pdf; + "LD_adapter_${variant}_all_prod_files" = all_prod_files; + "LD_adapter_copper_plate" = copper_plate_production_files; }; in rec {