Add gsettings module & use it

Disable switch-input-source & switch-input-source-backward keybindings.
This commit is contained in:
Kenneth Benzie 2024-07-06 21:02:42 +01:00
parent cbe9b40023
commit 8e0743cbba
2 changed files with 164 additions and 1 deletions

146
library/gsettings.py Normal file
View File

@ -0,0 +1,146 @@
# -*- coding: utf-8 -*-
from typing import Tuple
from ansible.module_utils.basic import AnsibleModule
DOCUMENTATION = """
module: gsettings
author:
- Kenneth Benzie (Benie)
short_description: Ansible module for the gsettings configuration tool
options:
schema:
description:
- Schema ID of the settings to configure.
type: str
key:
description:
- Key of an individaul setting to configure.
type: str
value:
description:
- Value to configure the setting with.
- Mutually exclusive with reset.
type: str
reset:
description:
- Flag to reset the setting to the default value.
- Mutually exclusive with value.
type:
default: false
"""
EXAMPLES = """
- name: get gnome color-scheme current value
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
register: color_scheme
- debug: msg={{color_scheme.value}}
- name: set gnome color-scheme to 'prefer-dark'
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
value: "'prefer-dark'"
- name: reset gnome color-scheme to default value
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
reset: true
"""
RETURN = """
value:
description: Value of the setting.
returned: Returned when there is a value.
type: str
sample: "'default'"
stderr:
description: Error output from gsettings.
returned: Returned when there is an error.
type: str
sample: No such key doesnt-exist
"""
class GSettingsError(Exception):
def __init__(self, command, rc, stderr):
self.command = command
self.rc = (rc,)
self.stderr = stderr
def gsettings_get(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"get",
module.params["schema"],
module.params["key"],
]
rc, stdout, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
return False, stdout.rstrip()
def gsettings_set(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"set",
module.params["schema"],
module.params["key"],
module.params["value"],
]
_, before = gsettings_get(module)
rc, _, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
_, after = gsettings_get(module)
return before != after, after
def gsettings_reset(module: AnsibleModule) -> Tuple[bool, str]:
command = [
"gsettings",
"reset",
module.params["schema"],
module.params["key"],
]
_, before = gsettings_get(module)
rc, stdout, stderr = module.run_command(command)
if rc != 0:
raise GSettingsError(command, rc, stderr)
_, after = gsettings_get(module)
return before != after, after
def main() -> None:
module = AnsibleModule(
argument_spec=dict(
schema=dict(type="str"),
key=dict(type="str"),
value=dict(type="str"),
reset=dict(type="bool", default=False),
),
mutually_exclusive=[["value", "reset"]],
required_together=[["schema", "key"]],
)
try:
if module.params["value"]:
changed, value = gsettings_set(module)
elif module.params["reset"]:
changed, value = gsettings_reset(module)
else:
changed, value = gsettings_get(module)
module.exit_json(changed=changed, value=value)
except GSettingsError as error:
module.fail_json(
f"{error.command} failed ({error.rc}): {error.stderr}", stderr=error.stderr
)
if __name__ == "__main__":
main()

View File

@ -2,7 +2,7 @@
- assert: - assert:
that: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP" that: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
- name: install gnome extra packages - name: install packages
become: true become: true
package: package:
name: name:
@ -10,6 +10,23 @@
- gnome-themes-extra - gnome-themes-extra
state: latest state: latest
- name: prefer dark mode
gsettings:
schema: org.gnome.desktop.interface
key: color-scheme
value: "'prefer-dark'"
- name: disable switch-input-source keybinding
gsettings:
schema: org.gnome.desktop.wm.keybindings
key: switch-input-source
value: '@as []'
- name: disable switch-input-source-backward keybinding
gsettings:
schema: org.gnome.desktop.wm.keybindings
key: switch-input-source-backward
value: '@as []'
# NOTE: Use this command to see default keybindings # NOTE: Use this command to see default keybindings
# gsettings list-recursively | grep -i -E 'media-keys|keybindings' # gsettings list-recursively | grep -i -E 'media-keys|keybindings'
# NOTE: Use this command to inspect the current state of the custom keybindings # NOTE: Use this command to inspect the current state of the custom keybindings