57 lines
2.1 KiB
Nix
57 lines
2.1 KiB
Nix
{ config, pkgs, lib, mkDomain, allSubdomains, ... }:
|
|
let
|
|
# TODO: support fully qualified urls as well
|
|
customDescriptions = rec {
|
|
index = "This page";
|
|
"links.pbsds.net" = "Linktree";
|
|
"i.kuklef.se" = pkgs.microbin.meta.description;
|
|
www = "wwwwwwwwwwwwwww";
|
|
${config.networking.fqdn} = www;
|
|
|
|
refleksjon = "My dad is a cheapskate";
|
|
roroslyd = "My dad is a cheapskate";
|
|
|
|
docs = "Various documentation";
|
|
element = pkgs.element-web.meta.description;
|
|
shlink = "Url shortener";
|
|
|
|
head = pkgs.headscale.meta.description;
|
|
};
|
|
in
|
|
{
|
|
# list of other endpoints hosted with nginx
|
|
# it assumes the owest subdomain equals a package name in pkgs or python3.pkgs.
|
|
|
|
services.nginx.virtualHosts.${mkDomain "index"} = {
|
|
forceSSL = true; # addSSL = true;
|
|
enableACME = true; #useACMEHost = acmeDomain;
|
|
root = with lib; let
|
|
getName = domain: head (lib.splitString "." domain);
|
|
getDomain = domain: concatStringsSep "." (tail (lib.splitString "." domain));
|
|
getDesc = domain:
|
|
let
|
|
name = getName domain;
|
|
in
|
|
if lib.hasAttr domain customDescriptions
|
|
then customDescriptions.${domain}
|
|
else if lib.hasAttr name customDescriptions
|
|
then customDescriptions.${name}
|
|
else if lib.hasAttr name pkgs
|
|
then pkgs.${name}.meta.description
|
|
else if lib.hasAttr name pkgs.python3Packages
|
|
then pkgs.python3Packages.${name}.meta.description
|
|
else if lib.hasAttrByPath [name "package"] config.services
|
|
then config.services.${name}.package.meta.description
|
|
else "";
|
|
mkRow = domain: ''<tr><td><a href="//${domain}">${getName domain}<span style="opacity: 0.65;">.${getDomain domain}</span></a><td>${getDesc domain}'';
|
|
in pkgs.writeTextDir "index.html" ''
|
|
<!DOCTYPE html>
|
|
<table>
|
|
<tr><th>url<th>description
|
|
${lib.concatStringsSep "\n" (map mkRow allSubdomains)}
|
|
</table>
|
|
'';
|
|
};
|
|
|
|
}
|