bashguard 0.1.1

Rule-based bash guard for your coding agent
Documentation
{
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

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

        inherit (builtins) readFile fromTOML;

        rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain;
        # rustfmt from rust-nightly used for advanced options in rustfmt
        rustfmt-nightly = pkgs.rust-bin.nightly.latest.rustfmt;

        shellPkgs = [
          rustfmt-nightly # must come before `rust` to so this version of rustfmt is first in PATH
          rust
        ] ++ (with pkgs; [
          cargo-sort
          just
          nixpkgs-fmt
          present-cli
        ]);

        bashguard = pkgs.rustPlatform.buildRustPackage {
          inherit ((fromTOML (readFile ./Cargo.toml)).package)
            name
            version
            ;
          src = pkgs.lib.cleanSourceWith {
            src = ./.;
            filter = path: type: !(pkgs.lib.hasSuffix ".nix" path);
          };
          cargoHash = "sha256-moeZzA3b97ZDH8x4ZFGK75CeeuzIQrBziR/5s+DKu+Q=";
        };

      in
      {
        devShells = {
          default = pkgs.mkShell {
            buildInputs = shellPkgs;
          };
        };

        packages = {
          default = bashguard;

          bashguard = bashguard;
        };
      }));
}