nix machine / user configurations

feat(wolumonde): email for ptr.pet. june woof

ptr.pet 8029bad5 6ad8137e

verified
Changed files
+146 -10
dns
hosts
wolumonde
secrets
+1 -1
deploy.nu
···
}
def upload-paste []: any -> string {
-
let paste_url = http post --content-type multipart/form-data "https://0x0.st" {file: ($in | to text | into binary), secret: true}
+
let paste_url = http post -H ["user-agent" "gaze.systems terra deploy"] --content-type multipart/form-data "https://0x0.st" {file: ($in | to text | into binary), secret: true}
return $paste_url
}
+78 -3
dns/dnsconfig.js
···
A("likes", WOLUMONDE_IP, CF_PROXY_OFF),
A("vpn", WOLUMONDE_IP, CF_PROXY_OFF),
A("id", WOLUMONDE_IP, CF_PROXY_OFF),
+
A("test", WOLUMONDE_IP, CF_PROXY_OFF),
// atp handles
A("dawn", WOLUMONDE_IP, CF_PROXY_OFF),
A("guestbook", WOLUMONDE_IP, CF_PROXY_OFF),
···
TXT("_dmarc", "v=DMARC1; p=reject;"),
);
+
var EMAIL_TTL = 86400;
+
D(
"ptr.pet",
REG_NONE,
DnsProvider(DSP_CLOUDFLARE),
DefaultTTL(1),
A("@", WOLUMONDE_IP, CF_PROXY_OFF),
-
A("nil", WOLUMONDE_IP, CF_PROXY_OFF),
+
A("test", WOLUMONDE_IP, CF_PROXY_OFF),
+
// atproto
TXT("_atproto", "did=did:plc:dfl62fgb7wtjj3fcbb72naae"),
+
A("nil", WOLUMONDE_IP, CF_PROXY_OFF),
TXT("_atproto.nil", "did=did:web:dawn.gaze.systems"),
-
TXT("@", "v=spf1 -all"),
-
TXT("_dmarc", "v=DMARC1; p=reject;"),
+
TXT("_atproto.june", "did=did:plc:y3z2rr7q5rywu4fjn3fmfyop"),
+
// june
+
CNAME("june", "girlboss.ceo."),
+
CNAME("*.june", "girlboss.ceo."),
+
// email
+
// verification
+
TXT("@", "hosted-email-verify=zr04ylon", TTL(EMAIL_TTL)),
+
+
MX("@", 10, "aspmx1.migadu.com.", TTL(EMAIL_TTL)),
+
MX("@", 20, "aspmx2.migadu.com.", TTL(EMAIL_TTL)),
+
+
// DKIM
+
CNAME(
+
"key1._domainkey",
+
"key1.ptr.pet._domainkey.migadu.com.",
+
TTL(EMAIL_TTL),
+
),
+
CNAME(
+
"key2._domainkey",
+
"key2.ptr.pet._domainkey.migadu.com.",
+
TTL(EMAIL_TTL),
+
),
+
CNAME(
+
"key3._domainkey",
+
"key3.ptr.pet._domainkey.migadu.com.",
+
TTL(EMAIL_TTL),
+
),
+
+
// SPF
+
TXT("@", "v=spf1 include:spf.migadu.com -all", TTL(EMAIL_TTL)),
+
+
// DMARC
+
TXT(
+
"_dmarc",
+
"v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; fo=1; pct=100; rua=mailto:infrastructure@ptr.pet; ruf=mailto:infrastructure@ptr.pet",
+
TTL(EMAIL_TTL),
+
),
+
+
// configuration
+
TXT(
+
"@",
+
"mailconf=https://autoconfig.migadu.com/mail/config-v1.1.xml",
+
TTL(EMAIL_TTL),
+
),
+
+
// TLS reporting
+
TXT(
+
"_smtp._tls",
+
"v=TLSRPTv1; rua=mailto:infrastructure@ptr.pet",
+
TTL(EMAIL_TTL),
+
),
+
+
// mta-sts
+
A("mta-sts", WOLUMONDE_IP, CF_PROXY_OFF),
+
TXT("_mta-sts", "v=STSv1; id=20250930T1945", TTL(EMAIL_TTL)),
+
+
// autoconfig
+
A("autoconfig", WOLUMONDE_IP, CF_PROXY_OFF),
+
A("autodiscover", WOLUMONDE_IP, CF_PROXY_OFF),
+
+
// autodiscovery
+
SRV(
+
"_autodiscover._tcp",
+
0,
+
1,
+
443,
+
"autodiscover.migadu.com.",
+
TTL(EMAIL_TTL),
+
),
+
SRV("_submissions._tcp", 0, 1, 465, "smtp.migadu.com.", TTL(EMAIL_TTL)),
+
SRV("_imaps._tcp", 0, 1, 993, "imap.migadu.com.", TTL(EMAIL_TTL)),
+
SRV("_pop3s._tcp", 0, 1, 995, "pop.migadu.com.", TTL(EMAIL_TTL)),
);
+3 -1
hosts/wolumonde/modules/atproto.nix
···
in
{
security.acme.certs."gaze.systems".extraDomainNames = [
-
dawnDid guestbookDid "drew.gaze.systems"
+
dawnDid guestbookDid "drew.gaze.systems" "test.gaze.systems"
];
services.nginx.virtualHosts = {
+
"test.gaze.systems" = mkHandleCfg "gaze.systems" "did:web:dawn.gaze.systems";
"poor.dog" = mkHandleCfg "poor.dog" "did:plc:dfl62fgb7wtjj3fcbb72naae";
"ptr.pet" = mkHandleCfg "ptr.pet" "did:plc:dfl62fgb7wtjj3fcbb72naae";
"nil.ptr.pet" = mkHandleCfg "ptr.pet" "did:web:dawn.gaze.systems";
+
"june.ptr.pet" = mkHandleCfg "ptr.pet" "did:plc:y3z2rr7q5rywu4fjn3fmfyop";
"drew.gaze.systems" = mkHandleCfg "gaze.systems" "did:plc:vo6ie3kd6xvpjlof4pnb2zzp";
}
// (mkDidWebCfg dawnDid)
-4
hosts/wolumonde/modules/blog.nix
···
services.nginx.virtualHosts."poor.dog" = {
locations."/".return = "301 https://gaze.systems$request_uri";
};
-
-
services.nginx.virtualHosts."ptr.pet" = {
-
locations."/".return = "301 https://gaze.systems$request_uri";
-
};
}
+62
hosts/wolumonde/modules/email.nix
···
+
{pkgs, ...}: {
+
security.acme.certs."ptr.pet".extraDomainNames = [
+
"mta-sts.ptr.pet"
+
"autoconfig.ptr.pet"
+
"autodiscover.ptr.pet"
+
"test.ptr.pet"
+
];
+
services.nginx.virtualHosts."test.ptr.pet" = {
+
useACMEHost = "ptr.pet";
+
quic = true;
+
kTLS = true;
+
forceSSL = true;
+
};
+
services.nginx.virtualHosts."ptr.pet" = {
+
useACMEHost = "ptr.pet";
+
quic = true;
+
kTLS = true;
+
forceSSL = true;
+
locations."/mail/config-v1.1.xml" = {
+
return = "301 https://autoconfig.migadu.com/mail/config-v1.1.xml";
+
};
+
locations."/Autodiscover/Autodiscover.xml" = {
+
return = "301 https://autodiscover.migadu.com/Autodiscover/Autodiscover.xml";
+
};
+
};
+
services.nginx.virtualHosts."mta-sts.ptr.pet" = let
+
file = pkgs.writeText "mta-sts.txt" ''
+
version: STSv1
+
mode: enforce
+
mx: aspmx1.migadu.com
+
mx: aspmx2.migadu.com
+
max_age: 31557600
+
'';
+
in {
+
useACMEHost = "ptr.pet";
+
quic = true;
+
kTLS = true;
+
forceSSL = true;
+
locations."=/.well-known/mta-sts.txt".extraConfig = ''
+
alias ${file};
+
default_type text/plain;
+
'';
+
};
+
services.nginx.virtualHosts."autoconfig.ptr.pet" = {
+
useACMEHost = "ptr.pet";
+
quic = true;
+
kTLS = true;
+
forceSSL = true;
+
locations."/" = {
+
return = "301 https://autoconfig.migadu.com$request_uri";
+
};
+
};
+
services.nginx.virtualHosts."autodiscover.ptr.pet" = {
+
useACMEHost = "ptr.pet";
+
quic = true;
+
kTLS = true;
+
forceSSL = true;
+
locations."/" = {
+
return = "301 https://autodiscover.migadu.com$request_uri";
+
};
+
};
+
}
+2 -1
secrets/dawn.gaze.systems.did
···
"id": "did:web:dawn.gaze.systems",
"alsoKnownAs": [
"at://nil.ptr.pet",
-
"at://dawn.gaze.systems"
+
"at://dawn.gaze.systems",
+
"at://test.gaze.systems"
],
"verificationMethod": [
{