From 45a1190af7116b0e10fd62589ad50625988ff95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Sun, 21 Jan 2024 14:53:56 +0100 Subject: [PATCH] feat: improve rust template --- templates/rust/flake.nix | 85 ++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/templates/rust/flake.nix b/templates/rust/flake.nix index fc15b39..317e679 100644 --- a/templates/rust/flake.nix +++ b/templates/rust/flake.nix @@ -1,58 +1,59 @@ { inputs = { - crane = { - url = "github:ipetkov/crane"; - inputs = { - flake-utils.follows = "flake-utils"; - nixpkgs.follows = "nixpkgs"; - }; - }; - fenix = { - url = "github:nix-community/fenix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + crane.url = "github:ipetkov/crane"; + crane.inputs.nixpkgs.follows = "nixpkgs"; + fenix.url = "github:nix-community/fenix"; + fenix.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "nixpkgs/nixos-unstable"; }; - outputs = { self, crane, fenix, flake-utils, nixpkgs }: + outputs = { self, crane, flake-utils, nixpkgs, ... }@inputs: flake-utils.lib.eachDefaultSystem (system: let - pkgs = (import nixpkgs) { - inherit system; - }; - toolchain = fenix.packages.${system}.stable; + inherit (pkgs) lib; + pkgs = import nixpkgs { inherit system; }; + fenix = inputs.fenix.packages.${system}; craneLib = crane.lib.${system}.overrideToolchain toolchain.toolchain; + mkSrc = extraPaths: with lib.fileset; let + root = ./.; + rustFiles = fromSource (craneLib.cleanCargoSource root); + fileset = union rustFiles (unions extraPaths); + in + toSource { inherit root fileset; }; + + ## Customize here ## + toolchain = fenix.complete; # or fenix.stable; stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv; in { - packages = - let - inherit (pkgs.lib) fileset; - without = fs: fileset.difference ./. fs; - nixFiles = fileset.unions [ ./flake.nix ./flake.lock ./.envrc ]; - gitFiles = fileset.gitTracked ./.; - src = fileset.toSource { - root = ./.; - fileset = fileset.intersection (without nixFiles) gitFiles; - }; - in - { - default = - craneLib.buildPackage { - inherit src stdenv; - }; - }; + packages.default = craneLib.buildPackage { + inherit stdenv; + src = mkSrc [ ]; + strictDeps = true; + buildInputs = [ + # Add additional build inputs here + ] ++ lib.optionals pkgs.stdenv.isDarwin [ + # Additional darwin specific inputs can be set here + pkgs.libiconv + ]; + # Additional environment variables can be set directly + # MY_CUSTOM_VAR = "some value"; + }; - devShell = pkgs.mkShell.override + devShells.default = pkgs.mkShell.override { inherit stdenv; } { - inherit stdenv; - } - { - nativeBuildInputs = with toolchain; - [ rustc cargo rust-analyzer clippy ] ++ (with pkgs; - [ ] - ); + nativeBuildInputs = with pkgs; [ + # Add additional build inputs here + ] ++ (with toolchain; [ + cargo + clippy + rustfmt + rustc + fenix.rust-analyzer + ]); + RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library"; }; - }); + } + ); }