Skip to content

Instantly share code, notes, and snippets.

@alexs77
Created December 8, 2021 09:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexs77/b41f4140388f8a23e3013ef3226fc46a to your computer and use it in GitHub Desktop.
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
# 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"
# 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