# Copyright 2024-2026 Arran Ubels
# Distributed under the terms of the GNU General Public License v2

# Generated by:
# .github/workflows/app-misc-ollama-bin-update.yaml
EAPI=8
DESCRIPTION="Get up and running with Llama 3, Mistral, Gemma, and other LLMs"
HOMEPAGE="https://ollama.com"
MY_PV="${PV/_/-}"
OLLAMA_RELEASE_BASE="github.com/ollama/ollama/releases/download"
SRC_URI="
	amd64? (
		https://${OLLAMA_RELEASE_BASE}/v${MY_PV}/ollama-linux-amd64.tar.zst
			-> ${P}.amd64.tar.zst
	)
	arm64? (
		https://${OLLAMA_RELEASE_BASE}/v${MY_PV}/ollama-linux-arm64.tar.zst
			-> ${P}.arm64.tar.zst
	)
	rocm? (
		https://${OLLAMA_RELEASE_BASE}/v${MY_PV}/ollama-linux-amd64-rocm.tar.zst
			-> ${P}.rocm.tar.zst
	)"
S="${WORKDIR}"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="+systemd rocm"
RESTRICT="strip"
BDEPEND="app-arch/zstd"
DEPEND="acct-user/ollama acct-group/ollama"
RDEPEND="acct-user/ollama acct-group/ollama"

inherit systemd

src_unpack() {
	if use rocm; then
		tar --zstd -xf "${DISTDIR}/${P}.rocm.tar.zst" \
			-C "${WORKDIR}" || die "Failed to unpack rocm"
	fi
	if use amd64; then
		tar --zstd -xf "${DISTDIR}/${P}.amd64.tar.zst" \
			-C "${WORKDIR}" || die "Failed to unpack amd64"
	elif use arm64; then
		tar --zstd -xf "${DISTDIR}/${P}.arm64.tar.zst" \
			-C "${WORKDIR}" || die "Failed to unpack arm64"
	fi
}

src_install() {
	exeinto /opt/Ollama/bin
	doexe "${WORKDIR}/bin/ollama" || die "Failed to install binary"
	insinto /opt/Ollama/lib
	doins -r "${WORKDIR}/lib/ollama/"
	fperms -R +x /opt/Ollama/lib/ollama
	dosym ../Ollama/bin/ollama /opt/bin/ollama
	{
		echo "[Unit]"
		echo "Description=Ollama Service"
		echo "After=network-online.target"
		echo ""
		echo "[Service]"
		echo "ExecStart=/opt/Ollama/bin/ollama serve"
		echo "User=ollama"
		echo "Group=ollama"
		echo "Restart=always"
		echo "RestartSec=3"
		echo ""
		echo "[Install]"
		echo "WantedBy=default.target"
	} > "${T}/ollama.service"
	systemd_dounit "${T}/ollama.service"
}

src_prepare() {
	eapply_user
}

pkg_postinst() {
	einfo "Quick guide:"
	if use systemd; then
		einfo "  To start the system-wide service:"
		einfo "    systemctl start ollama"
		einfo "  Or to run it manually as your user:"
	fi
	einfo "  ollama serve"
	einfo ""
	einfo "To run a model:"
	einfo "  ollama run llama3:70b"
	einfo ""
	einfo "See available models at https://ollama.com/library"
}