nix-overlay/default.nix

83 lines
2.5 KiB
Nix
Raw Normal View History

2024-06-28 09:18:26 +00:00
{ mkDerivation, pkgs, mayo, wrapQtAppsHook, lib, rbs-workbench, cad-gen, cg-gen }:
let
step2stl =
name: file:
let
pname = "${name}.stl";
extension = lib.last (lib.strings.splitString "." file);
in
lib.throwIfNot
(lib.elem extension ["step" "STEP" "stp"])
''Input file have a "${extension}" extension, but valid STEP-file should have one of the following extentions: "step" "STEP" "stp"''
mkDerivation {
inherit pname;
version = "v0";
src = ./.;
nativeBuildInputs = [ mayo wrapQtAppsHook ];
buildPhase = ''${lib.getExe mayo} ${file} -e ${pname}'';
installPhase = ''
cp ${pname} $out
rm ${pname}
'';
};
2024-06-28 09:18:26 +00:00
freecad2parts =
file:
let
pname = "${file}-parts";
extension = lib.last (lib.strings.splitString "." file);
cad_export_script = pkgs.writers.writePython3 "cad_export_script.py"
{ libraries = [ rbs-workbench ]; }
''
import FreeCAD as App
import freecad.robossembler.utils.freecad_exporters as rbs
import sys
path = sys.argv[4]
print(path)
doc = App.openDocument(path)
rbs.publish_project_database(doc)
App.closeDocument(doc.Name)
'';
in
lib.throwIfNot
(lib.elem extension ["FCStd"])
''Input file have a "${extension}" extension, but valid FreeCAD file should have "FCStd" extention''
mkDerivation rec {
inherit pname;
version = "unstable";
src = ./.;
nativeBuildInputs = [ cad-gen pkgs.freecad ] ++ pkgs.freecad.buildInputs;
buildInputs = [ ];
dontWrapQtApps = true;
buildPhase = ''
export PYTHONPATH="${rbs-workbench}/${pkgs.python3.sitePackages}"
${pkgs.freecad}/bin/freecadcmd ${cad_export_script} -- --pass $1
#${pkgs.freecad}/bin/freecadcmd -h
#${cad-gen}/bin/cad-gen ${file}
mv parts* trees* $out
'';
};
parts-packages =
parts-package:
let
parts = lib.trivial.importJSON "${parts-package.src}/parts.json";
pkgSet = builtins.listToAttrs (map ({ material_path, name, part_path }: { inherit name; value = part_path; }) parts );
mkPkg =
{ name, value }:
mkDerivation {
src = "${parts-package}";
pname = name;
installPhase = ''
outputs = [ "stl" ];
ln ${parts-package}/${value} $stl
'';
};
in
lib.lists.forEach mkPkg pkgSet;
rlib = { inherit step2stl freecad2parts parts-packages; };
in
2024-06-28 09:18:26 +00:00
rlib