EAPI=8
DESCRIPTION='Get up and running with large language models.'
HOMEPAGE='https://ollama.com https://github.com/ollama/ollama'
SRC_MAIN_URI='https://github.com/ollama/ollama/releases/download/v'
SRC_URI="
	amd64? ( ${SRC_MAIN_URI}${PV}/ollama-linux-amd64.tgz      -> $P.amd64.tgz )
	arm64? ( ${SRC_MAIN_URI}${PV}/ollama-linux-arm64.tgz      -> $P.arm64.tgz )
	rocm?  ( ${SRC_MAIN_URI}${PV}/ollama-linux-amd64-rocm.tgz -> $P.rocm.tgz  )
"
S="${WORKDIR}"
LICENSE='MIT'
SLOT='0'
KEYWORDS='~amd64 ~arm64'
IUSE='+systemd rocm'
DEPEND='acct-user/ollama acct-group/ollama'
RDEPEND='acct-user/ollama acct-group/ollama'
RESTRICT='strip'

src_unpack() {
	if use rocm; then
		tar -xzvf "${DISTDIR}/${P}.rocm.tgz" -C "${WORKDIR}" || die "Can't extract rocm tgz"
	elif use amd64; then
		tar -xzvf "${DISTDIR}/${P}.amd64.tgz" -C "${WORKDIR}" || die 'Failed to extract binary'
	elif use arm64; then
		tar -xzvf "${DISTDIR}/${P}.arm64.tgz" -C "${WORKDIR}" || die 'Failed to extract binary'
	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/" || die 'Failed to install libraries'
	dosym -r /opt/Ollama/bin/ollama /opt/bin/ollama
}

src_prepare() {
	eapply_user
}

pkg_postinst() {
	einfo 'Quick guide:'
	einfo 'ollama serve'
	einfo 'ollama run llama3:70b'
	einfo 'See available models at https://ollama.com/library'
	if use systemd; then
		einfo 'Creating systemd service file...'
		{
			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'
		} > /usr/lib/systemd/system/ollama.service
		einfo 'Service file created at /etc/systemd/system/ollama.service'
		einfo 'Making service user-startable...'
		mkdir -p /etc/systemd/user
		ln -s /usr/lib/systemd/system/ollama.service /etc/systemd/user/ollama.service
		ln -s /usr/lib/systemd/system/ollama.service /etc/systemd/system/ollama.service
	fi
}