atproto Thingiverse but good
1{
2 description = "polymodel: AT Protocol-native model/project sharing app built with Rust/Dioxus/Jacquard";
3
4 inputs = {
5 nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
6 flake-utils.url = "github:numtide/flake-utils";
7 rust-overlay.url = "github:oxalica/rust-overlay";
8 # Use nixpkgs dioxus-cli; do not import the upstream Dioxus flake because it may be ahead of Cargo.toml.
9
10
11
12 };
13
14 outputs = {
15 self,
16 nixpkgs,
17 flake-utils,
18 rust-overlay,
19
20 ...
21 }:
22 flake-utils.lib.eachDefaultSystem (system: let
23 pkgs = import nixpkgs {
24 inherit system;
25 overlays = [
26 (import rust-overlay)
27
28
29
30 ];
31 };
32
33 rustToolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain:
34 toolchain.default.override {
35 targets = ["wasm32-unknown-unknown"];
36 extensions = [
37 "rust-src"
38 "rust-analyzer"
39 "clippy"
40 "rustfmt"
41 ];
42 });
43 in {
44 devShells.default = pkgs.mkShell {
45 packages = with pkgs; [
46 rustToolchain
47 rust-analyzer
48 cargo-nextest
49 cargo-insta
50 cargo-bloat
51 # Provides the `cargo sqlx` subcommand (package name in nixpkgs is sqlx-cli).
52 sqlx-cli
53
54 dioxus-cli
55 wasm-bindgen-cli
56 wasm-pack
57 binaryen.out
58 wabt
59 twiggy
60
61 llvmPackages_18.clang-unwrapped
62 llvmPackages_18.llvm
63 llvmPackages_18.libclang
64 llvmPackages_18.bintools-unwrapped
65
66 sqlite
67 pkg-config
68 openssl
69 patchelf
70
71 nodejs
72 esbuild
73 chromium
74 chromedriver
75 playwright-driver.browsers
76
77 just
78 jq
79 nixd
80 alejandra
81 ];
82
83 nativeBuildInputs = with pkgs; [
84 llvmPackages_18.clang-unwrapped
85 llvmPackages_18.bintools-unwrapped
86 rustPlatform.bindgenHook
87 ];
88
89 buildInputs = with pkgs;
90 [
91 sqlite
92 pkg-config
93 openssl
94 ]
95 ++ lib.optionals stdenv.isDarwin [
96 libiconv
97 ];
98
99 RUST_BACKTRACE = "1";
100 NIX_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
101 pkgs.stdenv.cc.cc
102 pkgs.openssl
103 pkgs.sqlite
104 ];
105 NIX_LD = pkgs.lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker";
106
107 PLAYWRIGHT_BROWSERS_PATH = "${pkgs.playwright-driver.browsers}";
108 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1";
109 PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = true;
110 PLAYWRIGHT_HOST_PLATFORM_OVERRIDE = "ubuntu-24.04";
111
112 shellHook = ''
113 export PATH="${pkgs.dioxus-cli}/bin:${pkgs.wasm-bindgen-cli}/bin:$PATH"; export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$NIX_LD_LIBRARY_PATH"
114 export CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER="wasm-bindgen-test-runner"
115 export CHROME="${pkgs.chromium}/bin/chromium"
116 export CC_wasm32_unknown_unknown="${pkgs.llvmPackages_18.clang-unwrapped}/bin/clang"
117 export AR_wasm32_unknown_unknown="${pkgs.llvmPackages_18.bintools-unwrapped}/bin/llvm-ar"
118
119 CLANG_MAJOR_VERSION="18"
120 CLANG_RESOURCE_DIR="${pkgs.llvmPackages_18.clang-unwrapped}/lib/clang/$CLANG_MAJOR_VERSION"
121 LIBCLANG_INCLUDE="${pkgs.llvmPackages_18.libclang.lib}/lib/clang/$CLANG_MAJOR_VERSION/include"
122
123 export LIBCLANG_PATH="${pkgs.llvmPackages_18.libclang.lib}/lib"
124 export BINDGEN_EXTRA_CLANG_ARGS="-isystem ${pkgs.glibc.dev}/include -isystem $LIBCLANG_INCLUDE"
125 export CFLAGS_wasm32_unknown_unknown="-isystem $LIBCLANG_INCLUDE -resource-dir $CLANG_RESOURCE_DIR"
126 export CPPFLAGS="-isystem $LIBCLANG_INCLUDE -resource-dir $CLANG_RESOURCE_DIR"
127
128 echo "polymodel dev shell: Rust + Dioxus + Jacquard + SQLite + Playwright"
129 '';
130 };
131 });
132}