DEV Community

Cover image for Rejected on Main, Accepted on TUR: How 8 Nerd Fonts Became My First Merge on the Termux User Repository
Gouranga Das Samrat
Gouranga Das Samrat

Posted on

Rejected on Main, Accepted on TUR: How 8 Nerd Fonts Became My First Merge on the Termux User Repository

I wrote before about the day proton-pass-cli merged into termux-packages — my first merge into the main repo, full stop. This post is about what happened right after: I tried to do it again with nine fonts, got talked out of it on the main repo, and ended up with my first merge on TUR instead — 8 packages, all in one shot.

Round one: nine fonts, one PR, the main repo

I opened termux-packages PR #31157addpkg(nerd-fonts): add 9 Nerd Fonts packages (v3.5.0). The plan: pull nine fonts from the v3.5.0 release of ryanoasis/nerd-fonts, package each as its own opt-in .deb following the same pattern as the existing ttf-jetbrains-mono, and ship only the plain Regular/Bold/Italic/BoldItalic styles to keep things lean.

@robertkirkman was first to comment, and it wasn't about the packages themselves — it was naming. Termux already had ttf-nerd-fonts-symbols, which mirrors Arch Linux's naming convention, so he asked me to rename all nine of mine to match it too. Fair catch — I'd shipped them as ttf-<font>-nerd-font, and I renamed everything to ttf-<font>-nerd the same day.

That turned out to be the easy part.

Round one, continued: the argument that actually mattered

Somewhere in review, @TomJo2000 raised a concern about repo size — enough that my next comment opened with thanking him for it directly, even though he hadn't posted publicly in the thread yet. I made the case for keeping all nine anyway: Homebrew and Arch both ship every Nerd Font as its own opt-in package, nothing else in Termux would depend on mine so there's zero cost to anyone who skips them, and ttf-jetbrains-mono already set the precedent. I even offered to trim styles further if size was the real issue.

@robertkirkman didn't disagree with the utility — he laid out why Termux draws the line differently than Homebrew or Arch in the first place. Termux sits at a little over 3,000 packages; those other ecosystems are past 10,000. The project's focus, as he put it, is packages that are otherwise inconvenient to get running on Android — not "niche, static cosmetic assets that never require patching to work directly copied and pasted into Termux, like wallpapers, fonts, themes and icon packs." He did concede the fonts had a genuinely high Repology score, and offered a condition: add them once at least one other person actually asks.

I pushed back on that condition specifically, because it's a trap by design — once a PR like mine is sitting open and visible, anyone who wants the package just watches the PR instead of filing a separate request, so the bar never gets cleared. I tried a subset compromise (trim the heaviest fonts, keep the rest), pointed to PR #29412 (OBS Studio) as a case where real demand never shows up as comments on an open PR, and floated moving everything to TUR if it stayed stuck.

@robertkirkman held the line on the condition, and also corrected my OBS comparison — that PR wasn't stalled from lack of interest, it was blocked on an unresolved Android 7 compatibility bug being discussed mostly on Discord, not GitHub. @TomJo2000 weighed in too, rejecting the "ship a subset" middle ground outright and pointing out that termux-styling has its own version of this exact problem already.

I tried one more angle — comparing font packages to -static libraries that already sit in the main repo with zero reverse dependencies — which pulled the thread into a genuinely interesting tangent about why Termux ships -static packages at all. @robertkirkman pointed to portaudio-static easing a real packaging headache for CDP8 and to PR #29787 as an example of the maintenance cost involved; @TomJo2000 admitted he wasn't even sure why they're split out in the first place, guessing it predates his time on the project. Somewhere in there I also brought up that sqlcipher itself had zero reverse dependencies in the main repo right up until I shipped proton-pass-cli #30987 — which @robertkirkman settled with a technical clarification: the no-reverse-dependency rule mainly targets packages that only drop files into lib, libexec, share, or opt. sqlcipher always shipped an executable in bin too, so it was never actually in violation.

None of that moved the font policy itself. So I closed the PR myself and did what I'd already floated: took it to TUR.

Round two: TUR PR #2743

TUR exists precisely for software that's useful and wanted but doesn't fit the main repo's policy — so I opened tur PR #2743, explicitly noting in the description that it was migrated from termux/termux-packages#31157 "to respect main repo's policies." Iosevka got dropped along the way, so this round shipped eight fonts, not nine — though the PR title, copy-pasted from the original, still says "9 Nerd Fonts packages" even with a table listing exactly eight underneath it. Nobody caught it, and honestly, neither did I until just now.

This time there was no policy fight — just infrastructure. @robertkirkman flagged that a GitHub race condition was currently blocking the creation of new package repos in TUR, so merging would have to wait. A couple hours later, @licy183 stepped in, offering to manually set up a nerd-fonts repository in tur-dists in the meantime, with a longer-term fix — retrying the upload script up to five times with a one-second sleep between attempts — planned for the following weekend.

It worked.

Proof it's real

~ $ pkg search '^ttf-.*nerd'
ttf-cascadia-code-nerd/tur-packages 3.5.0 all
  Cascadia Code patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-hack-nerd/tur-packages 3.5.0 all
  Hack patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-inconsolata-nerd/tur-packages 3.5.0 all
  Inconsolata patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-jetbrains-mono-nerd/tur-packages 3.5.0 all
  JetBrains Mono patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-meslo-nerd/tur-packages 3.5.0 all
  Meslo (MesloLGS) patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc), commonly used with Powerlevel10k

ttf-roboto-mono-nerd/tur-packages 3.5.0 all
  Roboto Mono patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-sourcecodepro-nerd/tur-packages 3.5.0 all
  Source Code Pro patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)

ttf-victor-mono-nerd/tur-packages 3.5.0 all
  Victor Mono patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)
Enter fullscreen mode Exit fullscreen mode

Eight of those nine lines are mine — every one tagged tur-packages with my name on Maintainer:. The odd one out is ttf-nerd-fonts-symbols/stable, which just happens to match the same search pattern: it's the pre-existing package from the main repo, maintained by @termux, not by me. Easy to mix up in a grep, so worth saying plainly here.

~ $ pkg show ttf-cascadia-code-nerd
Package: ttf-cascadia-code-nerd
Version: 3.5.0
Maintainer: Gouranga Das Samrat <gouranga.das.khulna@gmail.com>
Installed-Size: 11.4 MB
Homepage: https://www.nerdfonts.com/
Download-Size: 1550 kB
APT-Sources: https://tur.kcubeterm.com tur-packages/tur aarch64 Packages
Description: Cascadia Code patched with Nerd Fonts icons/glyphs (Font Awesome, Devicons, Octicons, Powerline, etc)
Enter fullscreen mode Exit fullscreen mode

Same story across all eight — ttf-hack-nerd, ttf-inconsolata-nerd, ttf-jetbrains-mono-nerd, ttf-meslo-nerd, ttf-roboto-mono-nerd, ttf-sourcecodepro-nerd, and ttf-victor-mono-nerd all show up with my Maintainer: line and tur.kcubeterm.com as the source. One PR, one merge, eight packages live at once — the biggest single contribution I've shipped to Termux so far, and my first time landing anything on TUR specifically.

What actually stuck with me

Getting held to a stricter bar on the main repo didn't feel great mid-thread — three-thousand-package discipline running headfirst into nine fonts I was sure people wanted. But @robertkirkman and @TomJo2000 weren't wrong to hold it, and the rejection wasn't a dead end so much as a redirect to the tool built for exactly this situation. proton-pass-cli taught me how to get something into termux-packages. This one taught me that knowing where a package doesn't belong — and having TUR as somewhere to actually put it — is just as much a part of contributing as the packaging itself.

If you're on Termux and tired of manually curling .ttf files into ~/.termux/font.ttf:

pkg install tur-repo
pkg update
pkg install ttf-jetbrains-mono-nerd
Enter fullscreen mode Exit fullscreen mode

(swap in hack, cascadia-code, meslo, sourcecodepro, inconsolata, roboto-mono, or victor-mono for whichever prompt you're patching.)

The full trail:

Top comments (0)