{ config, lib, pkgs, flake, ... }: let inherit (flake.config.people) user0; cfg = config.services.comfyui; in { imports = [ ]; options = { services.comfyui = with lib; { enable = mkEnableOption "ComfyUI service"; package = mkOption { type = types.package; default = pkgs.comfyuiPackages.comfyui.override { extensions = with pkgs.comfyuiPackages.extensions; [ # Add desired extensions here # Example extensions: # acly-inpaint # acly-tooling # cubiq-ipadapter-plus # fannovel16-controlnet-aux ]; commandLineArgs = [ "--preview-method" "auto" ]; }; description = "The ComfyUI package to use"; }; port = mkOption { type = types.port; default = 8188; description = "Port to listen on"; }; host = mkOption { type = types.str; default = "127.0.0.1"; description = "Host to bind to"; }; openFirewall = mkOption { type = types.bool; default = false; description = "Open ports in the firewall"; }; }; }; config = lib.mkIf cfg.enable { environment.systemPackages = [ cfg.package ]; networking.firewall = lib.mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port ]; }; systemd.services.comfyui = { description = "ComfyUI Service"; wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; serviceConfig = { Type = "simple"; ExecStart = "${cfg.package}/bin/comfyui --port ${toString cfg.port} --listen ${cfg.host}"; Restart = "on-failure"; User = "comfyui"; Group = "comfyui"; WorkingDirectory = "/var/lib/comfyui"; }; }; users.users.comfyui = { group = "comfyui"; isSystemUser = true; home = "/var/lib/comfyui"; createHome = true; }; users.groups.comfyui = { }; }; }