config/profiles/http/index/default.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>
'';
};
}