From f521ee12f6181850c25e4e439fbe784dc45982e3 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 24 Mar 2026 23:16:47 +0100 Subject: [PATCH] Manage GNOME extensions via gsettings --- .../profile_workstation_gnome/tasks/main.yml | 63 +++++++++++++++---- 1 file changed, 50 insertions(+), 13 deletions(-) diff --git a/ansible/roles/profile_workstation_gnome/tasks/main.yml b/ansible/roles/profile_workstation_gnome/tasks/main.yml index 651c8ff..8e5c6e4 100644 --- a/ansible/roles/profile_workstation_gnome/tasks/main.yml +++ b/ansible/roles/profile_workstation_gnome/tasks/main.yml @@ -163,26 +163,63 @@ loop_control: label: "{{ item.uuid }}" -- name: Disable workstation GNOME extensions +- name: Read current workstation GNOME enabled extensions tags: [gnome] ansible.builtin.command: - cmd: "gnome-extensions disable {{ item }}" + cmd: gsettings get org.gnome.shell enabled-extensions become_user: "{{ username }}" environment: "{{ workstation_gnome_environment }}" - loop: "{{ workstation_disabled_gnome_extensions | default([]) }}" - loop_control: - label: "{{ item }}" + register: workstation_enabled_gnome_extensions_current changed_when: false - when: (workstation_disabled_gnome_extensions | default([])) | length > 0 -- name: Enable workstation GNOME extensions +- name: Compute desired workstation GNOME enabled extensions + tags: [gnome] + ansible.builtin.set_fact: + workstation_enabled_gnome_extensions_desired: >- + {{ + ( + ( + workstation_enabled_gnome_extensions_current.stdout + | regex_replace('^@as\\s+', '') + | from_yaml + ) + + ( + workstation_gnome_extensions + | default([]) + | selectattr('enabled', 'defined') + | selectattr('enabled') + | map(attribute='uuid') + | list + ) + ) + | difference(workstation_disabled_gnome_extensions | default([])) + | unique + | sort + }} + workstation_enabled_gnome_extensions_desired_gsettings: >- + [{{ + workstation_enabled_gnome_extensions_desired + | map('regex_replace', '^(.*)$', "'\\1'") + | join(', ') + }}] + +- name: Apply workstation GNOME enabled extensions list tags: [gnome] ansible.builtin.command: - cmd: "gnome-extensions enable {{ item.uuid }}" + argv: + - gsettings + - set + - org.gnome.shell + - enabled-extensions + - "{{ workstation_enabled_gnome_extensions_desired_gsettings }}" become_user: "{{ username }}" environment: "{{ workstation_gnome_environment }}" - loop: "{{ workstation_gnome_extensions | default([]) }}" - loop_control: - label: "{{ item.uuid }}" - changed_when: false - when: item.enabled | default(false) + changed_when: >- + {{ + ( + workstation_enabled_gnome_extensions_current.stdout + | regex_replace('^@as\\s+', '') + | from_yaml + | sort + ) != workstation_enabled_gnome_extensions_desired + }}