Disable switch-input-source & switch-input-source-backward keybindings.
147 lines
3.7 KiB
Python
147 lines
3.7 KiB
Python
# -*- 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()
|