1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-06-13 16:14:05 +02:00

gnu: Add font-nerd-jetbrains-mono.

* gnu/packages/fonts.scm (font-nerd-jetbrains-mono): New variable.

Change-Id: Ie0318334c70afa55da95b4cc9d39315f305aab4c
This commit is contained in:
Sughosha
2026-03-09 23:35:27 +05:30
parent 4208601bb5
commit f9e1e6bac6
+251
View File
@@ -1769,6 +1769,257 @@ These fonts include glyphs from multiple icon sets:
@item Codeicons
@end itemize
The monospaced variant ensures all glyphs have uniform width, which is essential
for terminal emulators that require consistent character spacing.")
;; https://github.com/ryanoasis/nerd-fonts/blob/master/license-audit.md
(license (list license:expat license:cc-by4.0 license:unlicense
license:asl2.0 license:silofl1.1))))
(define-public font-nerd-jetbrains-mono
(package
(name "font-nerd-jetbrains-mono")
(version "3.4.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ryanoasis/nerd-fonts")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0adash47a0pmvhhbqr9wzp3r287hzj50f28pswdxm30l0br6zgfa"))
(modules '((srfi srfi-26)
(ice-9 ftw)
(guix build utils)))
(snippet
;; Remove fonts we don't use to save space and build time.
#~(begin
(delete-file-recursively "patched-fonts")
(with-directory-excursion "src/unpatched-fonts"
(let ((keep? (cut member <>
'("." ".." "JetBrainsMono"))))
(for-each delete-file-recursively
(scandir "."
(negate keep?)))))))))
(build-system font-build-system)
(arguments
(list
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'change-directory
(lambda _
(chdir "src/unpatched-fonts/JetBrainsMono")))
(add-before 'install 'build
(lambda _
(for-each (lambda (font)
;; Patch every font variant with normal, mono and
;; proportional modes.
;; --complete: Include all icon sets.
;; --mono will generate the Mono variants.
;; --variable-width-glyphs will generate the
;; Proportional variants (used for graphical
;; environments).
;; If no flag is specified, the no-mono no-proportional
;; font will be built.
;; --ext ttf: Generate TrueType font.
;; --no-progressbars: Disable progress bars for clean build
;; output.
(for-each (lambda (mode)
(apply invoke "fontforge" "-script"
"../../../font-patcher"
`("--complete" ,@(if mode
(list mode)
'())
"--ext"
"ttf"
"--no-progressbars"
"--outputdir"
"."
,font)))
'(#nil "--mono" "--variable-width-glyphs")))
`("Ligatures/Bold/JetBrainsMono-Bold.ttf"
"Ligatures/BoldItalic/JetBrainsMono-BoldItalic.ttf"
"Ligatures/ExtraBold/JetBrainsMono-ExtraBold.ttf"
,(string-append "Ligatures/ExtraBoldItalic/"
"JetBrainsMono-ExtraBoldItalic.ttf")
"Ligatures/ExtraLight/JetBrainsMono-ExtraLight.ttf"
,(string-append "Ligatures/ExtraLightItalic/"
"JetBrainsMono-ExtraLightItalic.ttf")
"Ligatures/Italic/JetBrainsMono-Italic.ttf"
"Ligatures/Light/JetBrainsMono-Light.ttf"
"Ligatures/LightItalic/JetBrainsMono-LightItalic.ttf"
"Ligatures/Medium/JetBrainsMono-Medium.ttf"
,(string-append "Ligatures/MediumItalic/"
"JetBrainsMono-MediumItalic.ttf")
"Ligatures/Regular/JetBrainsMono-Regular.ttf"
"Ligatures/SemiBold/JetBrainsMono-SemiBold.ttf"
,(string-append "Ligatures/SemiBoldItalic/"
"JetBrainsMono-SemiBoldItalic.ttf")
"Ligatures/Thin/JetBrainsMono-Thin.ttf"
"Ligatures/ThinItalic/JetBrainsMono-ThinItalic.ttf"
"NoLigatures/Bold/JetBrainsMonoNL-Bold.ttf"
,(string-append "NoLigatures/BoldItalic/"
"JetBrainsMonoNL-BoldItalic.ttf")
"NoLigatures/ExtraBold/JetBrainsMonoNL-ExtraBold.ttf"
,(string-append "NoLigatures/ExtraBoldItalic/"
"JetBrainsMonoNL-ExtraBoldItalic.ttf")
,(string-append "NoLigatures/ExtraLight/"
"JetBrainsMonoNL-ExtraLight.ttf")
,(string-append "NoLigatures/ExtraLightItalic/"
"JetBrainsMonoNL-ExtraLightItalic.ttf")
"NoLigatures/Italic/JetBrainsMonoNL-Italic.ttf"
"NoLigatures/Light/JetBrainsMonoNL-Light.ttf"
,(string-append "NoLigatures/LightItalic/"
"JetBrainsMonoNL-LightItalic.ttf")
"NoLigatures/Medium/JetBrainsMonoNL-Medium.ttf"
,(string-append "NoLigatures/MediumItalic/"
"JetBrainsMonoNL-MediumItalic.ttf")
"NoLigatures/Regular/JetBrainsMonoNL-Regular.ttf"
"NoLigatures/SemiBold/JetBrainsMonoNL-SemiBold.ttf"
,(string-append "NoLigatures/SemiBoldItalic/"
"JetBrainsMonoNL-SemiBoldItalic.ttf")
"NoLigatures/Thin/JetBrainsMonoNL-Thin.ttf"
,(string-append "NoLigatures/ThinItalic/"
"JetBrainsMonoNL-ThinItalic.ttf")))))
(add-after 'build 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
(for-each (lambda (font)
;; Use Python script with fontforge to validate the font.
(invoke "python3" "-c"
(format #f
"import fontforge
name = ~s
font = fontforge.open(name)
glyph_count = len([g for g in font.glyphs() if g.unicode > 0])
print(f'Font has {glyph_count} glyphs with Unicode mapping')
if glyph_count < 8000:
raise ValueError(f'Font has too few glyphs: {glyph_count}')
print(f' Font validation passed for {name}')
font.close()~%"
font)))
'("JetBrainsMonoNerdFont-Bold.ttf"
"JetBrainsMonoNerdFont-Bold.ttf"
"JetBrainsMonoNerdFontMono-Bold.ttf"
"JetBrainsMonoNerdFontMono-Bold.ttf"
"JetBrainsMonoNerdFontPropo-Bold.ttf"
"JetBrainsMonoNerdFontPropo-Bold.ttf"
"JetBrainsMonoNerdFont-BoldItalic.ttf"
"JetBrainsMonoNerdFont-BoldItalic.ttf"
"JetBrainsMonoNerdFontMono-BoldItalic.ttf"
"JetBrainsMonoNerdFontMono-BoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-BoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-BoldItalic.ttf"
"JetBrainsMonoNerdFont-ExtraBold.ttf"
"JetBrainsMonoNerdFont-ExtraBold.ttf"
"JetBrainsMonoNerdFontMono-ExtraBold.ttf"
"JetBrainsMonoNerdFontMono-ExtraBold.ttf"
"JetBrainsMonoNerdFontPropo-ExtraBold.ttf"
"JetBrainsMonoNerdFontPropo-ExtraBold.ttf"
"JetBrainsMonoNerdFont-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFont-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-ExtraBoldItalic.ttf"
"JetBrainsMonoNerdFont-ExtraLight.ttf"
"JetBrainsMonoNerdFont-ExtraLight.ttf"
"JetBrainsMonoNerdFontMono-ExtraLight.ttf"
"JetBrainsMonoNerdFontMono-ExtraLight.ttf"
"JetBrainsMonoNerdFontPropo-ExtraLight.ttf"
"JetBrainsMonoNerdFontPropo-ExtraLight.ttf"
"JetBrainsMonoNerdFont-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFont-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFontPropo-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFontPropo-ExtraLightItalic.ttf"
"JetBrainsMonoNerdFont-Italic.ttf"
"JetBrainsMonoNerdFont-Italic.ttf"
"JetBrainsMonoNerdFontMono-Italic.ttf"
"JetBrainsMonoNerdFontMono-Italic.ttf"
"JetBrainsMonoNerdFontPropo-Italic.ttf"
"JetBrainsMonoNerdFontPropo-Italic.ttf"
"JetBrainsMonoNerdFont-Light.ttf"
"JetBrainsMonoNerdFont-Light.ttf"
"JetBrainsMonoNerdFontMono-Light.ttf"
"JetBrainsMonoNerdFontMono-Light.ttf"
"JetBrainsMonoNerdFontPropo-Light.ttf"
"JetBrainsMonoNerdFontPropo-Light.ttf"
"JetBrainsMonoNerdFont-LightItalic.ttf"
"JetBrainsMonoNerdFont-LightItalic.ttf"
"JetBrainsMonoNerdFontMono-LightItalic.ttf"
"JetBrainsMonoNerdFontMono-LightItalic.ttf"
"JetBrainsMonoNerdFontPropo-LightItalic.ttf"
"JetBrainsMonoNerdFontPropo-LightItalic.ttf"
"JetBrainsMonoNerdFont-Medium.ttf"
"JetBrainsMonoNerdFont-Medium.ttf"
"JetBrainsMonoNerdFontMono-Medium.ttf"
"JetBrainsMonoNerdFontMono-Medium.ttf"
"JetBrainsMonoNerdFontPropo-Medium.ttf"
"JetBrainsMonoNerdFontPropo-Medium.ttf"
"JetBrainsMonoNerdFont-MediumItalic.ttf"
"JetBrainsMonoNerdFont-MediumItalic.ttf"
"JetBrainsMonoNerdFontMono-MediumItalic.ttf"
"JetBrainsMonoNerdFontMono-MediumItalic.ttf"
"JetBrainsMonoNerdFontPropo-MediumItalic.ttf"
"JetBrainsMonoNerdFontPropo-MediumItalic.ttf"
"JetBrainsMonoNerdFont-Regular.ttf"
"JetBrainsMonoNerdFont-Regular.ttf"
"JetBrainsMonoNerdFontMono-Regular.ttf"
"JetBrainsMonoNerdFontMono-Regular.ttf"
"JetBrainsMonoNerdFontPropo-Regular.ttf"
"JetBrainsMonoNerdFontPropo-Regular.ttf"
"JetBrainsMonoNerdFont-SemiBold.ttf"
"JetBrainsMonoNerdFont-SemiBold.ttf"
"JetBrainsMonoNerdFontMono-SemiBold.ttf"
"JetBrainsMonoNerdFontMono-SemiBold.ttf"
"JetBrainsMonoNerdFontPropo-SemiBold.ttf"
"JetBrainsMonoNerdFontPropo-SemiBold.ttf"
"JetBrainsMonoNerdFont-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFont-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFontPropo-SemiBoldItalic.ttf"
"JetBrainsMonoNerdFont-Thin.ttf"
"JetBrainsMonoNerdFont-Thin.ttf"
"JetBrainsMonoNerdFontMono-Thin.ttf"
"JetBrainsMonoNerdFontMono-Thin.ttf"
"JetBrainsMonoNerdFontPropo-Thin.ttf"
"JetBrainsMonoNerdFontPropo-Thin.ttf"
"JetBrainsMonoNerdFont-ThinItalic.ttf"
"JetBrainsMonoNerdFont-ThinItalic.ttf"
"JetBrainsMonoNerdFontMono-ThinItalic.ttf"
"JetBrainsMonoNerdFontMono-ThinItalic.ttf"
"JetBrainsMonoNerdFontPropo-ThinItalic.ttf"
"JetBrainsMonoNerdFontPropo-ThinItalic.ttf"))))))))
(native-inputs (list fontforge python-minimal))
(home-page "https://www.nerdfonts.com/")
(synopsis "JetBrains Mono with an iconic font collection")
(description
"This package provides the JetBrains Mono font with the extra
glyphs from Nerd Fonts.
@itemize
@item JetBrains
@item JetBrains Mono
@end itemize
These fonts include glyphs from multiple icon sets:
@itemize
@item Powerline with Extra Symbols
@item Font Awesome and Font Awesome Extension
@item Material Design Icons
@item Weather Icons
@item Devicons
@item Octicons
@item Font Logos (formerly Font Linux)
@item Pomicons
@item Codeicons
@end itemize
The monospaced variant ensures all glyphs have uniform width, which is essential
for terminal emulators that require consistent character spacing.")
;; https://github.com/ryanoasis/nerd-fonts/blob/master/license-audit.md