all repos — nixfiles @ 0f166555b9b03768856b2ff2ffaba54be1531166

System and user configuration, managed by nix and home-manager

system/settings/dev.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
{ config
, lib
, pkgs
, ...
}:
with lib;

let
  cfg = config.local.web;
in
{
  options.local.web = {
    enable = mkEnableOption "Local configuration of caddy";

    projectRoot = mkOption {
      default = "/home/alan/projects";
      type = types.str;
      description = "Where projects are stored";
    };
  };

  config = mkIf cfg.enable {
    services.caddy = {
      enable = true;
      virtualHosts =
        let
          local_tls = ''
            tls {
              issuer internal {
                ca local
              }
            }
          '';
        in
        {
          "localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              ${local_tls}
              acme_server {
                allow {
                  domains *.test *.localhost
                }
              }
            '';
          };
          # need to test forwarding behaviour
          "alanpearce.localhost" = {
            logFormat = "output discard";
            serverAliases = [
              # remember to update /etc/hosts
              "alanpearce.test"
            ];
            extraConfig = ''
              ${local_tls}
              reverse_proxy http://alanpearce.localhost:8080 {
                transport http {
                  dial_timeout 1s
                  compression off
                }
              }
            '';
          };
          "elgit.localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              ${local_tls}
              reverse_proxy http://127.0.0.1:5555 {
                transport http {
                   dial_timeout 1s
                   compression off
                }
              }
            '';
          };
          "barkeep.localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              ${local_tls}
              reverse_proxy http://localhost:8081 {
                transport http {
                  dial_timeout 1s
                  compression off
                }
              }
            '';
          };
          "searchix.localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              root ${cfg.projectRoot}/alanpearce.eu/searchix/frontend/
              handle /static/* {
                file_server
              }
              handle_errors {
                rewrite * /error.html
                templates
                file_server
              }
              handle {
                reverse_proxy http://localhost:3000 {
                  transport http {
                    dial_timeout 1s
                    compression off
                  }
                }
              }
            '';
          };
          "perplexica-backend.localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              reverse_proxy http://localhost:8339 {
                transport http {
                  dial_timeout 1s
                  compression off
                }
              }
            '';
          };
          "perplexica.localhost" = {
            logFormat = "output discard";
            extraConfig = ''
              reverse_proxy http://localhost:8338 {
                transport http {
                  dial_timeout 1s
                  compression off
                }
              }
            '';
          };
        };
    };

    services.dnsmasq = mkIf pkgs.stdenv.isDarwin {
      enable = true;
      addresses = {
        localhost = "127.0.0.1";
        test = "127.0.0.1";
      };
    };
  };
}