diff --git a/modules/nixos/services/comfyui/default.nix b/modules/nixos/services/comfyui/default.nix index a0dd027..77b973f 100755 --- a/modules/nixos/services/comfyui/default.nix +++ b/modules/nixos/services/comfyui/default.nix @@ -68,21 +68,45 @@ in allowedTCPPorts = [ cfg.port ]; }; - systemd.services.comfyui = { - description = "ComfyUI Service"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; + systemd.services.comfyui = + let + comfyui-wrapper = pkgs.writeShellScript "comfyui-wrapper" '' + # Let ComfyUI initialize its files first + cd /var/lib/comfyui - serviceConfig = { - Type = "simple"; - ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/lib/comfyui/custom_nodes"; - ExecStart = "${cfg.package}/bin/comfyui --port ${toString cfg.port} --listen ${cfg.host}"; - Restart = "on-failure"; - User = "comfyui"; - Group = "comfyui"; - WorkingDirectory = "/var/lib/comfyui"; + # Start ComfyUI in background to initialize files + ${cfg.package}/bin/comfyui --port ${toString cfg.port} --listen ${cfg.host} & + COMFYUI_PID=$! + + # Wait a moment for file initialization + sleep 2 + + # Kill the initialization process + kill $COMFYUI_PID 2>/dev/null || true + wait $COMFYUI_PID 2>/dev/null || true + + # Now recreate the custom_nodes directory + mkdir -p /var/lib/comfyui/custom_nodes + + # Start ComfyUI properly + exec ${cfg.package}/bin/comfyui --port ${toString cfg.port} --listen ${cfg.host} + ''; + in + { + description = "ComfyUI Service"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig = { + Type = "simple"; + ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p /var/lib/comfyui/custom_nodes"; + ExecStart = "${comfyui-wrapper}"; + Restart = "on-failure"; + User = "comfyui"; + Group = "comfyui"; + WorkingDirectory = "/var/lib/comfyui"; + }; }; - }; users.users.comfyui = { group = "comfyui";