{
description = "My website, alanpearce.eu";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.utils.url = "github:numtide/flake-utils";
inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
inputs.pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
inputs.treefmt-nix.url = "github:numtide/treefmt-nix";
outputs =
{
self,
nixpkgs,
utils,
pre-commit-hooks,
treefmt-nix,
...
}:
utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
};
commonShellPackages = with pkgs; [
go
hyperlink
just
ko
flyctl
redis
];
devPackages = with pkgs; [
wgo
gofumpt
gopls
gotools
systemfd
modd
];
treefmtEval = treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
programs = {
nixfmt.enable = true;
taplo.enable = true;
mdformat.enable = true;
gofumpt.enable = true;
golines.enable = true;
prettier.enable = true;
};
};
in
{
devShells = {
ci = pkgs.mkShell {
packages = commonShellPackages;
};
default = pkgs.mkShell {
inherit (self.checks.${system}.pre-commit-check) shellHook;
packages = devPackages ++ commonShellPackages;
};
};
formatter = treefmtEval.config.build.wrapper;
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;
entry =
let
hookPkgs = pre-commit-hooks.packages.${system};
script = pkgs.writeShellScript "precommit-golangci-lint" ''
set -e
echo "$@" | xargs -n1 dirname | sort -u | xargs -n1 printf '"./%s" ' | \
xargs ${hookPkgs.golangci-lint}/bin/golangci-lint run --new --fix
'';
in
builtins.toString script;
};
gotest.enable = true;
};
};
};
}
);
}
flake.nix (view raw)