# Nix flake for reproducible builds & development environments. # TL;DR: # either `curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install` # or https://github.com/DeterminateSystems/nix-installer # and then `nix build` or `nix develop` { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; #systems.url = "github:nix-systems/default"; # Dev tools treefmt-nix.url = "github:numtide/treefmt-nix"; }; inputs.systems.url = "./flake.systems.nix"; inputs.systems.flake = false; outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; imports = [ inputs.treefmt-nix.flakeModule ]; perSystem = { config, self', pkgs, lib, system, ... }: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); nonRustDeps = [ pkgs.libiconv pkgs.pkg-config pkgs.openssl ]; rust-toolchain = pkgs.symlinkJoin { name = "rust-toolchain"; paths = [ pkgs.rustc pkgs.cargo pkgs.cargo-watch pkgs.rustPlatform.rustcSrc ]; }; in { # Rust package packages.default = pkgs.rustPlatform.buildRustPackage { inherit (cargoToml.package) name version; nativeBuildInputs = nonRustDeps; buildInputs = nonRustDeps; src = ./.; cargoLock.lockFile = ./Cargo.lock; }; # Rust dev environment devShells.default = pkgs.mkShell { inputsFrom = [ config.treefmt.build.devShell ]; shellHook = '' # For rust-analyzer 'hover' tooltips to work. export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} echo $RUST_SRC_PATH echo echo "Run 'just ' to get started" just ''; buildInputs = nonRustDeps; nativeBuildInputs = with pkgs; [ just rust-toolchain ]; RUST_BACKTRACE = 1; }; # Add your auto-formatters here. # cf. https://numtide.github.io/treefmt/ treefmt.config = { projectRootFile = "flake.nix"; programs = { nixpkgs-fmt.enable = true; rustfmt.enable = true; }; }; }; }; }