{ config, lib, pkgs, ... }: with lib; let strojnadzor = import ./. {}; cfg = config.services.strojnadzor; in { options = { services.strojnadzor = { enable = mkOption { default = false; description = " Whether to enable Strojnadzor "; }; hostname = mkOption { default = "localhost"; description = "Listen to this hostname or ip."; }; port = mkOption { type = types.port; default = 9000; description = "Listen on this port."; }; stateDir = mkOption { default = "/var/lib/strojnadzor"; type = types.str; description = "Strojnadzor data directory."; }; }; }; config = mkIf cfg.enable { users.users.strojnadzor = { description = "Strojnadzor user"; isSystemUser = true; group = "strojnadzor"; home = cfg.stateDir; }; users.groups.strojnadzor = {}; environment.systemPackages = [ strojnadzor ]; systemd.tmpfiles.rules = [ "d '${cfg.stateDir}' - strojnadzor strojnadzor - -" "d '${cfg.stateDir}/data' - strojnadzor strojnadzor - -" ]; systemd.services.strojnadzor = { description = "Strojnadzor HTTP server."; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { User = "strojnadzor"; Group = "strojnadzor"; ExecStartPre = "${strojnadzor}/bin/strojnadzor-admin migrate"; ExecStart = "${strojnadzor}/bin/strojnadzor-admin runserver-uvicorn ${cfg.hostname} ${toString cfg.port}"; }; environment.STROJNADZOR_DATA_DIR = "${cfg.stateDir}/data"; }; }; }