mirror of
https://github.com/Xevion/dotfiles.git
synced 2026-01-31 10:24:12 -06:00
feat: add automated font installation system with fontconfig management
- Install fonts from Google Fonts via TOML config - Generate fontconfig XML with optimized rendering settings - Auto-run on config changes via chezmoi hook - Support GitHub-sourced fonts (Iosevka) alongside Google Fonts
This commit is contained in:
@@ -0,0 +1,237 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
|
||||
<!--
|
||||
Fontconfig Configuration
|
||||
Managed by Chezmoi - edit fonts.toml for font selection
|
||||
|
||||
Optimized for:
|
||||
- LCD displays (1080p)
|
||||
- Both light and dark modes
|
||||
- General readability and crisp text
|
||||
-->
|
||||
<fontconfig>
|
||||
|
||||
<!-- ============================================================
|
||||
Global Rendering Settings
|
||||
============================================================ -->
|
||||
|
||||
<!-- Enable antialiasing for smooth edges -->
|
||||
<match target="font">
|
||||
<edit name="antialias" mode="assign">
|
||||
<bool>true</bool>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- Enable hinting for sharper text -->
|
||||
<match target="font">
|
||||
<edit name="hinting" mode="assign">
|
||||
<bool>true</bool>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!--
|
||||
Hintstyle: slight
|
||||
- Best balance between shape preservation and sharpness
|
||||
- Works well for both light and dark modes
|
||||
- Recommended for modern LCDs
|
||||
-->
|
||||
<match target="font">
|
||||
<edit name="hintstyle" mode="assign">
|
||||
<const>hintslight</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!--
|
||||
Subpixel rendering: RGB
|
||||
- Standard for most LCD monitors (horizontal RGB stripe)
|
||||
- Effectively triples horizontal resolution
|
||||
-->
|
||||
<match target="font">
|
||||
<edit name="rgba" mode="assign">
|
||||
<const>rgb</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!--
|
||||
LCD filter: default
|
||||
- Reduces color fringing from subpixel rendering
|
||||
- Good balance for most displays
|
||||
-->
|
||||
<match target="font">
|
||||
<edit name="lcdfilter" mode="assign">
|
||||
<const>lcddefault</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- Disable autohinting (use font's built-in hints) -->
|
||||
<match target="font">
|
||||
<edit name="autohint" mode="assign">
|
||||
<bool>false</bool>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- Disable embedded bitmap fonts (use vector glyphs) -->
|
||||
<match target="font">
|
||||
<edit name="embeddedbitmap" mode="assign">
|
||||
<bool>false</bool>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- Re-enable embedded bitmaps for emoji fonts -->
|
||||
<match target="font">
|
||||
<test name="family" qual="any">
|
||||
<string>Noto Color Emoji</string>
|
||||
</test>
|
||||
<edit name="embeddedbitmap" mode="assign">
|
||||
<bool>true</bool>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- ============================================================
|
||||
Default Font Aliases
|
||||
============================================================ -->
|
||||
|
||||
<!-- Sans-serif: Inter with Noto Sans fallback -->
|
||||
<alias>
|
||||
<family>sans-serif</family>
|
||||
<prefer>
|
||||
<family>Inter</family>
|
||||
<family>Noto Sans</family>
|
||||
<family>DejaVu Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>system-ui</family>
|
||||
<prefer>
|
||||
<family>Inter</family>
|
||||
<family>Noto Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- Serif: Source Serif 4 with Noto Serif fallback -->
|
||||
<alias>
|
||||
<family>serif</family>
|
||||
<prefer>
|
||||
<family>Source Serif 4</family>
|
||||
<family>Noto Serif</family>
|
||||
<family>DejaVu Serif</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- Monospace: Iosevka with JetBrains Mono fallback -->
|
||||
<alias>
|
||||
<family>monospace</family>
|
||||
<prefer>
|
||||
<family>Iosevka</family>
|
||||
<family>JetBrains Mono</family>
|
||||
<family>DejaVu Sans Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>ui-monospace</family>
|
||||
<prefer>
|
||||
<family>Iosevka</family>
|
||||
<family>JetBrains Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- Common font substitutions -->
|
||||
<alias>
|
||||
<family>Arial</family>
|
||||
<prefer>
|
||||
<family>Inter</family>
|
||||
<family>Noto Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Helvetica</family>
|
||||
<prefer>
|
||||
<family>Inter</family>
|
||||
<family>Noto Sans</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Times New Roman</family>
|
||||
<prefer>
|
||||
<family>Source Serif 4</family>
|
||||
<family>Noto Serif</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Times</family>
|
||||
<prefer>
|
||||
<family>Source Serif 4</family>
|
||||
<family>Noto Serif</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Courier New</family>
|
||||
<prefer>
|
||||
<family>Iosevka</family>
|
||||
<family>JetBrains Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<alias>
|
||||
<family>Courier</family>
|
||||
<prefer>
|
||||
<family>Iosevka</family>
|
||||
<family>JetBrains Mono</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- Emoji support -->
|
||||
<alias>
|
||||
<family>emoji</family>
|
||||
<prefer>
|
||||
<family>Noto Color Emoji</family>
|
||||
</prefer>
|
||||
</alias>
|
||||
|
||||
<!-- ============================================================
|
||||
Font-Specific Tweaks
|
||||
============================================================ -->
|
||||
|
||||
<!--
|
||||
Iosevka: Use medium hinting for better terminal rendering
|
||||
Iosevka is quite thin, so medium hinting helps legibility
|
||||
-->
|
||||
<match target="font">
|
||||
<test name="family" qual="any">
|
||||
<string>Iosevka</string>
|
||||
</test>
|
||||
<edit name="hintstyle" mode="assign">
|
||||
<const>hintmedium</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!-- Same for Iosevka variants -->
|
||||
<match target="font">
|
||||
<test name="family" qual="any" compare="contains">
|
||||
<string>Iosevka</string>
|
||||
</test>
|
||||
<edit name="hintstyle" mode="assign">
|
||||
<const>hintmedium</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<!--
|
||||
Inter: Slight hinting works great for this font
|
||||
Already using global defaults, but explicit for clarity
|
||||
-->
|
||||
<match target="font">
|
||||
<test name="family" qual="any">
|
||||
<string>Inter</string>
|
||||
</test>
|
||||
<edit name="hintstyle" mode="assign">
|
||||
<const>hintslight</const>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
</fontconfig>
|
||||
@@ -0,0 +1,31 @@
|
||||
# Font Configuration for Chezmoi
|
||||
# This file defines which fonts to install and configure.
|
||||
# Fonts are sourced from Google Fonts automatically.
|
||||
#
|
||||
# To add a font: Just type its name - fuzzy matching will help if you misspell.
|
||||
# To swap fonts: Change the primary, run `chezmoi apply`, done!
|
||||
#
|
||||
# Run `install-fonts.ts` manually to see available fonts or troubleshoot.
|
||||
|
||||
[ui]
|
||||
# Sans-serif fonts for user interface elements
|
||||
primary = "Inter"
|
||||
fallback = "Noto Sans"
|
||||
|
||||
[serif]
|
||||
# Serif fonts for documents and reading
|
||||
primary = "Source Serif 4"
|
||||
fallback = "Noto Serif"
|
||||
|
||||
[mono]
|
||||
# Monospace fonts for code and terminals
|
||||
primary = "Iosevka"
|
||||
fallback = "JetBrains Mono"
|
||||
|
||||
[emoji]
|
||||
# Emoji font for unicode emoji support
|
||||
primary = "Noto Color Emoji"
|
||||
|
||||
# Optional: Uncomment to install accessibility-focused fonts
|
||||
# [accessibility]
|
||||
# primary = "Atkinson Hyperlegible"
|
||||
Reference in New Issue
Block a user