My Nix Configuration

[meta] Enable tangled.sh services

pyrox.dev ec5c8c1b 402d7e27

verified
Changed files
+104 -27
lib
systems
x86_64-linux
marvin
prefect
services
+2
flake.nix
···
buildbot-nix.nixosModules.buildbot-master
golink.nixosModules.default
iceshrimp.nixosModules.default
+
tangled-sh.nixosModules.knot
+
tangled-sh.nixosModules.spindle
];
};
};
+12 -1
lib/data/services.toml
···
extUrl = "auth.pyrox.dev"
anubis = 8401
-
[redlib]
port = 6901
host = "marvin"
···
port = 6931
host = "marvin"
tsHost = "scrutiny"
+
+
[tangled-knot]
+
port = 6934
+
host = "marvin"
+
extUrl = "knot.pyrox.dev"
+
intListenPort = 30106
+
+
[tangled-spindle]
+
port = 6935
+
host = "marvin"
+
extUrl = "spindle.pyrox.dev"
+
[vaultwarden]
port = 6912
+1
systems/x86_64-linux/marvin/default.nix
···
./services/scrutiny.nix
./services/syncthing.nix
./services/tailscale.nix
+
./services/tangled.nix
./services/vaultwarden.nix
./services/zfs.nix
];
+1
systems/x86_64-linux/marvin/services/secrets/secrets.nix
···
"pingvin-secrets.age".publicKeys = marvinDefault;
"planka-env.age".publicKeys = marvinDefault;
"pocket-id-secrets.age".publicKeys = marvinDefault;
+
"tangled-knot-secrets.age".publicKeys = marvinDefault;
"vaultwarden-vars.age".publicKeys = marvinDefault;
"vaultwarden-pgpass.age".publicKeys = marvinDefault;
"webmentiond-env.age".publicKeys = marvinDefault;
systems/x86_64-linux/marvin/services/secrets/tangled-knot-secrets.age

This is a binary file and will not be displayed.

+43
systems/x86_64-linux/marvin/services/tangled.nix
···
+
{
+
config,
+
lib,
+
...
+
}:
+
let
+
cfg = config.services.tangled-knot;
+
dk = lib.py.data.services.tangled-knot;
+
ds = lib.py.data.services.tangled-spindle;
+
in
+
{
+
services = {
+
tangled-knot = {
+
enable = true;
+
gitUser = "git";
+
stateDir = "/var/lib/tangled-knot";
+
repo.scanPath = "${cfg.stateDir}/repos";
+
server = {
+
listenAddr = "0.0.0.0:${toString dk.port}";
+
hostname = dk.extUrl;
+
internalListenAddr = "127.0.0.1:${toString dk.intListenPort}";
+
secretFile = config.age.secrets.tangled-knot-secrets.path;
+
};
+
};
+
tangled-spindle = {
+
enable = true;
+
server = {
+
listenAddr = "0.0.0.0:${ds.port}";
+
hostname = ds.extUrl;
+
owner = "did:plc:5cqzysioqzttihsnbsaxrggu";
+
};
+
pipelines.workflowTimeout = "10m";
+
};
+
openssh.ports = [ 2222 ];
+
openssh.settings.AllowUsers = [ "git" ];
+
openssh.settings.AllowGroups = [ "git" ];
+
};
+
age.secrets.tangled-knot-secrets = {
+
file = ./secrets/tangled-knot-secrets.age;
+
owner = "git";
+
group = "git";
+
};
+
}
+45 -26
systems/x86_64-linux/prefect/services/caddy.nix
···
}
'';
};
+
# Tangled Services
+
${pns.tangled-knot.extUrl} = {
+
extraConfig = ''
+
reverse_proxy ${marvin}:${toString pns.tangled-knot.port}
+
'';
+
};
+
${pns.tangled-spindle.extUrl} = {
+
extraConfig = ''
+
reverse_proxy ${marvin}:${toString pns.tangled-spindle.port}
+
'';
+
};
# Simple Tailscale Hosts
···
refresh_period 10m
}
'';
-
# layer4 {
-
# 0.0.0.0:465 {
-
# route {
-
# proxy {
-
# proxy_protocol v2
-
# upstream ${marvinIP}:${mail.intSMTPS}
-
# }
-
# }
-
# }
-
# 0.0.0.0:993 {
-
# route {
-
# proxy {
-
# proxy_protocol v2
-
# upstream ${marvinIP}:${mail.intIMAPS}
-
# }
-
# }
-
# }
-
# 0.0.0.0:4190 {
-
# route {
-
# proxy {
-
# proxy_protocol v2
-
# upstream ${marvinIP}:${mail.intManageSieve}
-
# }
-
# }
-
# }
-
# }
+
extraConfig = ''
+
layer4 {
+
:22 {
+
@a ssh
+
route @a {
+
proxy ${marvinIP}:2222
+
}
+
}
+
# 0.0.0.0:465 {
+
# route {
+
# proxy {
+
# proxy_protocol v2
+
# upstream ${marvinIP}:${mail.intSMTPS}
+
# }
+
# }
+
# }
+
# 0.0.0.0:993 {
+
# route {
+
# proxy {
+
# proxy_protocol v2
+
# upstream ${marvinIP}:${mail.intIMAPS}
+
# }
+
# }
+
# }
+
# 0.0.0.0:4190 {
+
# route {
+
# proxy {
+
# proxy_protocol v2
+
# upstream ${marvinIP}:${mail.intManageSieve}
+
# }
+
# }
+
# }
+
}
+
'';
};
systemd.services.caddy.serviceConfig.CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
systemd.services.caddy.serviceConfig.AmbientCapabilities = "CAP_NET_BIND_SERVICE";