78 lines
2.3 KiB
Nix
78 lines
2.3 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
config.programs.firefox.webapps = {
|
|
"OpenWebUI" = {
|
|
url = "http://127.0.0.1:3021";
|
|
id = 6;
|
|
extraSettings = config.programs.firefox.profiles.default.settings;
|
|
name = "OpenWebUI Client";
|
|
hidden = true;
|
|
};
|
|
};
|
|
|
|
config.systemd.user.services = {
|
|
open-webui = {
|
|
Unit.Description = "OpenWebUI";
|
|
Service = let
|
|
docker = lib.getExe pkgs.docker;
|
|
in {
|
|
Type = "exec";
|
|
ExecStartPre = "-${docker} create -e PORT=3021 --network host --gpus all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama";
|
|
ExecStart = "${docker} start open-webui";
|
|
ExecStop = "${docker} stop open-webui";
|
|
};
|
|
};
|
|
};
|
|
|
|
config.xdg.desktopEntries = {
|
|
open-webui = {
|
|
name = "Ollama OpenWebUI";
|
|
type = "Application";
|
|
icon = ../icons/openwebui.png;
|
|
exec = "${let
|
|
notify-send = "${lib.getExe' pkgs.libnotify "notify-send"}";
|
|
systemctl = "${lib.getExe' pkgs.systemd "systemctl"}";
|
|
dex = "${lib.getExe pkgs.dex}";
|
|
curl = "${lib.getExe pkgs.curl}";
|
|
in
|
|
pkgs.writeShellScript "ollama"
|
|
''
|
|
${notify-send} "Ollama OpenWebUI" "Launching backend.."
|
|
${systemctl} --user start open-webui
|
|
attempts=0
|
|
success=false
|
|
|
|
while [[ $attempts -lt $((20*9)) ]]; do
|
|
if [[ $(${curl} http://127.0.0.1:3021) ]]; then
|
|
${notify-send} "Ollama OpenWebUI" "Launching client.."
|
|
success=true
|
|
break
|
|
else
|
|
attempts=$((attempts+1))
|
|
if [[ $(($attempts % 20)) -eq 0 ]]; then
|
|
${notify-send} "Ollama OpenWebUI" "Still launching backend.. ($((attempts/2))s)"
|
|
fi
|
|
fi
|
|
sleep 0.5
|
|
done
|
|
|
|
if [[ ! $success ]]; then
|
|
${notify-send} "Ollama OpenWebUI" "Failed to launch backend!"
|
|
${systemctl} --user kill open-webui
|
|
exit 1
|
|
fi
|
|
|
|
sleep 0.5 # give it a little time
|
|
${dex} -w ~/.nix-profile/share/applications/OpenWebUI.desktop
|
|
|
|
${notify-send} "Ollama OpenWebUI" "Shutting down."
|
|
${systemctl} --user stop open-webui
|
|
exit 0
|
|
''}";
|
|
};
|
|
};
|
|
}
|