chore(build123d): create the build123d scafold that is not yet working

This commit is contained in:
2026-04-26 19:56:29 -05:00
parent fbaed7851b
commit e2f2abb1ac
10 changed files with 660 additions and 0 deletions
+167
View File
@@ -0,0 +1,167 @@
{
flake-parts-lib,
inputs,
...
}: {
flake = {
templates = {
build123d = {
path = ./template;
description = "A python flake with a build132d parametric cad setup";
};
};
flakeModules.build123d = {
imports = [
inputs.treefmt-nix.flakeModule
];
options.perSystem = flake-parts-lib.mkPerSystemOption ({
lib,
config,
pkgs,
self',
...
}: let
cfg = config.krantz.build123d;
python = pkgs.python3.override {
self = python;
packageOverrides = pyfinal: pyprev: {
build123d = pyfinal.callPackage ./packages/build123d.nix {};
cadquery-ocp = pyfinal.callPackage ./packages/cadquery-ocp.nix {};
cadquery-ocp-proxy = pyfinal.callPackage ./packages/cadquery-ocp-proxy.nix {};
ocp-gordon = pyfinal.callPackage ./packages/ocp-gordon.nix {};
ocpsvg = pyfinal.callPackage ./packages/ocpsvg.nix {};
trianglesolver = pyfinal.callPackage ./packages/trianglesolver.nix {};
};
};
in {
options.krantz.build123d = {
enable = lib.mkEnableOption "building a cargo project with crane";
# src = lib.mkOption {
# description = "The path to the root of the crate.";
# type = lib.types.path;
# example = lib.literalExpression "./.";
# };
# srcFiltered = lib.mkOption {
# description = "A path to the filtered directory of the root of the crate.";
# type = lib.types.path;
# default = craneLib.cleanCargoSource cfg.src;
# defaultText = lib.literalExpression "config.krantz.rust.craneLib cfg.src";
# example = lib.literalExpression "./.";
# };
#
# runtimeDeps = lib.mkOption {
# description = "Packages needed for the app to run.";
# type = lib.types.listOf lib.types.package;
# default = [];
# example = with pkgs; [
# openssl
# ];
# };
# buildDeps = lib.mkOption {
# description = "Packages needed for the app to build.";
# type = lib.types.listOf lib.types.package;
# default = [];
# example = with pkgs; [
# pkg-config
# rustPlatform.bindgenHook
# ];
# };
# devDeps = lib.mkOption {
# description = "Packages to include only in the devShell.";
# type = lib.types.listOf lib.types.package;
# default = with pkgs; [
# rust-analyzer
# ];
# };
#
# devShell = {
# enable = lib.mkEnableOption "a rust development environment" // {default = true;};
#
# name = lib.mkOption {
# description = "The name of the attribute in devShells to configure";
# type = lib.types.str;
# default = "default";
# example = "rust";
# };
#
# extraAttrs = lib.mkOption {
# description = "Extra attributes to merge into the devshell. See https://crane.dev/API.html#cranelibdevshell";
# type = lib.types.attrs;
# default = {};
# example = {
# shellHook = ''
# export DEBUG=1
# '';
# };
# };
# };
#
# package = {
# enable = lib.mkEnableOption "the compiled cargo project" // {default = true;};
#
# name = lib.mkOption {
# description = "The name of the attribute in packages to configure";
# type = lib.types.str;
# default = "default";
# example = "lib";
# };
#
# extraAttrs = lib.mkOption {
# description = "Extra attributes to merge into the package. See https://crane.dev/API.html#cranelibbuildpackage";
# type = lib.types.attrs;
# default = {};
# example = {
# doCheck = false;
# };
# };
# };
#
# craneLib = lib.mkOption {
# description = "The crane lib instance this module is using. Useful for overriding options";
# default = craneLib;
# defaultText = lib.literalExpression "crane.mkLib pkgs";
# readOnly = true;
# };
};
config = lib.mkIf cfg.enable {
# Dev Shell that lets you enter an environment with all the necessary utilites
# Available through 'nix develop'
# Also can be activated automatically if direnv is installed on the system with 'direnv allow'
# devShells.${cfg.devShell.name} = lib.mkIf cfg.devShell.enable (pkgs.mkShell {
# # extra tooling dependencies
# packages = cfg.devDeps;
#
# inputsFrom = [self'.packages.${cfg.package.name}];
# }
# // cfg.devShell.extraAttrs);
devShells.default = pkgs.mkShell {
# extra tooling dependencies
packages = [
(python.withPackages (p:
with p; [
build123d
]))
];
};
# Formatter for nix files, available through 'nix fmt'
treefmt = {
programs.alejandra.enable = lib.mkDefault true;
};
# Your custom packages
# Accessible through 'nix build', 'nix shell', 'nix run', etc
# packages.${cfg.package.name} = lib.mkIf cfg.package.enable ( {
# inherit src buildInputs nativeBuildInputs cargoArtifacts;
# }
# // cfg.package.extraAttrs);
};
});
};
};
}
+59
View File
@@ -0,0 +1,59 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
cadquery-ocp,
numpy,
svgpathtools,
anytree,
ezdxf,
ipython,
lib3mf,
ocpsvg,
ocp-gordon,
trianglesolver,
sympy,
scipy,
webcolors,
}:
buildPythonPackage
rec {
pname = "build123d";
version = "0.10.0";
src = fetchPypi {
inherit pname version;
hash = "sha256-c97Tjdyo67lefdB4rD16rMjKQvzo8dF28QQONfuk9gg=";
};
# do not run tests
doCheck = false;
buildInputs = [
cadquery-ocp
numpy
svgpathtools
anytree
ezdxf
ipython
lib3mf
ocpsvg
ocp-gordon
trianglesolver
sympy
scipy
webcolors
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
setuptools
setuptools-scm
wheel
];
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
}:
buildPythonPackage
rec {
pname = "cadquery-ocp-proxy";
version = "7.9.3.1";
src = fetchPypi {
inherit pname version;
hash = "sha256-c97Tjdyo67lefdB4rD16rMjKQvzo8dF28QQONfuk9gg=";
};
# do not run tests
doCheck = false;
buildInputs = [
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
# setuptools
# setuptools-scm
# wheel
];
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
}:
buildPythonPackage
rec {
pname = "cadquery-ocp";
version = "7.9.3.1";
src = fetchPypi {
inherit pname version;
hash = "sha256-c97Tjdyo67lefdB4rD16rMjKQvzo8dF28QQONfuk9gg=";
};
# do not run tests
doCheck = false;
buildInputs = [
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
# setuptools
# setuptools-scm
# wheel
];
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
}:
buildPythonPackage
rec {
pname = "ocp-gordon";
version = "0.2.0";
src = fetchPypi {
inherit pname version;
hash = "sha256-c97Tjdyo67lefdB4rD16rMjKQvzo8dF28QQONfuk9gg=";
};
# do not run tests
doCheck = false;
buildInputs = [
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
# setuptools
# setuptools-scm
# wheel
];
}
+37
View File
@@ -0,0 +1,37 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
cadquery-ocp-proxy,
svgelements,
}:
buildPythonPackage
rec {
pname = "ocpsvg";
version = "0.6.0";
src = fetchPypi {
inherit pname version;
hash = "sha256-8I2kNHzJDs01ZTlem9pXRtRquKr9aiaBuwOpwyG1QDk=";
};
# do not run tests
doCheck = false;
buildInputs = [
cadquery-ocp-proxy
svgelements
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
setuptools
setuptools-scm
# wheel
];
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
wheel,
# runtime deps
}:
buildPythonPackage
rec {
pname = "trianglesolver";
version = "1.2";
src = fetchPypi {
inherit pname version;
hash = "sha256-SvGKreV51cDWQ4mz5lrq8Gz/JjGXYszYWeMmhVmnauo=";
};
# do not run tests
doCheck = false;
buildInputs = [
];
# specific to buildPythonPackage, see its reference
pyproject = true;
build-system = [
setuptools
# setuptools-scm
# wheel
];
}
+224
View File
@@ -0,0 +1,224 @@
# Generated by nix
.direnv/
result
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
*.lcov
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
# Pipfile.lock
# UV
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# uv.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
# poetry.lock
# poetry.toml
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
# pdm.lock
# pdm.toml
.pdm-python
.pdm-build/
# pixi
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
# pixi.lock
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
# in the .venv directory. It is recommended not to include this directory in version control.
.pixi/*
!.pixi/config.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule*
celerybeat.pid
# Redis
*.rdb
*.aof
*.pid
# RabbitMQ
mnesia/
rabbitmq/
rabbitmq-data/
# ActiveMQ
activemq-data/
# SageMath parsed files
*.sage.py
# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
# .idea/
# Abstra
# Abstra is an AI-powered process automation framework.
# Ignore directories containing user credentials, local state, and settings.
# Learn more at https://abstra.io/docs
.abstra/
# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/
# Temporary file for partial code execution
tempCodeRunnerFile.py
# Ruff stuff:
.ruff_cache/
# PyPI configuration file
.pypirc
# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/
# Streamlit
.streamlit/secrets.toml
+38
View File
@@ -0,0 +1,38 @@
{
description = "made with build123d";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
project-templates = {
url = "path:///home/reed/code/project-templates";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
};
outputs = {
flake-parts,
project-templates,
...
} @ inputs:
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
project-templates.flakeModules.build123d
];
systems = ["aarch64-linux" "x86_64-linux" "aarch64-darwin"];
perSystem = {pkgs, ...}: {
krantz.build123d = {
enable = true;
# src = ./.;
# runtimeDeps = with pkgs; [];
# buildDeps = with pkgs; [];
};
};
};
}
+3
View File
@@ -17,6 +17,9 @@
outputs = {flake-parts, ...} @ inputs:
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
flake-parts.flakeModules.flakeModules
./build123d
./rust
];