{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/release-22.11"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; devenv.url = "github:cachix/devenv"; flake-utils.url = "github:numtide/flake-utils"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; crane = { url = "github:ipetkov/crane"; inputs = { flake-utils.follows = "flake-utils"; nixpkgs.follows = "nixpkgs"; }; }; nix-rust-utils.url = "github:onsails/nix-rust-utils"; }; outputs = { self , nixpkgs , flake-utils , fenix , devenv , crane , nixpkgs-unstable , nix-rust-utils } @ inputs: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ fenix.overlays.default (self: super: { unstable = (import nixpkgs-unstable { inherit system; }); }) ]; }; nativeBuildInputs = with pkgs; [ pkg-config openssl ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk; [ libiconv frameworks.Security ]); buildInputs = with pkgs; [ cargo-nextest ]; rustToolchain = fenix.packages.${system}.fromToolchainFile { file = ./rust-toolchain.toml; # sha256 = pkgs.lib.fakeSha256; sha256 = "sha256-S7epLlflwt0d1GZP44u5Xosgf6dRrmr8xxC+Ml2Pq7c="; }; in rec { packages = with pkgs; let craneLib = crane.lib.${system}.overrideToolchain rustToolchain; src = nix-rust-utils.cleanSourceWithExts { inherit pkgs craneLib; src = ./.; exts = "json"; }; cargoArtifacts = craneLib.buildDepsOnly { inherit src nativeBuildInputs; }; rustPackage = craneLib.buildPackage { inherit src nativeBuildInputs buildInputs cargoArtifacts; # # until this is clear https://github.com/ipetkov/crane/discussions/196 doCheck = false; }; rustTest = nix-rust-utils.mkNextest { inherit src craneLib pkgs buildInputs; }; in { rustPackage = rustPackage; rustTest = rustTest; docker = dockerImage null; dockerLocal = dockerImage "local"; }; defaultPackage = packages.docker; devShell = devenv.lib.mkShell { inherit inputs pkgs; modules = with pkgs; (nix-rust-utils.mkDevenvModules { inherit pkgs rustToolchain; libs = nativeBuildInputs; }) ++ [ { env.RUSTC_WRAPPER = "${pkgs.sccache}/bin/sccache"; packages = [ sccache cargo-watch cargo-nextest unstable.cargo-release cargo-semver-checks ] ++ buildInputs; # https://devenv.sh/languages/ languages.nix.enable = true; # https://github.com/nektos/act/issues/1184#issuecomment-1248575427 # non-root runner is required for nix scripts.act.exec = '' ${pkgs.act}/bin/act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:runner-latest \ $@ ''; scripts.release.exec = '' cargo semver-checks check-release release-unchecked $@ ''; scripts.release-unchecked.exec = '' cargo release --execute $@ ''; # https://devenv.sh/pre-commit-hooks/ pre-commit.hooks = { shellcheck.enable = true; clippy.enable = true; rustfmt.enable = true; }; } ]; }; }); }