import packages

This commit is contained in:
Robin Appelman 2025-12-12 17:40:34 +01:00
commit c6e8d5e0cf
5 changed files with 6203 additions and 0 deletions

118
default.nix Normal file
View file

@ -0,0 +1,118 @@
{
lib,
fetchFromGitea,
rustPlatform,
callPackage,
pkg-config,
cmake,
ninja,
makeWrapper,
rustfmt,
clipper2,
xorg,
vulkan-loader,
wayland,
libxkbcommon,
egl-wayland,
package ? "",
}: let
inherit (lib) getExe recursiveUpdate makeLibraryPath;
packages = {
"" = {
pname = "microcad";
cargoBuildFlags = "--bin microcad --package microcad";
postInstall = ''
mkdir $out/share
cp -r crates/std/lib $out/share
'';
meta.mainProgram = "microcad";
};
"lsp" = {
pname = "microcad-lsp";
cargoBuildFlags = "--bin microcad-lsp --package microcad-lsp";
meta.mainProgram = "microcad-lsp";
};
"viewer" = {
pname = "microcad-viewer";
cargoBuildFlags = "--bin microcad-viewer --package microcad-viewer";
meta.mainProgram = "microcad-viewer";
nativeBuildInputs = [
pkg-config
cmake
ninja
rustfmt
clipper2
makeWrapper
];
runtimeDependenciesPath = makeLibraryPath [
xorg.libX11
xorg.libXcursor
xorg.libXrandr
xorg.libXi
vulkan-loader
wayland
libxkbcommon
egl-wayland
];
postInstall = ''
mkdir $out/share
cp -r crates/std/lib $out/share
wrapProgram $out/bin/microcad-viewer \
--prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib/:$runtimeDependenciesPath"
'';
};
};
manifold-rs = callPackage ./manifold-rs.nix {};
in
rustPlatform.buildRustPackage (finalAttrs: (recursiveUpdate {
version = "0.2.18";
src = fetchFromGitea {
domain = "codeberg.org";
owner = "microcad";
repo = "microcad";
rev = "v${finalAttrs.version}";
hash = "sha256-FNjGXYUui50S2BTutRQlLljo6afsTeDQ5cxtobxlJy4=";
};
postPatch = ''
# untill a 0.6.5 is released and used
echo "[patch.crates-io]" >> Cargo.toml
echo "manifold-rs = { path = '${manifold-rs}' }" >> Cargo.toml
'';
cargoHash = "sha256-B/ylabtSQB3dyAMZkYEAL8bXBirhdCrzmDqeyhSn8eQ=";
preBuild = ''
export STDLIB_PATH="$out/share/lib"
'';
RUSTFMT = getExe rustfmt;
CLIPPER_DYNAMIC = 1;
nativeBuildInputs = [
pkg-config
cmake
ninja
rustfmt
clipper2
];
buildInputs = [
clipper2
];
dontUseCmakeConfigure = true;
dontUseNinjaBuild = true;
dontUseNinjaInstall = true;
dontUseNinjaCheck = true;
meta = with lib; {
description = "Modern programming language for CAD";
homepage = "https://microcad.xyz/";
license = licenses.agpl3Only;
};
}
packages.${package}))

55
manifold-rs.nix Normal file
View file

@ -0,0 +1,55 @@
{
lib,
fetchpatch,
stdenvNoCC,
runCommand,
fetchurl,
}: let
# From crate2nix
unpacked = sha256: source:
assert builtins.isString sha256;
assert builtins.isAttrs source;
runCommand (lib.removeSuffix ".tar.gz" source.name) {}
''
mkdir -p $out
tar -xzf ${source} --strip-components=1 -C $out
echo '{"package":"${sha256}","files":{}}' > $out/.cargo-checksum.json
'';
crateSource = package:
assert builtins.isAttrs package;
with package;
unpacked sha256 (fetchurl {
name = "crates-io-${name}-${version}.tar.gz";
url = "https://crates.io/api/v1/crates/${name}/${version}/download";
inherit sha256;
});
in
stdenvNoCC.mkDerivation rec {
pname = "manifold-rs";
version = "0.6.4";
src = crateSource {
name = pname;
version = version;
sha256 = "sha256-ICxDQvE7xhlQJKcpaB8blZE4gSaC5Z7JQ1Q25Gr8TP0=";
};
patches = [
(fetchpatch {
name = "dynamic-clipper.patch";
url = "https://github.com/WilstonOreo/manifold-rs/commit/cba6b155f714a58777d7f0d45734aa1388265ec6.patch";
hash = "sha256-fbhlUEopvOTx6dkAbr3YTryR295zGDB6icnclCAeav0=";
})
];
installPhase = ''
cp -r . $out
'';
meta = with lib; {
description = "Cxx-Rust wrapper for Manifold";
homepage = "https://github.com/WilstonOreo/manifold-rs";
license = licenses.asl20;
};
}

10
overlay.nix Normal file
View file

@ -0,0 +1,10 @@
final: prev: {
microcad = final.callPackage ./default.nix {};
microcad-viewer = final.callPackage ./default.nix {
package = "viewer";
};
microcad-lsp = final.callPackage ./default.nix {
package = "lsp";
};
microcad-vscode = final.callPackage ./vscode.nix {};
}

5950
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

70
vscode.nix Normal file
View file

@ -0,0 +1,70 @@
{
vscode-utils,
microcad,
nodejs,
vsce,
importNpmLock,
stdenvNoCC,
microcad-lsp,
lib,
}: let
inherit (builtins) fromJSON readFile;
inherit (lib) getExe;
packageLock = fromJSON (readFile ./package-lock.json);
node_modules = importNpmLock.buildNodeModules {
inherit nodejs packageLock;
npmRoot = microcad.src + "/editors/vscode";
};
vsix = stdenvNoCC.mkDerivation (finalAttrs: {
name = "microcad-${finalAttrs.version}.zip";
pname = "microcad-vsix";
inherit (packageLock) version;
src = microcad.src + "/editors/vscode";
postPatch = ''
cp ${./package-lock.json} package-lock.json
substituteInPlace src/extension.ts --replace-fail 'serverCommand = "microcad-lsp"' 'serverCommand = "${getExe microcad-lsp}"'
'';
nativeBuildInputs = [
nodejs
vsce
];
buildInputs = [
microcad-lsp
];
preBuild = ''
ln -s ${node_modules}/node_modules .
'';
buildPhase = ''
runHook preBuild
ls -l node_modules
vsce package
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp ./microcad-$version.vsix $out
runHook postInstall
'';
});
in
vscode-utils.buildVscodeExtension (finalAttrs: {
pname = "microcad";
inherit (finalAttrs.src) version;
src = vsix;
vscodeExtName = "microcad";
vscodeExtPublisher = "microcad";
vscodeExtUniqueId = "${finalAttrs.vscodeExtPublisher}.${finalAttrs.vscodeExtName}";
})