forked from aylac.top/nixcfg
this repo has no description

now with custom pds homepages that i need to improve on because this one is boring

Changed files
+82 -43
hosts
modules
nixos
profiles
btrfs
services
caddy
tailscale
+3 -3
flake.lock
···
"secrets": {
"flake": false,
"locked": {
-
"lastModified": 1755978140,
-
"narHash": "sha256-pIYijjXyKg9dMrPX4N6R4zwBvHnEo1ehw8GW04KPavE=",
"owner": "ayla6",
"repo": "secrets",
-
"rev": "4643f2fc96502ff02b21a0aa548761d916dcceac",
"type": "github"
},
"original": {
···
"secrets": {
"flake": false,
"locked": {
+
"lastModified": 1756000212,
+
"narHash": "sha256-NtfJH24mmiffXOilGrhFvS8H7mkQ+QeYA8iafwoRPE0=",
"owner": "ayla6",
"repo": "secrets",
+
"rev": "b8954ab5d95c7b82b64894873c2434154ab91aa8",
"type": "github"
},
"original": {
+7 -7
hosts/nanpi/glance.nix
···
check-url = "http://${config.mySnippets.tailnet.networkMap.jellyfin.hostName}:${toString config.mySnippets.tailnet.networkMap.jellyfin.port}/web/index.html";
icon = "di:jellyfin";
}
-
#{
-
# title = "Jellyseerr";
-
# url = "https://${config.mySnippets.tailnet.networkMap.jellyseerr.vHost}/";
-
# check-url = "http://${config.mySnippets.tailnet.networkMap.jellyseerr.hostName}:${toString config.mySnippets.tailnet.networkMap.jellyseerr.port}/";
-
# icon = "di:jellyseerr";
-
#}
{
title = "Sonarr";
url = "https://${config.mySnippets.tailnet.networkMap.sonarr.vHost}/";
···
title = "audiobookshelf";
url = "https://${config.mySnippets.tailnet.networkMap.audiobookshelf.vHost}/";
check-url = "http://${config.mySnippets.tailnet.networkMap.audiobookshelf.hostName}:${toString config.mySnippets.tailnet.networkMap.audiobookshelf.port}/";
-
icon = "di:miniflux";
}
];
}
···
check-url = "http://${config.mySnippets.tailnet.networkMap.jellyfin.hostName}:${toString config.mySnippets.tailnet.networkMap.jellyfin.port}/web/index.html";
icon = "di:jellyfin";
}
+
{
+
title = "Jellyseerr";
+
url = "https://${config.mySnippets.tailnet.networkMap.jellyseerr.vHost}/";
+
check-url = "http://${config.mySnippets.tailnet.networkMap.jellyseerr.hostName}:${toString config.mySnippets.tailnet.networkMap.jellyseerr.port}/";
+
icon = "di:jellyseerr";
+
}
{
title = "Sonarr";
url = "https://${config.mySnippets.tailnet.networkMap.sonarr.vHost}/";
···
title = "audiobookshelf";
url = "https://${config.mySnippets.tailnet.networkMap.audiobookshelf.vHost}/";
check-url = "http://${config.mySnippets.tailnet.networkMap.audiobookshelf.hostName}:${toString config.mySnippets.tailnet.networkMap.audiobookshelf.port}/";
+
icon = "di:audiobookshelf";
}
];
}
+64 -30
hosts/nanpi/services.nix
···
in
pkgs.lib.nameValuePair netMap.vHost "http://${netMap.hostName}:${toString netMap.port}")
services);
in {
services = {
cloudflared = {
···
certificateFile = config.age.secrets.cloudflareCertificate.path;
credentialsFile = config.age.secrets.cloudflareCredentials.path;
default = "http_status:404";
-
ingress = mkCloudflareIngress [
-
{name = "forgejo";}
-
{name = "glance";}
-
{name = "ntfy";}
-
{name = "pds";}
-
{name = "vaultwarden";}
-
];
};
};
};
-
caddy.virtualHosts = mkCaddyVHosts [
-
{name = "audiobookshelf";}
-
{name = "autobrr";}
-
{name = "bazarr";}
-
{name = "copyparty";}
-
{name = "couchdb";}
-
{name = "glance";}
-
{
-
name = "jellyfin";
-
flushInterval = true;
-
}
-
{name = "jellyseerr";}
-
{name = "karakeep";}
-
{name = "miniflux";}
-
{name = "prowlarr";}
-
{name = "qbittorrent";}
-
{name = "radarr";}
-
{name = "radicale";}
-
{name = "redlib";}
-
{name = "sonarr";}
-
{name = "webdav";}
-
];
pds = {
enable = true;
···
};
jellyseerr = {
-
enable = false;
inherit (config.mySnippets.tailnet.networkMap.jellyseerr) port;
openFirewall = true;
};
···
in
pkgs.lib.nameValuePair netMap.vHost "http://${netMap.hostName}:${toString netMap.port}")
services);
+
+
pdsHomePage = ''
+
hiii this is an ATProto PDS!! You will find my (ayla) account here!!
+
i should probably put some cool ass art in here or maybe an actual homepage
+
but having this by itself is fun
+
+
most API routes are under /xrpc/
+
'';
in {
services = {
cloudflared = {
···
certificateFile = config.age.secrets.cloudflareCertificate.path;
credentialsFile = config.age.secrets.cloudflareCredentials.path;
default = "http_status:404";
+
ingress =
+
mkCloudflareIngress [
+
{name = "forgejo";}
+
{name = "glance";}
+
{name = "ntfy";}
+
{name = "vaultwarden";}
+
]
+
// {
+
"${config.mySnippets.aylac-top.networkMap.pds.vHost}" = "http://${config.mySnippets.aylac-top.networkMap.pds.hostName}";
+
};
};
};
};
+
caddy.virtualHosts =
+
mkCaddyVHosts [
+
{name = "audiobookshelf";}
+
{name = "autobrr";}
+
{name = "bazarr";}
+
{name = "copyparty";}
+
{name = "couchdb";}
+
{name = "glance";}
+
{
+
name = "jellyfin";
+
flushInterval = true;
+
}
+
{name = "jellyseerr";}
+
{name = "karakeep";}
+
{name = "miniflux";}
+
{name = "prowlarr";}
+
{name = "qbittorrent";}
+
{name = "radarr";}
+
{name = "radicale";}
+
{name = "redlib";}
+
{name = "sonarr";}
+
{name = "webdav";}
+
]
+
// {
+
"http://${config.mySnippets.aylac-top.networkMap.pds.vHost}" = {
+
extraConfig = ''
+
encode zstd gzip
+
+
handle / {
+
respond "${pdsHomePage}"
+
}
+
+
handle /xrpc/app.bsky.unspecced.getAgeAssuranceState {
+
header content-type "application/json"
+
header access-control-allow-headers "authorization,dpop,atproto-accept-labelers,atproto-proxy"
+
header access-control-allow-origin "*"
+
respond `{"lastInitiatedAt":"2025-07-14T14:22:43.912Z","status":"assured"}` 200
+
}
+
+
handle {
+
reverse_proxy ${config.mySnippets.aylac-top.networkMap.pds.hostName}:${toString config.mySnippets.aylac-top.networkMap.pds.port}
+
}
+
'';
+
};
+
};
pds = {
enable = true;
···
};
jellyseerr = {
+
enable = true;
inherit (config.mySnippets.tailnet.networkMap.jellyseerr) port;
openFirewall = true;
};
+3
modules/nixos/profiles/btrfs/default.nix
···
-.snapshots
-.thunderbird
-.zshrc
'';
persistentTimer = true;
···
-.snapshots
-.thunderbird
-.zshrc
+
-.zen
+
-.steam
+
-.npm
'';
persistentTimer = true;
+4 -2
modules/nixos/services/caddy/default.nix
···
options.myNixOS.services.caddy.enable = lib.mkEnableOption "Caddy web server.";
config = lib.mkIf config.myNixOS.services.caddy.enable {
-
age.secrets.tailscaleCaddyAuth.file = "${self.inputs.secrets}/tailscale/caddyAuth.age";
networking.firewall.allowedTCPPorts = [80 443];
services = {
caddy = {
enable = true;
enableReload = false;
-
environmentFile = config.age.secrets.tailscaleCaddyAuth.path;
globalConfig = ''
tailscale {
···
};
tailscale.permitCertUid = "caddy";
};
};
}
···
options.myNixOS.services.caddy.enable = lib.mkEnableOption "Caddy web server.";
config = lib.mkIf config.myNixOS.services.caddy.enable {
+
# TS_AUTHKEY and CF_API_TOKEN are defined in this file
+
age.secrets.caddy.file = "${self.inputs.secrets}/caddy.age";
networking.firewall.allowedTCPPorts = [80 443];
services = {
caddy = {
enable = true;
enableReload = false;
+
environmentFile = config.age.secrets.caddy.path;
globalConfig = ''
tailscale {
···
};
tailscale.permitCertUid = "caddy";
};
+
systemd.services.caddy.serviceConfig.AmbientCapabilities = "CAP_NET_BIND_SERVICE";
};
}
+1 -1
modules/nixos/services/tailscale/default.nix
···
}
];
-
age.secrets.tailscaleCaddyAuth.file = "${self.inputs.secrets}/tailscale/caddyAuth.age";
home-manager.sharedModules = [
{
···
}
];
+
age.secrets.caddy.file = "${self.inputs.secrets}/caddy.age";
home-manager.sharedModules = [
{