pragma Singleton pragma ComponentBehavior: Bound import "root:/modules/common" import "root:/modules/common/functions/file_utils.js" as FileUtils import QtQuick import Quickshell import Quickshell.Io import Quickshell.Wayland import Quickshell.Hyprland /** * A service that provides access to Hyprland keybinds. * Uses the `get_keybinds.py` script to parse comments in config files in a certain format and convert to JSON. */ Singleton { id: root property string keybindParserPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/hyprland/get_keybinds.py`) property string defaultKeybindConfigPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/hyprland/keybinds.conf`) property string userKeybindConfigPath: FileUtils.trimFileProtocol(`${Directories.config}/hypr/custom/keybinds.conf`) property var defaultKeybinds: {"children": []} property var userKeybinds: {"children": []} property var keybinds: ({ children: [ ...(defaultKeybinds.children ?? []), ...(userKeybinds.children ?? []), ] }) Connections { target: Hyprland function onRawEvent(event) { if (event.name == "configreloaded") { getDefaultKeybinds.running = true getUserKeybinds.running = true } } } Process { id: getDefaultKeybinds running: true command: [root.keybindParserPath, "--path", root.defaultKeybindConfigPath,] stdout: SplitParser { onRead: data => { try { root.defaultKeybinds = JSON.parse(data) } catch (e) { console.error("[CheatsheetKeybinds] Error parsing keybinds:", e) } } } } Process { id: getUserKeybinds running: true command: [root.keybindParserPath, "--path", root.userKeybindConfigPath] stdout: SplitParser { onRead: data => { try { root.userKeybinds = JSON.parse(data) } catch (e) { console.error("[CheatsheetKeybinds] Error parsing keybinds:", e) } } } } }