planter-core 0.0.7

Domain logic for PlanTer, a project management application
Documentation
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay = {
      url = "github:oxalica/rust-overlay";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, rust-overlay }:
    let
      lib = nixpkgs.lib;
      systems = [
        "x86_64-linux"
        "aarch64-linux"
        "aarch64-darwin"
      ];
      pkgsFor = system: import nixpkgs {
        inherit system;
        overlays = [ (import rust-overlay) ];
      };
    in
    {
      devShells = lib.genAttrs systems (system:
        let
          pkgs = pkgsFor system;
          rustTarget = pkgs.stdenv.hostPlatform.rust.rustcTarget;

          toolchain = (pkgs.rust-bin.stable.latest.minimal.override {
            extensions = [ "clippy" "rustfmt" "rust-src" "llvm-tools" ];
          });
          ciToolchain = (pkgs.rust-bin.stable.latest.minimal.override {
            extensions = [ "clippy" "rustfmt" ];
          });
        in
        {
          default = pkgs.mkShell {
            packages = [
              toolchain
              pkgs.rust-analyzer
              pkgs.bacon
              pkgs.cargo-edit
              pkgs.cargo-deny
              pkgs.cargo-machete
              pkgs.cargo-llvm-cov
              pkgs.release-plz
            ];

            RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust";

            shellHook = ''
              export LLVM_COV="${toolchain}/lib/rustlib/${rustTarget}/bin/llvm-cov"
              export LLVM_PROFDATA="${toolchain}/lib/rustlib/${rustTarget}/bin/llvm-profdata"
            '';
          };

          ci = pkgs.mkShell {
            packages = [
              ciToolchain
              pkgs.cargo-deny
              pkgs.cargo-machete
            ];
          };

          release = pkgs.mkShell {
            packages = [
              ciToolchain
              pkgs.release-plz
            ];
          };

          renovate = pkgs.mkShell {
            packages = [
              pkgs.renovate
              pkgs.git
            ];
          };
        });
    };
}