Add gsettings module & use it
Disable switch-input-source & switch-input-source-backward keybindings.
This commit is contained in:
parent
cbe9b40023
commit
8e0743cbba
146
library/gsettings.py
Normal file
146
library/gsettings.py
Normal 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()
|
@ -2,7 +2,7 @@
|
||||
- assert:
|
||||
that: "'GNOME' in ansible_env.XDG_CURRENT_DESKTOP"
|
||||
|
||||
- name: install gnome extra packages
|
||||
- name: install packages
|
||||
become: true
|
||||
package:
|
||||
name:
|
||||
@ -10,6 +10,23 @@
|
||||
- gnome-themes-extra
|
||||
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
|
||||
# gsettings list-recursively | grep -i -E 'media-keys|keybindings'
|
||||
# NOTE: Use this command to inspect the current state of the custom keybindings
|
||||
|
Loading…
x
Reference in New Issue
Block a user