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()
 |