summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--roles/fonts/defaults/main.yml2
-rw-r--r--roles/fonts/meta/argument_specs.yml7
-rw-r--r--roles/fonts/tasks/main.yml44
-rw-r--r--roles/fonts/templates/local.conf.j268
-rw-r--r--roles/fonts/vars/archlinux.yml9
-rw-r--r--roles/fonts/vars/debian.yml8
6 files changed, 124 insertions, 14 deletions
diff --git a/roles/fonts/defaults/main.yml b/roles/fonts/defaults/main.yml
deleted file mode 100644
index fe3f29fa..00000000
--- a/roles/fonts/defaults/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-fonts_extra: []
diff --git a/roles/fonts/meta/argument_specs.yml b/roles/fonts/meta/argument_specs.yml
index 81440031..d44dc8c8 100644
--- a/roles/fonts/meta/argument_specs.yml
+++ b/roles/fonts/meta/argument_specs.yml
@@ -3,9 +3,4 @@ argument_specs:
main:
short_description: "Install fonts on Linux distributions"
description: "Install fonts on Linux distributions"
- options:
- fonts_extra:
- type: "list"
- description: "Extra font packages to install in addition to default fonts"
- elements: "str"
- default: []
+ options: {}
diff --git a/roles/fonts/tasks/main.yml b/roles/fonts/tasks/main.yml
index f2f0f72c..74d3480e 100644
--- a/roles/fonts/tasks/main.yml
+++ b/roles/fonts/tasks/main.yml
@@ -2,9 +2,51 @@
- name: "Include OS-specific variables"
ansible.builtin.include_vars: "{{ ansible_os_family | lower }}.yml"
+- name: "Ensure fontconfig is installed"
+ become: true
+ ansible.builtin.package:
+ name: "fontconfig"
+ state: "present"
+
- name: "Ensure fonts are installed"
become: true
ansible.builtin.package:
name: "{{ item }}"
state: "present"
- loop: "{{ fonts_default + fonts_extra }}"
+ loop: "{{ fonts }}"
+
+- name: "Ensure fontconfig global directory exists"
+ become: true
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: "directory"
+ mode: "0755"
+ loop:
+ - "/etc/fonts"
+ - "/etc/fonts/conf.d"
+
+- name: "Add global font configurations"
+ become: true
+ ansible.builtin.template:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ mode: "0644"
+ loop:
+ - src: "local.conf.j2"
+ dest: "/etc/fonts/local.conf"
+
+- name: "Configure fonts presets"
+ become: true
+ ansible.builtin.file:
+ src: "{{ item.src }}"
+ dest: "{{ item.dest }}"
+ state: "link"
+ loop:
+ - src: "/usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf"
+ dest: "/etc/fonts/conf.d/10-sub-pixel-rgb.conf"
+ - src: "/usr/share/fontconfig/conf.avail/10-hinting-slight.conf"
+ dest: "/etc/fonts/conf.d/10-hinting-slight.conf"
+ - src: "/usr/share/fontconfig/conf.avail/11-lcdfilter-default.conf"
+ dest: "/etc/fonts/conf.d/11-lcdfilter-default.conf"
+ - src: "/usr/share/fontconfig/conf.avail/70-no-bitmaps-except-emoji.conf"
+ dest: "/etc/fonts/conf.d/70-no-bitmaps-except-emoji.conf"
diff --git a/roles/fonts/templates/local.conf.j2 b/roles/fonts/templates/local.conf.j2
new file mode 100644
index 00000000..33574afe
--- /dev/null
+++ b/roles/fonts/templates/local.conf.j2
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
+<fontconfig>
+ <!-- Apply text rasterization, hinting, and anti-aliasing -->
+ <match target="font">
+ <edit name="antialias" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="hinting" mode="assign">
+ <bool>true</bool>
+ </edit>
+ <edit name="rgba" mode="assign">
+ <const>rgb</const>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="lcdfilter" mode="assign">
+ <const>lcddefault</const>
+ </edit>
+ </match>
+ <!-- Configure default fonts & fallback fonts -->
+ <!-- Replace fonts with preferred fonts -->
+ <!-- Noto Emoji allows for emojis to render in all apps including the terminal, remove if not needed -->
+ <alias>
+ <family>serif</family>
+ <prefer>
+ <family>Noto Serif</family>
+ <family>FreeSerif</family>
+ <family>Noto Emoji</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans-serif</family>
+ <prefer>
+ <family>Noto Sans</family>
+ <family>FreeSans</family>
+ <family>Noto Emoji</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>sans</family>
+ <prefer>
+ <family>Noto Sans</family>
+ <family>FreeSans</family>
+ <family>Noto Color Emoji</family>
+ <family>Noto Emoji</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>monospace</family>
+ <prefer>
+ <family>JetBrainsMono</family>
+ <family>Noto Mono</family>
+ <family>Noto Color Emoji</family>
+ <family>Noto Emoji</family>
+ </prefer>
+ </alias>
+ <alias>
+ <family>mono</family>
+ <prefer>
+ <family>JetBrainsMono</family>
+ <family>Noto Mono</family>
+ <family>Noto Color Emoji</family>
+ <family>Noto Emoji</family>
+ </prefer>
+ </alias>
+</fontconfig>
diff --git a/roles/fonts/vars/archlinux.yml b/roles/fonts/vars/archlinux.yml
index cc9342cb..5ee5cedf 100644
--- a/roles/fonts/vars/archlinux.yml
+++ b/roles/fonts/vars/archlinux.yml
@@ -1,5 +1,8 @@
---
-fonts_default:
+fonts:
- "ttf-jetbrains-mono-nerd"
- - "ttf-meslo-nerd"
- - "ttf-dejavu-nerd"
+ - "gnu-free-fonts"
+ - "noto-fonts"
+ - "noto-fonts-cjk"
+ - "noto-fonts-emoji"
+ - "noto-fonts-extra"
diff --git a/roles/fonts/vars/debian.yml b/roles/fonts/vars/debian.yml
index 3e02137c..d0568a1e 100644
--- a/roles/fonts/vars/debian.yml
+++ b/roles/fonts/vars/debian.yml
@@ -1,4 +1,8 @@
---
-fonts_default:
+fonts:
- "fonts-jetbrains-mono"
- - "fonts-dejavu"
+ - "gnu-free-fonts"
+ - "noto-fonts"
+ - "noto-fonts-cjk"
+ - "noto-fonts-emoji"
+ - "noto-fonts-extra"