{ config, pkgs, ... }: let ports = import ./Ports.nix; in { config.virtualisation.oci-containers.backend = "docker"; config.virtualisation.oci-containers.containers.open-webui-aichat = { image = "ghcr.io/open-webui/open-webui:main"; volumes = ["/var/lib/open-webui-aichat:/app/backend/data"]; environment = { PORT = toString ports.open-webui-aichat; }; extraOptions = ["--network=host"]; }; # Add a service that updates and restarts the container config.systemd.services."update-open-webui-aichat" = { description = "pulling new open-webui image and restarting the service"; wantedBy = ["multi-user.target"]; after = ["network-online.target"]; serviceConfig = { Type = "oneshot"; ExecStart = [ # Pull the latest image "${pkgs.docker}/bin/docker pull ghcr.io/open-webui/open-webui:main" # Restart the container "${pkgs.systemd}/bin/systemctl stop docker-open-webui-aichat" "${pkgs.systemd}/bin/systemctl start docker-open-webui-aichat" ]; }; }; # Add a timer that runs every Sunday at 3 AM config.systemd.timers."update-open-webui-aichat" = { wantedBy = ["timers.target"]; timerConfig.OnCalendar = "Sun 03:00:00"; timerConfig.Persistent = true; unitConfig.Description = "Weekly timer for pulling new open-webui image and restarting service."; }; }