{ self, ... }: { flake.domain = "heimfeld.hamburg"; flake.machines.tharos = { nixos = { lib, ... }: { networking.firewall.allowedTCPPorts = [ 80 443 ]; services.caddy = { enable = true; email = "redaktion@${self.domain}"; virtualHosts.${self.domain} = { serverAliases = [ "www.${self.domain}" ]; extraConfig = '' file_server { index index.shtml${ "" # TODO: Entfernen wenn Inhalte aufgeräumt } } root * /var/www/${self.domain} encode gzip ${ "" # TODO: Entfernen wenn Inhalte aufgeräumt }@shtml { path *.shtml path */ } header @shtml Content-Type "text/html; charset=utf-8" ''; }; }; systemd.tmpfiles.rules = let html = with lib.fileset; toSource { root = ./html; fileset = ./html; }; in [ # Verzeichnis für Web-Inhalte sofort anlegen, da der Webserver sonst nicht startet, # aber nur wenn es noch nicht existiert. "C /var/www/${self.domain} - - - - ${html}" ]; }; vm = { config, pkgs, lib, ... }: let httpPort = 800; in { services.caddy.globalConfig = '' local_certs ''; services.caddy.virtualHosts = { "http://localhost:${toString httpPort}".extraConfig = config.services.caddy.virtualHosts.${self.domain}.extraConfig; }; networking.firewall.allowedTCPPorts = [ httpPort ]; systemd.services.caddy.path = [ pkgs.nssTools ]; # Irrelevante Warnung unterdrücken services.getty.helpLine = lib.mkAfter '' ${ "" # Leerzeile für bessere Lesbarkeit } ${self.domain}: http://localhost:${toString (config.virtualisation.portOffset + httpPort)} ''; }; }; }