From 46fafb70ac928e81a7ba34408464f20c21febaa1 Mon Sep 17 00:00:00 2001 From: XNM Date: Sun, 12 Nov 2023 19:33:55 +0200 Subject: [PATCH] added dev shell example for Rust --- .../optimized-pre-config-rust/.cargo/config | 1 + .../optimized-pre-config-rust/Cargo.toml | 20 ++++++++ .../optimized-pre-config-rust/flake.nix | 47 +++++++++++++++++++ .../rust-toolchain.toml | 10 ++++ nixos/configuration.nix | 1 + 5 files changed, 79 insertions(+) create mode 100644 home/Projects/optimized-pre-config-rust/.cargo/config create mode 100644 home/Projects/optimized-pre-config-rust/Cargo.toml create mode 100644 home/Projects/optimized-pre-config-rust/flake.nix create mode 100644 home/Projects/optimized-pre-config-rust/rust-toolchain.toml diff --git a/home/Projects/optimized-pre-config-rust/.cargo/config b/home/Projects/optimized-pre-config-rust/.cargo/config new file mode 100644 index 0000000..bf0d4e9 --- /dev/null +++ b/home/Projects/optimized-pre-config-rust/.cargo/config @@ -0,0 +1 @@ +rustflags = ["-C", "link-arg=-fuse-ld=/path/to/mold", "-Zcodegen-backend=cranelift" ] # Change '/path/to/mold' and DON'T use it in production, only for dev needs diff --git a/home/Projects/optimized-pre-config-rust/Cargo.toml b/home/Projects/optimized-pre-config-rust/Cargo.toml new file mode 100644 index 0000000..46f0188 --- /dev/null +++ b/home/Projects/optimized-pre-config-rust/Cargo.toml @@ -0,0 +1,20 @@ +### Cargo code snippets for different optimizations + +## Dev build compilation speed optimization (more https://benw.is/posts/how-i-improved-my-rust-compile-times-by-seventy-five-percent) +# Work only with nightly version of Rust by the time when it was written, also DON'T use it in production for now +cargo-features = ["codegen-backend"] +# Important: It provides less useful error messages during compilation +[profile.dev] +opt-level = 1 +codegen-backend = "cranelift" +[profile.dev.package."*"] +opt-level = 3 +codegen-backend = "cranelift" + +## Release build size optimization (more https://github.com/johnthagen/min-sized-rust) +[profile.release] +strip = true +opt-level = "z" # Also can try 's' instead of 'z' +lto = true +codegen-units = 1 +panic = "abort" diff --git a/home/Projects/optimized-pre-config-rust/flake.nix b/home/Projects/optimized-pre-config-rust/flake.nix new file mode 100644 index 0000000..5805233 --- /dev/null +++ b/home/Projects/optimized-pre-config-rust/flake.nix @@ -0,0 +1,47 @@ +{ + description = "A devShell for Rust Development"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }: + flake-utils.lib.eachDefaultSystem (system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { + inherit system overlays; + }; + in + with pkgs; + { + devShells.default = mkShell { + buildInputs = [ + (rust-bin.fromRustupToolchainFile ./rust-toolchain.toml) + mold + pkg-config + openssl + sqlite + cargo-deny + cargo-audit + cargo-update + cargo-edit + cargo-outdated + cargo-license + cargo-tarpaulin + cargo-cross + cargo-zigbuild + cargo-nextest + cargo-spellcheck + cargo-modules + cargo-bloat + taplo + bacon + helix + ]; + }; + } + ); +} diff --git a/home/Projects/optimized-pre-config-rust/rust-toolchain.toml b/home/Projects/optimized-pre-config-rust/rust-toolchain.toml new file mode 100644 index 0000000..69e9adb --- /dev/null +++ b/home/Projects/optimized-pre-config-rust/rust-toolchain.toml @@ -0,0 +1,10 @@ +[toolchain] +channel = "nightly" +components = [ "rust-src", "rust-analyzer", "rustc-codegen-cranelift", "miri", "llvm-tools", "rust-docs-json" ] +targets = [ + "wasm32-wasi", + "wasm32-wasi-preview1-threads", + "x86_64-pc-windows-gnu", + "x86_64-unknown-linux-gnu", + ] +profile = "default" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6443d02..9252d93 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -446,6 +446,7 @@ # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ + mold gcc13 jdk11 gleam