leafslug 0.3.0

Leafslug is a cutie that slowly makes my world a better place.
Documentation
{
  description = "Building binaries of leafslug";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";

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

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

    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs = {
        nixpkgs.follows = "nixpkgs";
        flake-utils.follows = "flake-utils";
      };
    };

    advisory-db = {
      url = "github:rustsec/advisory-db";
      flake = false;
    };
  };

  outputs = {
    nixpkgs,
    crane,
    flake-utils,
    rust-overlay,
    advisory-db,
    ...
  }:
    flake-utils.lib.eachSystem ["x86_64-linux"] (system: let
      pkgs = import nixpkgs {
        inherit system;
        overlays = [(import rust-overlay)];
      };
      inherit (pkgs) lib;
      src = craneLib.cleanCargoSource (craneLib.path ./.);
      commonArgs = {
        inherit src;

        buildInputs =
          [
            # Add additional build inputs here
          ]
          ++ lib.optionals pkgs.stdenv.isDarwin [
            # Additional darwin specific inputs can be set here
            pkgs.libiconv
          ];

        # Additional environment variables can be set directly
      };
      rustToolchain = pkgs.rust-bin.stable.latest.default.override {
        targets = ["x86_64-unknown-linux-musl"];
      };

      craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;

      cargoArtifacts = craneLib.buildDepsOnly commonArgs;
      rvr = craneLib.buildPackage {
        inherit src;
        CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
        CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
        name = "rvr";
        pname = "rvr";
        version = "0.1";
        cargoExtraArgs = "--bin rvr --locked";
      };
      tsk = craneLib.buildPackage {
        inherit src;
        CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
        CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
        name = "tsk";
        pname = "tsk";
        version = "0.1";
        cargoExtraArgs = "--bin tsk --locked";
      };
      jnl = craneLib.buildPackage {
        inherit src;
        CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
        CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
        name = "jnl";
        pname = "jnl";
        version = "0.1";
        cargoExtraArgs = "--bin jnl  --locked";
      };
    in {
      checks = {
        my-crate-clippy = craneLib.cargoClippy (commonArgs
          // {
            inherit cargoArtifacts;
            cargoClippyExtraArgs = "-- --deny warnings";
          });

        my-crate-doc = craneLib.cargoDoc (commonArgs
          // {
            inherit cargoArtifacts;
          });

        # Check formatting
        my-crate-fmt = craneLib.cargoFmt {
          inherit src;
        };

        # Audit dependencies
        my-crate-audit = craneLib.cargoAudit {
          inherit src advisory-db;
        };

        # Audit licenses
        my-crate-deny = craneLib.cargoDeny {
          inherit src;
        };

        # Run tests with cargo-nextest
        # Consider setting `doCheck = false` on `my-crate` if you do not want
        # the tests to run twice
        my-crate-nextest = craneLib.cargoNextest (commonArgs
          // {
            inherit cargoArtifacts;
            partitions = 1;
            partitionType = "count";
          });
      };

      packages.tsk = tsk;
      packages.jnl = jnl;
      packages.rvr = rvr;
      apps.jnl = flake-utils.lib.mkApp {
        name = "jnl";
        drv = jnl;
        version = "0.3";
      };
      apps.rvr = flake-utils.lib.mkApp {
        name = "rvr";
        drv = rvr;
        version = "0.3";
      };
      apps.tsk = flake-utils.lib.mkApp {
        name = "rvr";
        drv = tsk;
        version = "0.3";
      };
    });
}