{ description = "My website, alanpearce.eu"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.utils.url = "github:numtide/flake-utils"; inputs.flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; inputs.gomod2nix.url = "github:nix-community/gomod2nix"; inputs.gomod2nix.inputs.nixpkgs.follows = "nixpkgs"; inputs.gomod2nix.inputs.flake-utils.follows = "utils"; inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; outputs = { self, nixpkgs, utils, pre-commit-hooks, gomod2nix, ... }: utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ gomod2nix.overlays.default ]; }; commonShellPackages = with pkgs; [ go templ hyperlink just ko flyctl nodePackages.prettier ]; devPackages = with pkgs; [ gopls gotools gomod2nix.legacyPackages.${system}.gomod2nix systemfd modd ]; in { devShells = { ci = pkgs.mkShell { packages = commonShellPackages; }; default = pkgs.mkShell { inherit (self.checks.${system}.pre-commit-check) shellHook; packages = devPackages ++ commonShellPackages; }; }; checks = { pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; 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; govet.enable = true; gomod2nix = { enable = true; name = "gomod2nix"; description = "Import go.mod updates to nix"; types_or = [ "go-sum" ]; entry = "${pkgs.gomod2nix}/bin/gomod2nix"; pass_filenames = false; }; }; }; }; packages = { build = pkgs.callPackage ./cmd/build { }; }; }); }