context-logger 0.1.4

A lightweight, ergonomic library for adding structured context to your logs
Documentation
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
    fenix.url = "github:nix-community/fenix/monthly";
    treefmt-nix.url = "github:numtide/treefmt-nix";
    flake-utils.url = "github:numtide/flake-utils";
    rust-dev-flake.url = "github:alekseysidorov/rust-dev-flake";
  };

  outputs =
    {
      self,
      nixpkgs,
      flake-utils,
      fenix,
      treefmt-nix,
      rust-dev-flake,
    }:
    flake-utils.lib.eachDefaultSystem (
      system:
      let
        # Common nix packages
        pkgs = nixpkgs.legacyPackages.${system};
        # Fenix Rust toolchains
        fenixPackage = fenix.packages.${system};
        # Minimum supported Rust version
        rustVersions = {
          msrv = {
            name = "1.85.1";
            sha256 = "sha256-Hn2uaQzRLidAWpfmRwSRdImifGUCAb9HeAqTYFXWeQk=";
          };
          # Rust toolchain versions used in this project
          stable = {
            name = "1.92.0";
            sha256 = "sha256-sqSWJDUxc+zaz1nBWMAJKTAGBuGWP25GCftIOlCEAtA=";
          };
        };
        # Complete toolchains set
        rustToolchains = {
          stable = (fenixPackage.fromToolchainName rustVersions.stable).completeToolchain;
          msrv = (fenixPackage.fromToolchainName rustVersions.msrv).defaultToolchain;
          nightly = fenixPackage.complete.withComponents [ "rustfmt" ];
        };

        # Common runtime inputs used in this project.
        runtimeInputs = [
          rustToolchains.stable
        ];

        # Import rust dev flake
        rustDev = rust-dev-flake.lib.mkRustDevHelpers {
          inherit system self runtimeInputs;
          toolchain = rustToolchains.msrv;
        };

        # Eval the treefmt configuration
        treefmt = (treefmt-nix.lib.evalModule pkgs) {
          projectRootFile = "flake.nix";

          programs = {
            nixfmt.enable = true;
            rustfmt = {
              enable = true;
              package = rustToolchains.nightly;
            };
            beautysh.enable = true;
            deno.enable = true;
            taplo.enable = true;
          };
        };
      in
      {
        # for `nix fmt`
        formatter = treefmt.config.build.wrapper;
        # for `nix flake check`
        checks = {
          formatting = treefmt.config.build.check self;
          test = rustDev.mkCargoCheck "nextest" "--workspace --all-targets --no-default-features";
          test-all-features = rustDev.mkCargoCheck "nextest" "--workspace --all-targets --all-features";
          clippy = rustDev.mkCargoCheck "clippy" "--workspace --all-targets --all-features -- -D warnings";
          doc = rustDev.mkCargoCheck "doc" "--workspace --all-features --no-deps";
          doctest = rustDev.mkCargoCheck "test" "--doc --workspace --all-features";
        };
        # for `nix develop` and direnv
        devShells.default = pkgs.mkShell {
          nativeBuildInputs = runtimeInputs;
        };
        # for `nix run`
        packages = (rustDev.mkCheckPackages self.checks.${system}) // {
          inherit (rustDev.runtimeChecks)
            check-cargo-semver
            check-cargo-publish
            ;

          git-install-hooks = rustDev.mkGitHooks {
            "pre-commit" = ''
              echo "⚡️ Running pre-commit checks..."
              nix build .#check-formatting -L
            '';

            "pre-push" = ''
              echo "⚡️ Running flake checks..."
              nix flake check -L
              echo "⚡️ Running semver checks..."
              nix run .#check-cargo-semver -L
              echo "⚡️ Running cargo publish compatibility checks..."
              nix run .#check-cargo-publish -L
            '';
          };
        };
      }
    );
}