fragdenrat/module.nix
2025-08-19 10:17:08 +02:00

73 lines
1.6 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.fragify;
in
{
options = {
services.fragify = {
enable = lib.mkEnableOption "Fragify web app";
};
};
config = lib.mkIf cfg.enable {
# uWSGI configuration (nixos-25.05 uses `instance`, not `instances`)
services.uwsgi.enable = true;
services.uwsgi.user = "fragify";
services.uwsgi.group = "fragify";
services.uwsgi.plugins = [ "python3" ];
services.uwsgi.instance."fragify" = {
type = "normal";
chdir = "/";
# WSGI entry from packaged share dir
wsgi-file = "${pkgs.fragify}/share/fragify/fragify_wsgi.py";
module = "fragify:app";
# Socket
socket = "unix:${config.services.uwsgi.runDir}/fragify.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;
# Pass environment to the app
env = {
FRAGIFY_TEMPLATES_DIR = "${pkgs.fragify}/share/fragify/templates";
FRAGIFY_STATIC_DIR = "${pkgs.fragify}/share/fragify/assets";
};
# Python deps for the embedded interpreter
pythonPackages = p: with p; [ falcon requests jinja2 ];
# Extra raw uWSGI settings not covered by module options
settings = {
"static-map" = "/static=${pkgs.fragify}/share/fragify/assets";
};
};
# Ensure fragify user and group exist
users.users.fragify = {
isSystemUser = true;
group = "fragify";
description = "fragify web application user";
};
users.groups.fragify = {};
};
meta = {
maintainers = with lib.maintainers; [ onny ];
};
}