--- - name: "Include OS-specific variables" ansible.builtin.include_vars: "{{ ansible_facts['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: "{{ font_packages }}" - 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" notify: - "Update font-cache" - name: "Configure fonts presets" become: true ansible.builtin.file: src: "{{ item.src }}" dest: "{{ item.dest }}" state: "link" loop: "{{ font_presets }}" - name: "Ensure Google Fonts directory exists" become: true ansible.builtin.file: path: "/usr/share/fonts/google-fonts" state: "directory" mode: "0755" - name: "Install Google fonts" when: "font_google_font_families | length > 0" block: - name: "Fetch Google Fonts file references" ansible.builtin.uri: url: "https://fonts.google.com/download/list?family={{ item | urlencode }}" return_content: true register: font_google_fonts_metadata loop: "{{ font_google_font_families }}" - name: "Parse Google Fonts file references" vars: font_response_json: "{{ item.content | regex_replace('^[^{]+', '') | from_json }}" font_file_refs: "{{ font_response_json.manifest.fileRefs | default([]) }}" ansible.builtin.set_fact: font_google_font_files: "{{ font_google_font_files | default([]) + font_file_refs }}" loop: "{{ font_google_fonts_metadata.results }}" - name: "Install Google Fonts" become: true ansible.builtin.get_url: url: "{{ item.url }}" dest: "/usr/share/fonts/google-fonts/{{ item.filename }}" mode: "0644" loop: "{{ font_google_font_files | default([]) }}" notify: - "Update font-cache"