{
description = "My website, alanpearce.eu";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
inputs.utils.url = "github:numtide/flake-utils";
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";
inputs.pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
inputs.treefmt-nix.url = "github:numtide/treefmt-nix";
outputs =
{
self,
nixpkgs,
utils,
pre-commit-hooks,
gomod2nix,
treefmt-nix,
...
}:
utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
gomod2nix.overlays.default
];
};
commonShellPackages = with pkgs; [
go
hyperlink
just
ko
flyctl
redis
sqlc
];
devPackages = with pkgs; [
wgo
gofumpt
gopls
gotools
gomod2nix.legacyPackages.${system}.gomod2nix
sqlfluff
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;
sqlfluff.enable = true;
sqlfluff.dialect = "sqlite";
};
settings.formatter = {
taplo.excludes = [ "gomod2nix.toml" ];
};
};
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;
gomod2nix = {
enable = true;
name = "gomod2nix";
description = "Import go.mod updates to nix";
types_or = [ "go-sum" ];
entry = "${pkgs.gomod2nix}/bin/gomod2nix";
pass_filenames = false;
};
sqlc = {
enable = true;
name = "sqlc";
description = "Generate go code from SQL";
types_or = [ "sql" ];
entry = "${pkgs.sqlc}/bin/sqlc generate";
pass_filenames = false;
};
};
};
};
packages = {
build = pkgs.buildGoApplication {
pname = "build";
version = self.shortRev or self.dirtyShortRev;
src = ./.;
modules = ./gomod2nix.toml;
subPackages = [ "domain/content/builder/build" ];
nativeBuildInputs = with pkgs; [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/build --set KO_DATA_PATH ${./kodata}
'';
};
};
}
);
}
flake.nix (view raw)