embed-licensing 0.2.0

Embed licensing information of dependencies to comply with free software licenses
Documentation
# SPDX-FileCopyrightText: 2024 Simon Bruder <simon@sbruder.de>
#
# SPDX-License-Identifier: LGPL-2.1-or-later

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

    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";

    rust-overlay.url = "github:oxalica/rust-overlay";

    naersk.url = "github:nix-community/naersk";

    git-hooks.url = "github:cachix/git-hooks.nix";
  };

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

      rustPackage = pkgs.rust-bin.stable.latest.default;

      naersk' = pkgs.callPackage naersk {
        rustc = rustPackage;
        cargo = rustPackage;
      };
    in
    {
      checks = {
        pre-commit-check = git-hooks.lib.${system}.run {
          src = self;
          hooks = {
            cargo-check = {
              enable = true;
              package = rustPackage;
            };
            cargo-deny = {
              enable = true;
              name = "cargo-deny";
              entry = "cargo deny --workspace check";
              pass_filenames = false;
            };
            clippy = {
              enable = true;
              settings = {
                denyWarnings = true;
              };
              packageOverrides = {
                cargo = rustPackage;
                clippy = rustPackage;
              };
            };
            nixpkgs-fmt.enable = true;
            reuse = {
              enable = true;
              name = "reuse";
              entry = "reuse lint";
              pass_filenames = false;
            };
            rustfmt = {
              enable = true;
              packageOverrides = {
                cargo = rustPackage;
                rustfmt = rustPackage;
              };
            };
          };
        };
      };

      packages = rec {
        embed-licensing = naersk'.buildPackage {
          src = self;

          doCheck = true;
        };

        default = embed-licensing;
      };

      devShells.default = pkgs.mkShell {
        buildInputs = [
          rustPackage
        ] ++ (with pkgs; [
          cargo-deny
          clippy
          reuse
        ]);

        shellHook = ''
          ${self.checks.${system}.pre-commit-check.shellHook}
        '';
      };
    });
}