{ config, lib, pkgs, ... }: let cfg = config.services.fragdenrat; in { options = { services.fragdenrat = { enable = lib.mkEnableOption "FragDenRat web app"; }; }; config = lib.mkIf cfg.enable { services.uwsgi = { enable = true; plugins = [ "python3" ]; instance = { type = "emperor"; vassals = { fragdenrat = { type = "normal"; chdir = "${pkgs.fragdenrat}/share/fragdenrat"; module = "fragdenrat.wsgi:application"; socket = "${config.services.uwsgi.runDir}/fragdenrat.sock"; "chmod-socket" = "660"; umask = "0077"; vacuum = true; master = true; processes = 2; threads = 2; harakiri = 60; "buffer-size" = 65535; need-app = true; "no-orphans" = true; env = [ "PYTHONPATH=${pkgs.fragdenrat}/share/fragdenrat:${pkgs.fragdenrat.pythonPath}" "DJANGO_SETTINGS_MODULE=fragdenrat.settings" ]; settings = { "static-map" = "/static=${pkgs.fragdenrat}/share/fragdenrat/assets"; # Ensure Python can import the project package pythonpath = "${pkgs.fragdenrat}/share/fragdenrat"; }; }; }; }; }; # Ensure fragdenrat user and group exist users.users.fragdenrat = { isSystemUser = true; group = "fragdenrat"; description = "FragDenRat web application user"; }; users.groups.fragdenrat = { }; }; meta = { maintainers = with lib.maintainers; [ onny ]; }; }