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:
|
- 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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user