馃馃殌 Abstract over Send and !Send traits crates.io/crates/future_form
0

Configure Feed

Select the types of activity you want to include in your feed.

future_form / flake.nix
4.9 kB 175 lines
1{ 2 description = "future_form"; 3 4 inputs = { 5 nixpkgs.url = "nixpkgs/nixos-25.11"; 6 flake-utils.url = "github:numtide/flake-utils"; 7 rust-overlay = { 8 url = "github:oxalica/rust-overlay"; 9 inputs.nixpkgs.follows = "nixpkgs"; 10 }; 11 command-utils.url = "git+https://codeberg.org/expede/nix-command-utils"; 12 }; 13 14 outputs = { 15 self, 16 flake-utils, 17 nixpkgs, 18 rust-overlay, 19 command-utils, 20 } @ inputs: 21 flake-utils.lib.eachDefaultSystem ( 22 system: let 23 overlays = [ 24 (import rust-overlay) 25 ]; 26 27 pkgs = import nixpkgs { 28 inherit system overlays; 29 config.allowUnfree = true; 30 }; 31 32 rustVersion = "1.90.0"; 33 34 rust-toolchain = (pkgs.rust-bin.stable.${rustVersion}.default.override { 35 extensions = [ 36 "cargo" 37 "clippy" 38 "llvm-tools-preview" 39 "rust-src" 40 "rust-std" 41 "rustfmt" 42 ]; 43 44 targets = [ 45 "aarch64-apple-darwin" 46 "x86_64-apple-darwin" 47 48 "x86_64-unknown-linux-musl" 49 "aarch64-unknown-linux-musl" 50 51 "wasm32-unknown-unknown" 52 "thumbv6m-none-eabi" 53 ]; 54 }).overrideAttrs (old: { 55 meta = (old.meta or {}) // { mainProgram = "cargo"; }; 56 }); 57 58 format-pkgs = with pkgs; [ 59 nixpkgs-fmt 60 alejandra 61 taplo 62 ]; 63 64 cargo-installs = with pkgs; [ 65 cargo-component 66 cargo-deny 67 cargo-expand 68 cargo-hack 69 cargo-outdated 70 cargo-semver-checks 71 cargo-sort 72 cargo-udeps 73 typos 74 ]; 75 76 # Command utils 77 rust = command-utils.rust.${system}; 78 asModule = command-utils.asModule.${system}; 79 cmd = command-utils.cmd.${system}; 80 cargo = "${rust-toolchain}/bin/cargo"; 81 82 menu = command-utils.commands.${system} [ 83 (rust.test { cargo = rust-toolchain; cargo-watch = pkgs.cargo-watch; }) 84 (rust.lint { cargo = rust-toolchain; }) 85 (rust.fmt { cargo = rust-toolchain; }) 86 (rust.build { cargo = rust-toolchain; }) 87 (rust.doc { cargo = rust-toolchain; }) 88 (rust.watch { cargo-watch = pkgs.cargo-watch; }) 89 (rust.audit { cargo-audit = pkgs.cargo-audit; }) 90 (rust.semver { cargo-semver-checks = pkgs.cargo-semver-checks; }) 91 (rust.ci { cargo = rust-toolchain; }) 92 (asModule { 93 "ffi:test" = cmd "Run FFI e2e tests (Go, Java, Python)" 94 "${cargo} test --workspace --test ffi_e2e -- --include-ignored --nocapture"; 95 "ffi:test:example" = cmd "Run example crate unit tests" 96 "${cargo} test --manifest-path future_form_ffi/examples/counter_effects/counter_effects/Cargo.toml && ${cargo} test --manifest-path future_form_ffi/examples/key_value_store/kv_store/Cargo.toml"; 97 }) 98 ]; 99 100 ci-rust-toolchain = (pkgs.rust-bin.stable.${rustVersion}.default.override { 101 extensions = [ 102 "cargo" 103 "clippy" 104 "rustfmt" 105 ]; 106 107 targets = [ 108 "wasm32-unknown-unknown" 109 ]; 110 }).overrideAttrs (old: { 111 meta = (old.meta or {}) // { mainProgram = "cargo"; }; 112 }); 113 114 # Stub so tools that probe for rustup (e.g. cargo-semver-checks) 115 # silently succeed instead of failing with "No such file or directory". 116 rustup-shim = pkgs.writeShellScriptBin "rustup" '' 117 if [ "$1" = "--version" ]; then 118 echo "rustup-nix-shim" 119 elif [ "$1" = "toolchain" ]; then 120 exit 0 121 elif [ "$1" = "which" ]; then 122 command -v "$2" 2>/dev/null || echo "$2" 123 else 124 exit 0 125 fi 126 ''; 127 128 ci-cargo-installs = with pkgs; [ 129 cargo-deny 130 cargo-hack 131 cargo-semver-checks 132 typos 133 ]; 134 135 in rec { 136 devShells.default = pkgs.mkShell { 137 name = "future_form shell"; 138 139 nativeBuildInputs = with pkgs; 140 [ 141 rust-toolchain 142 rust-analyzer 143 ] 144 ++ menu 145 ++ format-pkgs 146 ++ cargo-installs; 147 148 shellHook = '' 149 unset SOURCE_DATE_EPOCH 150 export WORKSPACE_ROOT="$(pwd)" 151 menu 152 ''; 153 }; 154 155 devShells.ci = pkgs.mkShell { 156 name = "future_form ci"; 157 158 nativeBuildInputs = 159 [ 160 ci-rust-toolchain 161 rustup-shim 162 ] 163 ++ ci-cargo-installs; 164 }; 165 166 devShells.ffi = pkgs.mkShell { 167 name = "future_form ffi shell"; 168 inputsFrom = [devShells.ci]; 169 nativeBuildInputs = [pkgs.go pkgs.jdk pkgs.python3]; 170 }; 171 172 formatter = pkgs.alejandra; 173 } 174 ); 175}