Open source pen plotter. You feed it SVG or movement code and it draws. I am trying to drive it with Paper.js right now, but it can be programmed using a few other tools as well. There is an Inkscape extension which can drive it, but Fedora Linux ships Inkscape 1.0 beta, and the extension doens't work with that yet. In theory I could have used Flatpak to install 0.92, but I had issues getting the right libraries installed in to it without a full Flatpak build environment.
The Axidraw doesn't support the full set of features in SVG
, I don't know exactly what
they support right now. I feel like I'm starting to hit the edges of
what I can do with Paper.js, frankly, so
I might play with Weir instead. I want to do more organized compositions
along with generative art, so we'll see what the correct set of tools
ends up looking like.
There are some other tools to evaluate in generating SVGs which can print:
- fogleman/ln in Golang.
- penplot in JavaScript.
Installing the Inkscape plugin in Nix home-manager
I would really love not having to specify the files to copy here
lmao. This does not install support for eggbot or watercolorbot, sorry.
Also this is going to conflict with other home.file
-needers. This whole "have a org-roam keyword for
each home-manager stanza" isn't really
going to work… :/
{pkgs, ...}:
let
zipDir = "ad-ink_322_r0-ink12";
inkscapeAxidraw = pkgs.stdenv.mkDerivation {
name = "inkscape-axidraw-plugin";
src = builtins.fetchurl {
url = "https://cdn.evilmadscientist.com/dl/ad/public/${zipDir}.zip";
sha256 = "0wpg5k10k04110xqnq2zs3vcbdd15n4k0qzkvgr6l48di3vfl0qy";
};
buildInputs = [pkgs.unzip];
unpackPhase = ''
${pkgs.unzip}/bin/unzip $src
'';
patchPhase = ''
substituteInPlace ad-ink_322_r0-ink12/axidraw_hatch.inx \
--replace '<param name="aboutpage_7" type="description" indent="2">' \
'<_param name="aboutpage_7" type="description" indent="2">'
'';
installPhase = ''
mkdir -p $out
cp -r ${zipDir}/* $out/
'';
};
in
{
home.packages = [
pkgs.inkscape];
home.file.".config/inkscape/extensions/axidraw_deps".source = "${inkscapeAxidraw}/axidraw_deps";
home.file.".config/inkscape/extensions/axidraw_deps".recursive = true;
home.file.".config/inkscape/extensions/svg_fonts".source = "${inkscapeAxidraw}/svg_fonts";
home.file.".config/inkscape/extensions/svg_fonts".recursive = true;
home.file.".config/inkscape/extensions/axidraw.inx".source = "${inkscapeAxidraw}/axidraw.inx";
home.file.".config/inkscape/extensions/axidraw_conf.py".source = "${inkscapeAxidraw}/axidraw_conf.py";
home.file.".config/inkscape/extensions/axidraw_control.py".source = "${inkscapeAxidraw}/axidraw_control.py";
home.file.".config/inkscape/extensions/axidraw_disableMotors.inx".source = "${inkscapeAxidraw}/axidraw_disableMotors.inx";
home.file.".config/inkscape/extensions/axidraw_hatch.inx".source = "${inkscapeAxidraw}/axidraw_hatch.inx";
home.file.".config/inkscape/extensions/axidraw_naming.inx".source = "${inkscapeAxidraw}/axidraw_naming.inx";
home.file.".config/inkscape/extensions/axidraw_naming.py".source = "${inkscapeAxidraw}/axidraw_naming.py";
home.file.".config/inkscape/extensions/axidraw_svg_reorder.inx".source = "${inkscapeAxidraw}/axidraw_svg_reorder.inx";
home.file.".config/inkscape/extensions/axidraw_svg_reorder.py".source = "${inkscapeAxidraw}/axidraw_svg_reorder.py";
home.file.".config/inkscape/extensions/hershey_axi_ink1.inx".source = "${inkscapeAxidraw}/hershey_axi_ink1.inx";
home.file.".config/inkscape/extensions/plot_utils_import.py".source = "${inkscapeAxidraw}/plot_utils_import.py";
home.file.".config/inkscape/extensions/eggbot_hatch.py".source = "${inkscapeAxidraw}/eggbot_hatch.py";
}