perf-event-open 0.4.0

Full-featured high-level wrapper for the perf_event_open system call.
Documentation
{
  inputs = {
    pkgs.url = "github:NixOS/nixpkgs/eb6cf22e8ee7d1307705d8cac7c1f81b8135c2ca"; # 25-4-3
    rust-overlay = {
      url = "github:oxalica/rust-overlay/9d00c6b69408dd40d067603012938d9fbe95cfcd"; # 24-4-6
      inputs.nixpkgs.follows = "pkgs";
    };
    flake-utils.url = "github:numtide/flake-utils/11707dc2f618dd54ca8739b309ec4fc024de578b"; # 24-11-14
  };

  outputs = inputs@{ ... }: inputs.flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import inputs.pkgs {
        inherit system;
        overlays = [ (import inputs.rust-overlay) ];
      };

      rust-toolchain = channel: version:
        pkgs.rust-bin."${channel}"."${version}".complete.override {
          extensions = [ "rust-src" ];
          targets = [
            "x86_64-unknown-linux-gnu"
            "x86_64-unknown-linux-musl"
          ];
        };
    in
    {
      devShells.default = pkgs.mkShell {
        name = "perf-event-open";

        # Use nightly fmt for better style
        RUSTFMT = "${rust-toolchain "nightly" "2025-04-03"}/bin/rustfmt";

        nativeBuildInputs = [
          (rust-toolchain "stable" "1.80.0")
        ];

        checkPhase = "./check.sh";
      };
    });
}