old
1{den, ...}: {
2 den.hosts.mobius = {
3 settings = {
4 services.webserver.external = false;
5 services.webserver.caddy.tailscaleUseHttps = true;
6
7 services.forgejo.runner = {
8 instances = {
9 internal = {
10 name = "runner-internal";
11 servers = {
12 gateOfInfinity = {
13 url = "https://git.net.trin.one";
14 uuid = "53fa1df5-f0dd-423c-91a7-afee2488f253";
15 tokenFileAged = ./forgejo-runner-goi-token.age;
16 };
17 };
18 labels = [
19 "ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest"
20 "nixos-latest:docker://git.net.trin.one/hpcesia/nix-act-image:latest-x86_64-linux"
21 ];
22 extraSettings = {
23 container.network = "host";
24 };
25 };
26 codeberg = {
27 name = "runner-codeberg";
28 servers = {
29 codeberge = {
30 url = "https://codeberg.org";
31 uuid = "ba3966e6-ad25-4de2-89ec-4b96b9e1965f";
32 tokenFileAged = ./forgejo-runner-codeberg-token.age;
33 };
34 };
35 labels = [
36 "nixos-latest:docker://git.net.trin.one/hpcesia/nix-act-image:latest-x86_64-linux"
37 ];
38 };
39 };
40 };
41 services.forgejo.server = {
42 domain = "git.net.trin.one";
43 };
44
45 services.navidrome = {
46 domain = "navidrome.net.trin.one";
47 };
48
49 services.woodpecker.agent.agents = {
50 codeberg = {
51 server = "grpc.ci.codeberg.org:443";
52 secretFileAged = ./woodpecker-agent-codeberg-token.age;
53 labels = {
54 tier = "high";
55 };
56 };
57 };
58 };
59 };
60
61 den.aspects.mobius = {
62 includes = with den.aspects; [
63 services.webserver
64 services.tailscale-nginx-auth
65
66 services.forgejo.runner
67 services.forgejo.server
68 services.navidrome
69 services.woodpecker.agent
70
71 {
72 nixos = {
73 config,
74 pkgs,
75 ...
76 }: {
77 # TODO: Remove this workaround if Headscale land it's tailscale cert support.
78 # See: https://github.com/juanfont/headscale/issues/2527
79 services.caddy = {
80 package = pkgs.caddy.withPlugins {
81 plugins = [
82 "github.com/caddy-dns/cloudflare@v0.2.4"
83 ];
84 hash = "sha256-hEHgAG0F0ozHRAPuxEqLyTATBrE+pajeXDiSNwniorg=";
85 };
86 virtualHosts.headscale = {
87 hostName = "*.net.trin.one";
88 extraConfig = ''
89 tls {
90 dns cloudflare {env.CF_API_TOKEN}
91 resolvers 1.1.1.1 1.0.0.1
92 }
93 abort
94 '';
95 };
96 };
97
98 systemd.services.caddy.serviceConfig.EnvironmentFile = [config.vaultix.templates.caddy-headscale-env.path];
99
100 vaultix.secrets.headscale-subnet-tls-cf-token.file = ./tailscale-cloudflare-token.age;
101 vaultix.templates.caddy-headscale-env = {
102 content = ''
103 CF_API_TOKEN=${config.vaultix.placeholder.headscale-subnet-tls-cf-token}
104 '';
105 owner = config.services.caddy.user;
106 group = config.services.caddy.group;
107 mode = "0400";
108 };
109 };
110 }
111 ];
112 };
113}