{ description = "A basic gomod2nix flake"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; gomod2nix = { url = "github:nix-community/gomod2nix"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; }; pre-commit-hooks = { url = "github:cachix/pre-commit-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-parts.url = "github:hercules-ci/flake-parts"; files.url = "github:mightyiam/files"; git-hooks = { url = "github:cachix/git-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { imports = with inputs; [ files.flakeModules.default git-hooks.flakeModule ]; systems = [ "aarch64-linux" "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ]; perSystem = { config, inputs', pkgs, ... }: { pre-commit = { settings = { enabledPackages = with pkgs; [ go ]; hooks = { go-mod-tidy = { enable = true; name = "go-mod-tidy"; description = "Run `go mod tidy`"; types_or = [ "go" "go-mod" ]; entry = "${pkgs.go}/bin/go mod tidy"; pass_filenames = false; }; golines.enable = true; golangci-lint.enable = true; gotest.enable = true; gomod2nix = { enable = true; name = "gomod2nix"; description = "Import go.mod updates to nix"; types_or = [ "go-sum" ]; entry = "${inputs'.gomod2nix.legacyPackages.gomod2nix}/bin/gomod2nix"; pass_filenames = false; }; }; }; }; packages.default = pkgs.callPackage ./. { inherit (inputs'.gomod2nix.legacyPackages) buildGoApplication; }; devShells.default = pkgs.callPackage ./shell.nix { shellHook = config.pre-commit.installationScript; inherit (inputs'.gomod2nix.legacyPackages) mkGoEnv gomod2nix; }; }; }; }