all repos — homestead @ b560c74d30299f29d7292ebc0e44037469a6934d

Code for my website

flake.nix (view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
{
  description = "My website, alanpearce.eu";
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  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,
      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;
            };
          };
        }
      );
    };
}