# Copyright 2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
#
# This ebuild is derived from http://gpo.zugaina.org/Overlays/ROKO__ and http://gpo.zugaina.org/Overlays/gentoo-zh
# TODO: FontPatcher is not yet included in this ebuild. Will do that later, but PR are welcome :)

EAPI=8

inherit font check-reqs

DESCRIPTION="Collection of fonts that are patched to include a high number of glyphs (icons)."
HOMEPAGE="https://nerdfonts.com"
RESTRICT="mirror"

LICENSE="MIT
		OFL-1.1
		Apache-2.0
		CC-BY-SA-4.0
		BitstreamVera
		BSD
		WTFPL-2
		Vic-Fieger-License
		UbuntuFontLicense-1.0"
SLOT="0"
KEYWORDS="~amd64 ~x86"

DIRNAME=(
	0xProto
	3270
	Agave
	AnonymousPro
	Arimo
	AurulentSansMono
	BigBlueTerminal
	BitstreamVeraSansMono
	CascadiaCode
	CascadiaMono
	CodeNewRoman
	ComicShannsMono
	CommitMono
	Cousine
	D2Coding
	DaddyTimeMono
	DejaVuSansMono
	DroidSansMono
	EnvyCodeR
	FantasqueSansMono
	FiraCode
	FiraMono
	GeistMono
	Go-Mono
	Gohu
	Hack
	Hasklig
	HeavyData
	Hermit
	IBMPlexMono
	Inconsolata
	InconsolataGo
	InconsolataLGC
	IntelOneMono
	Iosevka
	IosevkaTerm
	IosevkaTermSlab
	JetBrainsMono
	Lekton
	LiberationMono
	Lilex
	MPlus
	MartianMono
	Meslo
	MonaSpace
	Monofur
	Monoid
	Mononoki
	NerdFontsSymbolsOnly
	Noto
	OpenDyslexic
	Overpass
	ProFont
	ProggyClean
	RobotoMono
	ShareTechMono
	SourceCodePro
	SpaceMono
	Terminus
	Tinos
	Ubuntu
	UbuntuMono
	VictorMono
	iA-Writer
)

IUSE_FLAGS=(${DIRNAME[*],,})
IUSE="${IUSE_FLAGS[*]}"

MY_URI="https://github.com/ryanoasis/${PN}/releases/download/v${PV}"
TAG_URI="https://github.com/ryanoasis/nerd-fonts/raw/v${PV}"
SRC_URI="0xproto?         ( "${MY_URI}/0xproto.tar.xz" -> "0xproto${PV}.tar.xz" )
  3270?                   ( "${MY_URI}/3270.tar.xz" -> "3270-${PV}.tar.xz" )
	agave?                  ( "${MY_URI}/Agave.tar.xz" -> "Agave-${PV}.tar.xz" )
	anonymouspro?           ( "${MY_URI}/AnonymousPro.tar.xz" -> "AnonymousPro-${PV}.tar.xz"  )
	arimo?                  ( "${MY_URI}/Arimo.tar.xz" -> "Arimo-${PV}.tar.xz"  )
	aurulentsansmono?       ( "${MY_URI}/AurulentSansMono.tar.xz" -> "AurulentSansMono-${PV}.tar.xz"  )
	bigblueterminal?        ( "${MY_URI}/BigBlueTerminal.tar.xz" -> "BigBlueTerminal-${PV}.tar.xz"  )
	bitstreamverasansmono?  ( "${MY_URI}/BitstreamVeraSansMono.tar.xz" -> "BitstreamVeraSansMono-${PV}.tar.xz"  )
	cascadiacode?           ( "${MY_URI}/CascadiaCode.tar.xz" -> "CascadiaCode-${PV}.tar.xz"  )
	cascadiamono?           ( "${MY_URI}/CascadiaMono.tar.xz" -> "CascadiaMono-${PV}.tar.xz"  )
	codenewroman?           ( "${MY_URI}/CodeNewRoman.tar.xz" -> "CodeNewRoman-${PV}.tar.xz"  )
	comicshannsmono?        ( "${MY_URI}/ComicShannsMono.tar.xz" -> "ComicShannsMono-${PV}.tar.xz"  )
	commitmono?             ( "${MY_URI}/CommitMono.tar.xz" -> "CommitMono-${PV}.tar.xz"  )
	cousine?                ( "${MY_URI}/Cousine.tar.xz" -> "Cousine-${PV}.tar.xz"  )
	d2coding?               ( "${MY_URI}/D2Coding.tar.xz" -> "D2Coding-${PV}.tar.xz"  )
	daddytimemono?          ( "${MY_URI}/DaddyTimeMono.tar.xz" -> "DaddyTimeMono-${PV}.tar.xz"  )
	dejavusansmono?         ( "${MY_URI}/DejaVuSansMono.tar.xz" -> "DejaVuSansMono-${PV}.tar.xz"  )
	droidsansmono?          ( "${MY_URI}/DroidSansMono.tar.xz" -> "DroidSansMono-${PV}.tar.xz"  )
	envycoder?              ( "${MY_URI}/EnvyCodeR.tar.xz" -> "EnvyCodeR-${PV}.tar.xz"  )
	fantasquesansmono?      ( "${MY_URI}/FantasqueSansMono.tar.xz" -> "FantasqueSansMono-${PV}.tar.xz"  )
	firacode?               ( "${MY_URI}/FiraCode.tar.xz" -> "FiraCode-${PV}.tar.xz"  )
	firamono?               ( "${MY_URI}/FiraMono.tar.xz" -> "FiraMono-${PV}.tar.xz"  )
	go-mono?                ( "${MY_URI}/Go-Mono.tar.xz" -> "Go-Mono-${PV}.tar.xz"  )
	geistmono?              ( "${MY_URI}/GeistMono.tar.xz" -> "GeistMono-${PV}.tar.xz"  )
	gohu?                   ( "${MY_URI}/Gohu.tar.xz" -> "Gohu-${PV}.tar.xz"  )
	hack?                   ( "${MY_URI}/Hack.tar.xz" -> "Hack-${PV}.tar.xz"  )
	hasklig?                ( "${MY_URI}/Hasklig.tar.xz" -> "Hasklig-${PV}.tar.xz"  )
	heavydata?              ( "${MY_URI}/HeavyData.tar.xz" -> "HeavyData-${PV}.tar.xz"  )
	hermit?                 ( "${MY_URI}/Hermit.tar.xz" -> "Hermit-${PV}.tar.xz"  )
	ia-writer?              ( "${MY_URI}/iA-Writer.tar.xz" -> "iA-Writer-${PV}.tar.xz"  )
	ibmplexmono?            ( "${MY_URI}/IBMPlexMono.tar.xz" -> "IBMPlexMono-${PV}.tar.xz"  )
	inconsolata?            ( "${MY_URI}/Inconsolata.tar.xz" -> "Inconsolata-${PV}.tar.xz"  )
	inconsolatago?          ( "${MY_URI}/InconsolataGo.tar.xz" -> "InconsolataGo-${PV}.tar.xz"  )
	inconsolatalgc?         ( "${MY_URI}/InconsolataLGC.tar.xz" -> "InconsolataLGC-${PV}.tar.xz"  )
	iosevka?                ( "${MY_URI}/Iosevka.tar.xz" -> "Iosevka-${PV}.tar.xz"  )
	iosevkaterm?            ( "${MY_URI}/IosevkaTerm.tar.xz" -> "IosevkaTerm-${PV}.tar.xz"  )
	iosevkatermslab?        ( "${MY_URI}/IosevkaTermSlab.tar.xz" -> "IosevkaTermSlab-${PV}.tar.xz"  )
	intelonemono?           ( "${MY_URI}/IntelOneMono.tar.xz" -> "IntelOneMono-${PV}.tar.xz"  )
	jetbrainsmono?          ( "${MY_URI}/JetBrainsMono.tar.xz" -> "JetBrainsMono-${PV}.tar.xz"  )
	lekton?                 ( "${MY_URI}/Lekton.tar.xz" -> "Lekton-${PV}.tar.xz"  )
	liberationmono?         ( "${MY_URI}/LiberationMono.tar.xz" -> "LiberationMono-${PV}.tar.xz"  )
	lilex?                  ( "${MY_URI}/Lilex.tar.xz" -> "Lilex-${PV}.tar.xz"  )
	martianmono?            ( "${MY_URI}/MartianMono.tar.xz" -> "MartianMono-${PV}.tar.xz"  )
	meslo?                  ( "${MY_URI}/Meslo.tar.xz" -> "Meslo-${PV}.tar.xz"  )
	monaspace?              ( "${MY_URI}/MonaSpace.tar.xz" -> "MonaSpace-${PV}.tar.xz"  )
	monofur?                ( "${MY_URI}/Monofur.tar.xz" -> "Monofur-${PV}.tar.xz"  )
	monoid?                 ( "${MY_URI}/Monoid.tar.xz" -> "Monoid-${PV}.tar.xz"  )
	mononoki?               ( "${MY_URI}/Mononoki.tar.xz" -> "Mononoki-${PV}.tar.xz"  )
	mplus?                  ( "${MY_URI}/MPlus.tar.xz" -> "MPlus-${PV}.tar.xz"  )
	nerdfontssymbolsonly?   ( "${MY_URI}/NerdFontsSymbolsOnly.tar.xz" -> "NerdFontsSymbolsOnly-${PV}.tar.xz"  "${TAG_URI}/10-nerd-font-symbols.conf" -> "10-nerd-font-symbols.conf-${PV}" )
	noto?                   ( "${MY_URI}/Noto.tar.xz" -> "Noto-${PV}.tar.xz"  )
	opendyslexic?           ( "${MY_URI}/OpenDyslexic.tar.xz" -> "OpenDyslexic-${PV}.tar.xz"  )
	overpass?               ( "${MY_URI}/Overpass.tar.xz" -> "Overpass-${PV}.tar.xz"  )
	profont?                ( "${MY_URI}/ProFont.tar.xz" -> "ProFont-${PV}.tar.xz"  )
	proggyclean?            ( "${MY_URI}/ProggyClean.tar.xz" -> "ProggyClean-${PV}.tar.xz"  )
	robotomono?             ( "${MY_URI}/RobotoMono.tar.xz" -> "RobotoMono-${PV}.tar.xz"  )
	sharetechmono?          ( "${MY_URI}/ShareTechMono.tar.xz" -> "ShareTechMono-${PV}.tar.xz"  )
	sourcecodepro?          ( "${MY_URI}/SourceCodePro.tar.xz" -> "SourceCodePro-${PV}.tar.xz"  )
	spacemono?              ( "${MY_URI}/SpaceMono.tar.xz" -> "SpaceMono-${PV}.tar.xz"  )
	terminus?               ( "${MY_URI}/Terminus.tar.xz" -> "Terminus-${PV}.tar.xz"  )
	tinos?                  ( "${MY_URI}/Tinos.tar.xz" -> "Tinos-${PV}.tar.xz"  )
	ubuntu?                 ( "${MY_URI}/Ubuntu.tar.xz" -> "Ubuntu-${PV}.tar.xz"  )
	ubuntumono?             ( "${MY_URI}/UbuntuMono.tar.xz" -> "UbuntuMono-${PV}.tar.xz"  )
	victormono?             ( "${MY_URI}/VictorMono.tar.xz" -> "VictorMono-${PV}.tar.xz"  )"

DEPEND="app-arch/xz-utils"
RDEPEND="media-libs/fontconfig"

CHECKREQS_DISK_BUILD="4G"
CHECKREQS_DISK_USR="4G"

S="${WORKDIR}"
FONT_CONF=(
	"${FILESDIR}"/10-nerd-font-symbols.conf
)
FONT_S=${S}

pkg_pretend() {
	check-reqs_pkg_setup
}
src_prepare() {
	if use nerdfontssymbolsonly; then
		install -m644 "${DISTDIR}/10-nerd-font-symbols.conf-${PV}" "${S}/10-nerd-font-symbols.conf" || die
	fi

	default
}

src_install() {
	declare -A font_filetypes
	local otf_file_number ttf_file_number

	otf_file_number=$(find ${S} -regex '.*\.otf' | wc -l)
	ttf_file_number=$(find ${S} -regex '.*\.ttf' | wc -l)

	if [[ ${otf_file_number} != 0 ]]; then
		font_filetypes[otf]=
	fi

	if [[ ${ttf_file_number} != 0 ]]; then
		font_filetypes[ttf]=
	fi

	FONT_SUFFIX="${!font_filetypes[@]}"

	font_src_install
}

pkg_postinst() {
	einfo "Installing font-patcher via an ebuild is hard, because paths are hardcoded differently"
	einfo "in .sh files. You can still get it and use it by git cloning the nerd-font project and"
	einfo "running it from the cloned directory."
	einfo "https://github.com/ryanoasis/nerd-fonts"

	elog "You might have to enable 50-user.conf and 10-nerd-font-symbols.conf by using"
	elog "eselect fontconfig"
}