{ inputs = { nixpkgs.url = "github:nixos/nixpkgs"; flake-parts.url = "github:hercules-ci/flake-parts"; git-hooks.url = "github:cachix/git-hooks.nix"; }; outputs = { self, nixpkgs, flake-parts, git-hooks, ... }@inputs: flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" ]; perSystem = { system, ... }: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; pre-commit-check = git-hooks.lib.${system}.run { src = ./.; hooks = { nixfmt.enable = true; gofmt.enable = true; }; }; metadata-server = pkgs.buildGoModule { pname = "metadata-server"; version = "0.1.0"; src = ./.; vendorHash = null; subPackages = [ "cmd/server" ]; meta = { description = "Music metadata aggregation gRPC service"; mainProgram = "server"; }; }; in { formatter = pkgs.nixfmt-tree; packages = { default = metadata-server; server = metadata-server; }; checks = { inherit pre-commit-check; }; devShells.default = pkgs.mkShell { inherit (pre-commit-check) shellHook; buildInputs = with pkgs; [ pre-commit gitleaks plantuml go gopls gotools go-tools golangci-lint buf protoc-gen-go protoc-gen-go-grpc grpcurl ]; }; }; }; }