{ self, lib, ... }: { flake.machines.tharos = { nixos = { config, lib, ... }: let website = self.websites.${config.nixpkgs.hostPlatform.system}.${self.domain}; in { services.caddy.virtualHosts.${self.domain} = { serverAliases = [ "www.${self.domain}" ]; extraConfig = '' file_server root * /var/www/${self.domain} encode gzip ${website.redirects.caddy} ''; }; systemd.tmpfiles.rules = [ # 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} - - - - ${website.result}" ]; }; vm = { config, pkgs, lib, ... }: { services.caddy.virtualHosts = { "http://www.localhost:${toString config.virtualisation.exposedPorts.http.port}".extraConfig = config.services.caddy.virtualHosts.${self.domain}.extraConfig; }; services.getty.helpLine = lib.mkBefore '' ${self.domain}: http://www.localhost:${ with config.virtualisation; toString (portOffset + exposedPorts.http.port) } ''; }; }; perSystem = { pkgs, lib, system, config, self', ... }: { # Website aus Quellcode generiert packages.html = self'.websites.${self.domain}.result; # Website-Inhalte auf den Server hochladen packages.publish = pkgs.writeShellApplication { name = "publish"; runtimeInputs = with pkgs; [ rsync ]; text = '' rsync -avi --rsync-path "sudo rsync" --chown caddy:caddy --delete ${self'.packages.html}/ ${self.machines.tharos.deploy-target}:/var/www/${self.domain}/ ''; }; # Lokale Vorschau packages.preview = pkgs.devmode.override { buildArgs = '' "$(${lib.getExe pkgs.git} rev-parse --show-toplevel)" -A packages.${system}.html -vv ''; }; }; }