Created
December 8, 2021 09:28
-
-
Save alexs77/b41f4140388f8a23e3013ef3226fc46a to your computer and use it in GitHub Desktop.
Add entry to Gnome dconf array, eg. for enabling or disabling a gnome shell extension
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Usage: | |
# ansible.builtin.include_tasks: _gnome-shell_extension.yml | |
# loop: | |
# - { name: "Display Name", | |
# flag: flag_from_host_var_file, | |
# src: source url to download from, | |
# uuid: uuid to enable or disable, | |
# state: "present" to enable, "absent" to disable } | |
- name: "gnome | extension | {{ item.name }} | Enabling | create extension directory" | |
become_user: "{{ user_name }}" | |
ansible.builtin.file: | |
dest: "~/.local/share/gnome-shell/extensions/{{ item.uuid }}" | |
state: directory | |
when: | |
# should it be enabled? (ie. value = present) | |
- lookup('vars', item.flag, default="absent") == "present" | |
- name: "gnome | extension | {{ item.name }} | Enabling | unarchive package" | |
become_user: "{{ user_name }}" | |
ansible.builtin.unarchive: | |
src: "{{ item.src }}" | |
dest: "~/.local/share/gnome-shell/extensions/{{ item.uuid }}" | |
remote_src: yes | |
when: | |
# should it be enabled? (ie. value = present) | |
- lookup('vars', item.flag, default="absent") == "present" | |
- name: "gnome | extension | {{ item.name }} | Get list of enabled extensions" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/enabled-extensions | |
state: read | |
register: enabled_extensions | |
changed_when: no | |
- name: "gnome | extension | {{ item.name }} | Get list of disabled extensions" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/disabled-extensions | |
state: read | |
register: disabled_extensions | |
changed_when: no | |
- name: "gnome | extension | {{ item.name }} | Enabling | Remove from list of disabled extensions" | |
tags: "gnome,extension,{{ item.flag }}" | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/disabled-extensions | |
# var.value may contain: | |
# - @as [] | |
# or: | |
# - ['abc', 'def'] | |
# Identical to "add to ...". Difference: use "difference()" filter to remove element | |
value: "{{ ('[' + ((disabled_extensions.value | regex_replace('(?:]|(?:@as )?[,[])', '') | split(' ') | difference([item.uuid])) | sort | unique | join(',')) + ']') | replace('[,', '[') | replace('[]', '@as []') | string }}" | |
state: present | |
when: | |
# should it be enabled? (ie. value = present) | |
- lookup('vars', item.flag, default="absent") == "present" | |
# only try to remove from disabled extensions, if uuid is in the list | |
# -> don't do anything, if there's nothing to be done. | |
- item.uuid in disabled_extensions.value | |
- name: "gnome | extension | {{ item.name }} | Enabling | Add to list of enabled extensions" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/enabled-extensions | |
# var.value may contain: | |
# - @as [] | |
# or: | |
# - ['abc', 'def'] | |
# Add "'foobar'" as element to this list. | |
# - First remove "[", "]", "," and "@as " | |
# - Then convert string to array, splitting on " " (space) | |
# - Add "'foobar'" to the list | |
# - Sort the list | |
# - Make it unique | |
# - Convert list to string, with "," as seperator | |
# - Add '[' and ']' as prefix/suffix | |
# - Convert result to string, so that there's no | |
# implicit conversion from list to string | |
value: "{{ ('[' + ((enabled_extensions.value | regex_replace('(?:]|(?:@as )?[,[])', '') | split(' ') + [uuid]) | sort | unique | join(',')) + ']') | replace('[,', '[') | string }}" | |
state: present | |
when: | |
# should it be enabled? (ie. value = present) | |
- lookup('vars', item.flag, default="absent") == "present" | |
# only try to add it to enabled extensions, if uuid is already in the list | |
# -> don't do anything, if there's nothing to be done. | |
- item.uuid in disabled_extensions.value | |
- name: "gnome | extension | {{ item.name }} | Disabling | Remove from list of enabled extensions" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/enabled-extensions | |
# Explanation: See above. | |
value: "{{ ('[' + ((enabled_extensions.value | regex_replace('(?:]|(?:@as )?[,[])', '') | split(' ') | difference([item.uuid])) | sort | unique | join(',')) + ']') | replace('[,', '[') | replace('[]', '@as []') | string }}" | |
state: present | |
when: | |
# should it be disabled? (ie. value = absent) | |
- lookup('vars', item.flag, default="absent") == "absent" | |
# only try to remove from disabled extensions, if uuid is in the list | |
# -> don't do anything, if there's nothing to be done. | |
- item.uuid in enabled_extensions.value | |
- name: "gnome | extension | {{ item.name }} | Disabling | Add to list of disabled extensions" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
community.general.dconf: | |
key: /org/gnome/shell/disabled-extensions | |
# Explanation: See above. | |
value: "{{ ('[' + ((disabled_extensions.value | regex_replace('(?:]|(?:@as )?[,[])', '') | split(' ') + [item.uuid]) | sort | unique | join(',')) + ']') | replace('[,', '[') | string }}" | |
state: present | |
when: | |
# should it be disabled? (ie. value = absent) | |
- lookup('vars', item.flag, default="absent") == "absent" | |
# only try to add it to enabled extensions, if uuid is already in the list | |
# -> don't do anything, if there's nothing to be done. | |
- item.uuid in enabled_extensions.value | |
- name: "gnome | extension | {{ item.name }} | Disabling | delete package files" | |
tags: gnome,extension,{{ item.flag }} | |
become_user: "{{ user_name }}" | |
ansible.builtin.file: | |
path: "~/.local/share/gnome-shell/extensions/{{ item.uuid }}" | |
state: absent | |
when: | |
# should it be enabled? (ie. value = present) | |
- lookup('vars', item.flag, default="absent") == "absent" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://extensions.gnome.org/extension/4167/custom-hot-corners-extended/ | |
# uuid: custom-hot-corners-extended@G-dH.github.com | |
# src: https://extensions.gnome.org/extension-data/custom-hot-corners-extendedG-dH.github.com.v11.shell-extension.zip | |
# ansible.builtin.include_tasks: _gnome-shell_extension.yml | |
# loop: | |
# - { name: "Display Name", | |
# flag: flag_from_host_var_file, | |
# src: source url to download from, | |
# uuid: uuid to enable or disable, | |
# state: "present" to enable, "absent" to disable } | |
- name: gnome | extension | custom-hot-corners-extended | |
tags: gnome,extension,custom_hot_corners_extended | |
ansible.builtin.include_tasks: _gnome-shell_extension.yml | |
loop: | |
- { name: "custom-hot-corners-extended", | |
flag: custom_hot_corners_extended, | |
src: "https://extensions.gnome.org/extension-data/custom-hot-corners-extendedG-dH.github.com.v11.shell-extension.zip", | |
uuid: "custom-hot-corners-extended@G-dH.github.com" } | |
when: custom_hot_corners_extended is defined and custom_hot_corners_extended |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment