shock 0.1.11

Regularly `shock` your ZFS pools to maintain good hygiene and prune stale snapshots
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";

    crane = {
      url = "github:ipetkov/crane";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = inputs@{ self, nixpkgs, ... }:
    let
      supportedSystems = [
        "aarch64-linux"
        "x86_64-linux"
      ];

      myPkgsFor = pkgs: import ./nix/pkgs {
        inherit pkgs inputs;
        craneLib = inputs.crane.mkLib pkgs;
      };
    in
    {
      overlays.default = final: prev: myPkgsFor final;

      nixosModules = rec {
        default = shock;
        shock = import ./nix/modules/shock.nix;
      };
    } // inputs.flake-utils.lib.eachSystem supportedSystems (system:
      let
        mkPkgs = system: import nixpkgs {
          inherit system;
        };

        pkgs = mkPkgs system;
        myPkgs = myPkgsFor pkgs;
        checks = myPkgs // (import ./nix/checks.nix { inherit pkgs myPkgs; });
      in
      {
        inherit checks;

        formatter = pkgs.nixpkgs-fmt;

        packages = myPkgs // { default = myPkgs.shock; };

        devShells.default = pkgs.mkShell {
          inputsFrom = builtins.attrValues checks;
          nativeBuildInputs = with pkgs; [
            cargo
            rustc
            clippy
          ];
        };
      });
}