let sources = import ./nix/sources.nix; in { pkgs ? ( import sources.nixpkgs { overlays = [ (import "${sources.gomod2nix}/overlay.nix") (import ./nix/overlays/default.nix) ]; } ) }: rec { css = pkgs.fetchurl { inherit (sources.simple-css) url sha256; }; searchix = pkgs.buildGoApplication { pname = "searchix"; version = "0.1"; src = with pkgs.lib.fileset; toSource { root = ./.; fileset = intersection (unions [ ./go.mod ./go.sum ./serve ./import ./internal ./frontend ]) (gitTracked ./.); }; patchPhase = '' cp ${css} frontend/static/base.css ''; tags = [ "embed" ]; modules = ./gomod2nix.toml; }; pre-commit-check = (import sources.git-hooks).run { src = ./.; hooks = { gotest.enable = true; golangci-lint.enable = true; staticcheck.enable = true; statix = { enable = true; settings.ignore = [ "nix/*" ]; }; deadnix = { enable = true; excludes = [ "nix/.*" ]; }; nixpkgs-fmt = { enable = true; excludes = [ "nix/.*" ]; }; convco.enable = true; check-case-conflicts.enable = true; check-symlinks.enable = true; editorconfig-checker.enable = true; prettier = { enable = true; types_or = [ "plain-text" "yaml" "gotmpl" "javascript" ]; settings = { plugins = with pkgs.nodePackages; [ "${prettier-plugin-go-template}/lib/node_modules/prettier-plugin-go-template/lib/index.js" ]; }; }; yamllint = { enable = true; }; golines = { enable = true; name = "golines"; description = "A golang formatter that fixes long lines"; types_or = [ "go" ]; entry = "${pkgs.golines}/bin/golines --write-output"; pass_filenames = true; }; 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; }; gomod2nix = { enable = true; name = "gomod2nix"; description = "Import go.mod updates to nix"; types_or = [ "go-sum" ]; entry = "${pkgs.gomod2nix}/bin/gomod2nix"; pass_filenames = false; }; }; }; }