grace/dots
dotfiles/nix configs
git clone https://git.gae.moe/grace/dots
fdde154
vulcan
1{ config , ...} : 2 3let 4tailnet = import ../tailnet.nix ; 5in 6{ 7networking . firewall . allowedTCPPorts = [ 822 925565 1080 11443 12]; 13 14# TCP forwarding lives here alongside Caddy's HTTP/HTTPS reverse proxies. 15systemd . sockets . git-ssh-proxy = { 16wantedBy = [ "sockets.target" ]; 17listenStreams = [ "0.0.0.0:22" ]; 18}; 19 20systemd . services . git-ssh-proxy = { 21description = "TCP proxy for Git SSH" ; 22requires = [ "git-ssh-proxy.socket" ]; 23serviceConfig = { 24ExecStart = " ${ config . systemd . package } /lib/systemd/systemd-socket-proxyd ${ tailnet . dijkstra-git } :22" ; 25DynamicUser = true ; 26}; 27}; 28 29systemd . sockets . minecraft-proxy = { 30wantedBy = [ "sockets.target" ]; 31listenStreams = [ "0.0.0.0:25565" ]; 32}; 33 34systemd . services . minecraft-proxy = { 35description = "TCP proxy for Minecraft" ; 36requires = [ "minecraft-proxy.socket" ]; 37serviceConfig = { 38ExecStart = " ${ config . systemd . package } /lib/systemd/systemd-socket-proxyd ${ tailnet . dijkstra } :25565" ; 39DynamicUser = true ; 40}; 41}; 42 43services . caddy = { 44enable = true ; 45 46extraConfig = '' 47# TODO: make it nice 48(offline_page) { 49handle_errors { 50@offline expression {err.status_code} in [502, 503, 504] 51 52handle @offline { 53header Content-Type "text/html; charset=utf-8" 54header Cache-Control "no-store" 55respond <<HTML 56<!doctype html> 57<html lang="en"> 58<head> 59<title>Service temporarily offline</title> 60</head> 61<body> 62<main> 63<h1>Page Down</h1> 64<p>If you are seeing this, the backend server is offline. It should be back up soon so check again later.</p> 65<p class="status">Error {err.status_code}</p> 66</main> 67</body> 68</html> 69HTML {err.status_code} 70} 71 72handle { 73respond "{err.status_code} — {err.status_text}" {err.status_code} 74} 75} 76} 77'' ; 78 79virtualHosts = 80builtins . mapAttrs 81( 82_ :virtualHost : 83virtualHost 84// { 85extraConfig = '' 86import offline_page 87${ virtualHost . extraConfig } 88'' ; 89} 90) 91{ 92"map.mc.gae.moe" . extraConfig = '' 93reverse_proxy ${ tailnet . dijkstra } :8101 94'' ; 95 96"fin.gae.moe" . extraConfig = '' 97request_body { 98max_size 10GB 99} 100 101reverse_proxy ${ tailnet . dijkstra } :8096 { 102transport http { 103read_buffer 16KiB 104write_buffer 16KiB 105dial_timeout 10s 106response_header_timeout 300s 107keepalive 60s 108} 109} 110'' ; 111 112"files.gae.moe" . extraConfig = '' 113request_body { 114max_size 10GB 115} 116 117reverse_proxy ${ tailnet . dijkstra } :8080 { 118transport http { 119read_buffer 16KiB 120write_buffer 16KiB 121dial_timeout 10s 122response_header_timeout 300s 123keepalive 60s 124} 125} 126'' ; 127 128"img.gae.moe" . extraConfig = '' 129reverse_proxy ${ tailnet . dijkstra } :2283 130'' ; 131 132"git.gae.moe, git.tools.grace.pink" . extraConfig = '' 133request_body { 134max_size 10GB 135} 136 137reverse_proxy http:// ${ tailnet . dijkstra-git } :3000 { 138flush_interval -1 139 140header_up X-Real-IP {remote_host} 141header_up X-Forwarded-For {remote_host} 142header_up X-Forwarded-Proto {scheme} 143 144transport http { 145read_buffer 16KiB 146write_buffer 16KiB 147dial_timeout 10s 148response_header_timeout 300s 149keepalive 60s 150} 151} 152'' ; 153 154"ci.gae.moe" . extraConfig = '' 155reverse_proxy ${ tailnet . dijkstra-git } :8000 156'' ; 157 158"knot.gae.moe" . extraConfig = '' 159reverse_proxy ${ tailnet . dijkstra-git } :5555 160'' ; 161 162"books.gae.moe" . extraConfig = '' 163reverse_proxy localhost:6822 164'' ; 165 166"term.gae.moe" . extraConfig = '' 167reverse_proxy ${ tailnet . dijkstra } :8082 { 168transport http { 169tls_insecure_skip_verify 170} 171} 172'' ; 173 174"pds.gae.moe, grace.pds.gae.moe, art.pds.gae.moe" . extraConfig = '' 175encode gzip 176 177request_body { 178max_size 10GB 179} 180 181handle /xrpc/* { 182reverse_proxy http:// ${ tailnet . lee } :8642 { 183header_up Host {host} 184header_up X-Real-IP {remote_host} 185header_up X-Forwarded-For {remote_host} 186header_up X-Forwarded-Proto {scheme} 187header_up Upgrade {http.request.header.Upgrade} 188header_up Connection "Upgrade" 189flush_interval -1 190 191transport http { 192response_header_timeout 86400s 193keepalive 32s 194keepalive_idle_conns 32 195} 196} 197} 198 199handle /oauth/* { 200reverse_proxy http:// ${ tailnet . lee } :8642 { 201header_up Host {host} 202header_up X-Real-IP {remote_host} 203header_up X-Forwarded-For {remote_host} 204header_up X-Forwarded-Proto {scheme} 205} 206} 207 208handle /.well-known/webfinger { 209rewrite * /helpers/webfinger 210reverse_proxy https://atlogin.net 211} 212 213handle { 214reverse_proxy http:// ${ tailnet . lee } :8642 215} 216'' ; 217}; 218}; 219}