From 1749c783648e425779a35a932889187ca2f9f63f Mon Sep 17 00:00:00 2001
From: "Kenneth Benzie (Benie)" <benie@infektor.net>
Date: Thu, 1 Jun 2023 23:00:07 +0100
Subject: [PATCH] Add Linux support to fonts role

---
 roles/fonts/handlers/main.yaml |  3 ++
 roles/fonts/tasks/Linux.yaml   | 56 ++++++++++++++++++++++++++++++++++
 roles/fonts/tasks/main.yaml    |  5 ++-
 3 files changed, 63 insertions(+), 1 deletion(-)
 create mode 100644 roles/fonts/handlers/main.yaml
 create mode 100644 roles/fonts/tasks/Linux.yaml

diff --git a/roles/fonts/handlers/main.yaml b/roles/fonts/handlers/main.yaml
new file mode 100644
index 0000000..5d8ca6c
--- /dev/null
+++ b/roles/fonts/handlers/main.yaml
@@ -0,0 +1,3 @@
+---
+- name: refresh font cache
+  command: fc-cache
diff --git a/roles/fonts/tasks/Linux.yaml b/roles/fonts/tasks/Linux.yaml
new file mode 100644
index 0000000..721847f
--- /dev/null
+++ b/roles/fonts/tasks/Linux.yaml
@@ -0,0 +1,56 @@
+---
+- name: stat version file
+  stat:
+    path: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
+  register: version_file
+
+- name: slurp version
+  when: version_file.stat.exists
+  slurp:
+    path: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
+  register: version_slurp
+
+- when: version_file.stat.exists
+  set_fact:
+    version: '{{version_slurp.content | b64decode}}'
+
+- name: get latest release
+  uri:
+    url: https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest
+  register: latest
+
+- set_fact:
+    needs_installed:
+      '{{ not version_file.stat.exists or version.strip() != latest.json.tag_name }}'
+    asset: '{{ latest.json.assets | to_json | from_json |
+      json_query("[?contains(name, `CascadiaCode.zip`)] | [0]") }}'
+
+- name: create user fonts directory
+  when: needs_installed
+  file:
+    path: '{{ansible_env.HOME}}/.local/share/fonts'
+    state: directory
+
+- name: download Caskaydia Cove Nerd Font archive
+  when: needs_installed
+  get_url:
+    url: '{{asset.browser_download_url}}'
+    dest: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
+
+- name: install Caskaydia Cove Nerd Font
+  when: needs_installed
+  unarchive:
+    src: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
+    dest: '{{ansible_env.HOME}}/.local/share/fonts'
+  notify: refresh font cache
+
+- name: write version file
+  copy:
+    content: '{{latest.json.tag_name}}'
+    dest: '{{ansible_env.HOME}}/.local/share/fonts/CaskaydiaCove.version'
+
+- name: remove Caskaydia Cove Nerd Font archive
+  when: needs_installed
+  file:
+    path: '{{ansible_env.HOME}}/.local/share/fonts/tmp.zip'
+    state: absent
diff --git a/roles/fonts/tasks/main.yaml b/roles/fonts/tasks/main.yaml
index 6853678..6caf1cc 100644
--- a/roles/fonts/tasks/main.yaml
+++ b/roles/fonts/tasks/main.yaml
@@ -1,2 +1,5 @@
 ---
-- include_tasks: '{{ansible_os_family}}.yaml'
+- when: ansible_os_family == 'Darwin'
+  include_tasks: 'Darwin.yaml'
+- when: ansible_os_family != 'Darwin' and ansible_os_family != 'Windows'
+  include_tasks: 'Linux.yaml'