{ description = "My website, alanpearce.eu"; inputs.nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.zst"; 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"; inputs.treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; outputs = { self, nixpkgs, pre-commit-hooks, treefmt-nix, ... }: let supportedSystems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; in { devShells = forAllSystems ( system: let pkgs = import nixpkgs { inherit system; }; commonShellPackages = with pkgs; [ go govulncheck hyperlink just ko ]; ciPackages = with pkgs; [ redis (writeShellApplication { name = "danube"; runtimeInputs = [ pkgs.bun ]; text = '' bunx @danubedata/cli "$@" ''; }) ]; devPackages = with pkgs; [ wgo gofumpt gopls gotools systemfd modd ]; in { ci = pkgs.mkShell { packages = commonShellPackages ++ ciPackages; }; default = pkgs.mkShell { inherit (self.checks.${system}.pre-commit-check) shellHook; packages = commonShellPackages ++ devPackages; }; } ); formatter = forAllSystems ( system: let pkgs = import nixpkgs { inherit system; }; 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 treefmtEval.config.build.wrapper ); checks = forAllSystems ( system: let pkgs = import nixpkgs { inherit system; }; in { 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; extraPackages = [ pkgs.go ]; }; gotest.enable = true; }; }; } ); }; }