{ inputs, lib, pkgs, ... }: let inherit (lib.attrsets) attrValues; inherit (lib.meta) getExe'; systemctl = getExe' pkgs.systemd "systemctl"; port = 4827; sitePath = "/srv/web/jacekpoz.pl"; in { services.caddy = { enable = true; virtualHosts = { "jacekpoz.pl".extraConfig = '' reverse_proxy localhost:${toString port} ''; "jpoz.pl".extraConfig = '' redir / https://jacekpoz.pl redir /git https://jacekpoz.pl/posts/git-workflow.html ''; "jacek.poziem.ski".extraConfig = '' redir https://jacekpoz.pl ''; }; }; users.groups.site = {}; users.users.site = { isSystemUser = true; group = "site"; }; systemd = { services = { pozback = { description = "The backend for jacekpoz.pl"; after = ["network.target"]; wantedBy = ["multi-user.target"]; serviceConfig = { Type = "simple"; ExecStart = "${inputs.pozsite.packages.${pkgs.system}.pozback}/bin/back"; Restart = "on-failure"; Environment = ''POZ_PORT="${toString port}" POZ_DIR="${sitePath}"''; User = "site"; Group = "site"; }; path = attrValues { inherit (pkgs) fastfetch colorized-logs ; }; }; pozback-watcher = { description = "Restarter for the backend"; after = ["network.target"]; wantedBy = ["multi-user.target"]; serviceConfig = { Type = "oneshot"; ExecStart = "${systemctl} restart pozback.service"; }; }; }; paths.pozback-watcher = { wantedBy = ["multi-user.target"]; pathConfig = { PathModified = sitePath; Unit = "pozback-watcher.service"; }; }; }; }