Something went wrong. Try again.
atproto Thingiverse but good
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230{ description = "polymodel: AT Protocol-native model/project sharing app built with Rust/Dioxus/Jacquard";
inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; # Use nixpkgs dioxus-cli; do not import the upstream Dioxus flake because it may be ahead of Cargo.toml.
};
outputs = { self, nixpkgs, flake-utils, rust-overlay,
... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay)
]; };
rustToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override { targets = ["wasm32-unknown-unknown"]; extensions = [ "rust-src" "rust-analyzer" "clippy" "rustfmt" ]; });
ldparseRev = "0fe78dcee22982f26cceced1b483340faa4d04e9"; immerRev = "141af37e46a75fce48318b13bf2bf71f51950de8"; coroutinesRev = "a26a43912319fd2c40823dc96755990da765bc8f"; ldparse = pkgs.fetchFromGitHub { owner = "elfprince13"; repo = "LDParse"; rev = ldparseRev; sha256 = "04frdxpb6kvrzggvbfq66cb95w7g6lf7yzyqaw3qyqvsnqbyw7r0"; }; immerSrc = pkgs.fetchFromGitHub { owner = "arximboldi"; repo = "immer"; rev = immerRev; sha256 = "10drhxqgr6pp4bih9kbcdk0x39gdz8r85zryfydisqq7gwp4ibfz"; }; coroutinesSrc = pkgs.fetchFromGitHub { owner = "Geopipe"; repo = "CxxBidirectionalCoroutines"; rev = coroutinesRev; sha256 = "10bdz6l5i1qgniysgm7fmrds76yh9kj59wfv7zk9kzvj76qqkdpq"; }; ldrawParts = pkgs.stdenv.mkDerivation { pname = "ldraw-parts"; version = "2026-06"; src = pkgs.fetchurl { url = "https://library.ldraw.org/library/updates/complete.zip"; sha256 = "sha256-YAny6UIExNOmOkyBIBC1yQutjFrLGbiCyFn9rGNzTq4="; }; nativeBuildInputs = [ pkgs.unzip ]; unpackPhase = "unzip $src"; installPhase = '' runHook preInstall mkdir -p $out cp -r ldraw/* $out/ runHook postInstall ''; }; ldrawOracle = pkgs.stdenv.mkDerivation { pname = "ldraw-oracle"; version = ldparseRev; src = ldparse; nativeBuildInputs = [ pkgs.cmake pkgs.pkg-config pkgs.makeWrapper ]; buildInputs = [ pkgs.boost pkgs.glm pkgs.fmt ]; patches = [ ./patches/ldparse-oracle-access.patch ./patches/ldparse-geometry-accumulation.patch ]; cmakeFlags = [ "-DCMAKE_POLICY_VERSION_MINIMUM=3.5" ]; postPatch = '' test "${ldparseRev}" = "0fe78dcee22982f26cceced1b483340faa4d04e9" # Place separately-fetched submodules into deps/ rm -rf deps/immer deps/CxxBidirectionalCoroutines cp -r ${immerSrc} deps/immer cp -r ${coroutinesSrc} deps/CxxBidirectionalCoroutines # Disable face-unwrapper (not needed for oracle) and fix case mismatch: # GitHub archive has ParseTest/ but CMakeLists references lowercase parsetest sed -i '/add_subdirectory(face-unwrapper)/d' CMakeLists.txt sed -i '/add_subdirectory(parsetest)/d' CMakeLists.txt # GCC 15 requires explicit <memory> include for std::unique_ptr in Cache.hpp sed -i '1i #include <memory>' include/LDParse/Cache.hpp # GCC 15 requires explicit lambda capture for offset in Geom.hpp sed -i 's/\[\](uint32_t &index){ index += offset; }/[offset](uint32_t \&index){ index += offset; }/' include/LDParse/Geom.hpp # Callbacks can be invoked after an MPD NOFILE retargets them to nullptr. # Ignore those stale parser events instead of asserting in the oracle. sed -i 's/assert((mTarget != nullptr) \&\& "Invalid target");/if(!mTarget) return R();/' include/LDParse/ModelBuilder/ModelBuilderDefs.hpp cp ${./tools/ldraw-oracle/oracle.cpp} oracle.cpp ''; buildPhase = '' runHook preBuild cmake --build . --parallel "$NIX_BUILD_CORES" ldparse_lib=$(find . -type f -name 'libLDParse.so*' -print -quit) test -n "$ldparse_lib" ldparse_lib_dir=$(dirname "$ldparse_lib") c++ -std=c++17 -I../include -I../deps/immer -I../deps/CxxBidirectionalCoroutines/include -I${pkgs.boost.dev}/include -I${pkgs.glm}/include -I${pkgs.fmt.dev}/include ${./tools/ldraw-oracle/oracle.cpp} -L"$ldparse_lib_dir" -Wl,-rpath,"\$$ORIGIN/../lib" -lLDParse -lboost_filesystem -o ldraw-oracle runHook postBuild ''; installPhase = '' runHook preInstall ldparse_lib=$(find . -type f -name 'libLDParse.so*' -print -quit) test -n "$ldparse_lib" install -Dm755 "$ldparse_lib" "$out/lib/$(basename "$ldparse_lib")" install -Dm755 ldraw-oracle $out/bin/ldraw-oracle install -Dm644 ${./tools/ldraw-oracle/oracle.cpp} $out/share/ldraw-oracle/oracle.cpp install -Dm644 ${./patches/ldparse-oracle-access.patch} $out/share/ldraw-oracle/ldparse-oracle-access.patch cat > $out/share/ldraw-oracle/provenance.txt <<EOF LDParse revision: ${ldparseRev} immer revision: ${immerRev} CxxBidirectionalCoroutines revision: ${coroutinesRev} Oracle schema: ldraw-oracle-v1 EOF wrapProgram $out/bin/ldraw-oracle \ --set LD_LIBRARY_PATH "$out/lib:${pkgs.lib.makeLibraryPath [ pkgs.boost pkgs.stdenv.cc.cc ]}" \ --set LDRAWDIR "${ldrawParts}" runHook postInstall ''; }; in { packages.ldraw-oracle = ldrawOracle; packages.ldraw-parts = ldrawParts; packages.default = ldrawOracle; devShells.default = pkgs.mkShell { packages = with pkgs; [ rustToolchain rust-analyzer cargo-nextest cargo-insta cargo-bloat # Provides the `cargo sqlx` subcommand (package name in nixpkgs is sqlx-cli). sqlx-cli
dioxus-cli wasm-bindgen-cli wasm-pack binaryen.out wabt twiggy
llvmPackages_18.clang-unwrapped llvmPackages_18.llvm llvmPackages_18.libclang llvmPackages_18.bintools-unwrapped
sqlite pkg-config openssl patchelf
nodejs esbuild chromium chromedriver playwright-driver.browsers
just jq nixd alejandra ];
nativeBuildInputs = with pkgs; [ llvmPackages_18.clang-unwrapped llvmPackages_18.bintools-unwrapped rustPlatform.bindgenHook ];
buildInputs = with pkgs; [ sqlite pkg-config openssl ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
RUST_BACKTRACE = "1"; NIX_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc pkgs.openssl pkgs.sqlite ]; NIX_LD = pkgs.lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker";
PLAYWRIGHT_BROWSERS_PATH = "${pkgs.playwright-driver.browsers}"; PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1"; PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = true; PLAYWRIGHT_HOST_PLATFORM_OVERRIDE = "ubuntu-24.04";
shellHook = '' export PATH="${pkgs.dioxus-cli}/bin:${pkgs.wasm-bindgen-cli}/bin:$PATH"; export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$NIX_LD_LIBRARY_PATH" export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER="wasm-bindgen-test-runner" export CHROME="${pkgs.chromium}/bin/chromium" export CC_wasm32_unknown_unknown="${pkgs.llvmPackages_18.clang-unwrapped}/bin/clang" export AR_wasm32_unknown_unknown="${pkgs.llvmPackages_18.bintools-unwrapped}/bin/llvm-ar"
CLANG_MAJOR_VERSION="18" CLANG_RESOURCE_DIR="${pkgs.llvmPackages_18.clang-unwrapped}/lib/clang/$CLANG_MAJOR_VERSION" LIBCLANG_INCLUDE="${pkgs.llvmPackages_18.libclang.lib}/lib/clang/$CLANG_MAJOR_VERSION/include"
export LIBCLANG_PATH="${pkgs.llvmPackages_18.libclang.lib}/lib" export BINDGEN_EXTRA_CLANG_ARGS="-isystem ${pkgs.glibc.dev}/include -isystem $LIBCLANG_INCLUDE" export CFLAGS_wasm32_unknown_unknown="-isystem $LIBCLANG_INCLUDE -resource-dir $CLANG_RESOURCE_DIR" export CPPFLAGS="-isystem $LIBCLANG_INCLUDE -resource-dir $CLANG_RESOURCE_DIR"
echo "polymodel dev shell: Rust + Dioxus + Jacquard + SQLite + Playwright" ''; }; });}