desktop: add right click context menu for actions on compositors where

it doesnt interfere, with a setting to turn it off

Some compositors like kwin/labwc/sway cannot have this without breaking
some built in layering they do.

niri can have this, but for focus follow mouse it may need to be disabled.

fixes #3717
This commit is contained in:
bbedward
2026-10-07 15:18:39 -04:00
parent 72c23161e7
commit 4b0dfa67a0
20 changed files with 301 additions and 68 deletions
+1
View File
@@ -1131,6 +1131,7 @@ Singleton {
property var desktopWidgetInstances: Spec.SPEC.desktopWidgetInstances.def
property var desktopWidgetGroups: Spec.SPEC.desktopWidgetGroups.def
property string desktopContextMenu: Spec.SPEC.desktopContextMenu.def
property var lockScreenWidgetInstances: Spec.SPEC.lockScreenWidgetInstances.def
property var greeterWidgetInstances: Spec.SPEC.greeterWidgetInstances.def
property bool greeterFollowLockScreen: Spec.SPEC.greeterFollowLockScreen.def
@@ -1493,6 +1493,9 @@ var LOCAL_SPEC = {
desktopWidgetGroups: {
def: []
},
desktopContextMenu: {
def: "auto"
},
builtInPluginSettings: {
def: {}
},
+4
View File
@@ -61,6 +61,10 @@ Item {
DesktopWidgetEditor {}
DesktopContextMenu {
Component.onCompleted: PopoutService.desktopContextMenu = this
}
Lock {
id: lock
}
@@ -393,7 +393,10 @@ Item {
hint: modelData.category
accent: SettingsTabs.accentFor(modelData.page || SettingsTabs.pageForTabIndex(modelData.tabIndex))
active: root.searchSelectedIndex === index
onClicked: keyboard => root.selectSearchResult(modelData, keyboard)
onClicked: keyboard => {
root.searchSelectedIndex = index;
root.selectSearchResult(modelData, keyboard);
}
}
}
@@ -152,10 +152,9 @@ DBottomSheet {
signal chosen(string widgetId)
signal toggleRequested
height: expanded ? items.y + items.implicitHeight + Theme.spacingL : collapsedHeight
height: expanded ? itemsClip.y + items.implicitHeight + Theme.spacingL : collapsedHeight
radius: Theme.cornerRadiusXL
color: CcMetrics.rowColor
clip: true
Behavior on height {
enabled: CcMetrics.animationsEnabled
@@ -237,15 +236,22 @@ DBottomSheet {
}
}
PreviewGrid {
id: items
Item {
id: itemsClip
x: Theme.spacingL
y: header.height + Theme.spacingM
width: parent.width - Theme.spacingL * 2
entries: card.entries
height: Math.max(0, card.height - y)
visible: card.height > card.collapsedHeight
enabled: card.expanded
onChosen: widgetId => card.chosen(widgetId)
clip: true
PreviewGrid {
id: items
width: parent.width
entries: card.entries
enabled: card.expanded
onChosen: widgetId => card.chosen(widgetId)
}
}
}
+48
View File
@@ -0,0 +1,48 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
DContextMenu {
id: root
layerNamespace: "dms:desktop-context-menu"
keyboardNavigable: true
menuItems: [
{
type: "item",
icon: "add",
text: I18n.tr("Add widget"),
action: () => DesktopWidgetRegistry.startEditing(root.targetScreen, true)
},
{
type: "item",
icon: "edit",
text: I18n.tr("Edit widgets"),
action: () => DesktopWidgetRegistry.startEditing(root.targetScreen, false)
},
{
type: "separator"
},
{
type: "item",
icon: "wallpaper",
text: I18n.tr("Wallpaper & colors"),
action: () => PopoutService.openSettingsWithTab("personalization")
},
{
type: "item",
icon: "widgets",
text: I18n.tr("Desktop widgets"),
action: () => PopoutService.openSettingsWithTab("desktop_widgets")
},
{
type: "item",
icon: "monitor",
text: I18n.tr("Displays"),
action: () => PopoutService.openSettingsWithTab("displays")
}
]
onBackdropRightClicked: (x, y) => open(targetScreen, x, y, false)
}
@@ -81,7 +81,10 @@ FocusScope {
}
focus: true
Component.onCompleted: forceActiveFocus()
Component.onCompleted: {
libraryOpen = DesktopWidgetRegistry.libraryScreen === editLayer.screenName;
forceActiveFocus();
}
Keys.onEscapePressed: dismiss()
MouseArea {
@@ -103,7 +103,7 @@ Column {
Item {
width: parent.width
height: root.currentMode === "custom" ? customChip.height + Theme.spacingM : 0
height: root.currentMode === "custom" ? customChip.y + customChip.height + Theme.spacingM : 0
opacity: root.currentMode === "custom" ? 1 : 0
clip: true
@@ -127,6 +127,7 @@ Column {
id: customChip
x: SettingsMetrics.rowPaddingH
y: Theme.focusRingOffset
width: parent.width - SettingsMetrics.rowPaddingH * 2
height: Theme.listItemHeight
radius: Theme.cornerRadiusM
@@ -613,6 +613,18 @@ Item {
tags: ["widget", "style", "pills", "segments", "opacity", "padding", "maximize"]
visible: bar.selectedBarConfig?.enabled ?? false
SettingsToggleRow {
settingKey: "barNoBackground"
tags: ["transparent", "background", "invisible"]
text: I18n.tr("Background")
resetStore: bar
resetKeys: ["noBackground"]
checked: !(bar.selectedBarConfig?.noBackground ?? false)
onToggled: checked => SettingsData.updateBarConfig(bar.selectedBarId, {
noBackground: !checked
})
}
SettingsRow {
settingKey: "barWidgetStyle"
tags: ["widget", "style", "segments", "pills", "flat", "connected", "group"]
@@ -689,18 +701,6 @@ Item {
})
}
SettingsToggleRow {
settingKey: "barNoBackground"
tags: ["transparent", "background", "invisible"]
text: I18n.tr("Background")
resetStore: bar
resetKeys: ["noBackground"]
checked: !(bar.selectedBarConfig?.noBackground ?? false)
onToggled: checked => SettingsData.updateBarConfig(bar.selectedBarId, {
noBackground: !checked
})
}
SettingsToggleRow {
settingKey: "barMaximizeWidgetIcons"
tags: ["maximize", "icons", "stretch"]
+2
View File
@@ -17,6 +17,7 @@ Item {
}
readonly property bool selectedIslandEnabled: bar.selectedBarIsIsland && (bar.selectedBarConfig?.enabled ?? false)
readonly property string clickThroughHint: I18n.tr("Disabled by Click through", "bar hover popouts card, Click through is the Advanced toggle name")
readonly property bool selectedIslandFree: bar.selectedBarIsIsland && SettingsData.islandFreePlacement(bar.selectedBarConfig)
readonly property bool selectedIslandDocked: bar.selectedBarIsIsland && !selectedIslandFree
readonly property int placementIndex: !bar.islandSetting("islandFloating") ? 0 : (bar.islandSetting("islandPlacement") === "free" ? 2 : 1)
@@ -405,6 +406,7 @@ Item {
tags: ["bar", "hover", "popout", "reveal", "widget", "delay"]
iconName: "touch_app"
title: I18n.tr("Hover popouts")
description: enabled ? "" : root.clickThroughHint
visible: bar.selectedBarConfig?.enabled ?? false
enabled: !(bar.selectedBarConfig?.clickThrough ?? false)
opacity: (bar.selectedBarConfig?.clickThrough ?? false) ? 0.5 : 1.0
@@ -97,6 +97,24 @@ Item {
SettingsPage {
id: mainColumn
SettingsCard {
settingKey: "desktopGeneral"
tags: ["desktop", "context", "menu", "right click", "wallpaper"]
width: parent.width
iconName: "mouse"
title: I18n.tr("General")
SettingsDropdownRow {
settingKey: "desktopContextMenu"
text: I18n.tr("Right-click menu")
description: I18n.tr("Auto turns it off on compositors that use clicks on the empty desktop themselves", "desktop context menu dropdown description")
options: [I18n.tr("Auto"), I18n.tr("On"), I18n.tr("Off")]
readonly property var values: ["auto", "on", "off"]
currentValue: options[Math.max(0, values.indexOf(SettingsData.desktopContextMenu))]
onValueChanged: value => SettingsData.set("desktopContextMenu", values[options.indexOf(value)])
}
}
SettingsCard {
settingKey: "desktopWidgetGroups"
tags: ["groups", "profiles", "layouts"]
@@ -122,13 +122,13 @@ Item {
Item {
width: parent.width
height: themeCategoryGroup.implicitHeight
height: themeCategoryGroup.implicitHeight + Theme.focusRingOffset * 2
clip: true
DButtonGroup {
id: themeCategoryGroup
arrowKeysSelect: false
anchors.horizontalCenter: parent.horizontalCenter
anchors.centerIn: parent
buttonPadding: parent.width < 420 ? Theme.spacingS : Theme.spacingL
minButtonWidth: parent.width < 420 ? 44 : 64
textSize: parent.width < 420 ? Theme.fontSizeSmall : Theme.fontSizeMedium
@@ -660,14 +660,14 @@ Item {
Item {
width: parent.width
height: flavorButtonGroup.implicitHeight
height: flavorButtonGroup.implicitHeight + Theme.focusRingOffset * 2
clip: true
visible: variantSelector.isMultiVariant && variantSelector.flavorOptions.length > 1
DButtonGroup {
id: flavorButtonGroup
arrowKeysSelect: false
anchors.horizontalCenter: parent.horizontalCenter
anchors.centerIn: parent
property int _count: variantSelector.flavorNames.length
property real _maxPerItem: _count > 1 ? (parent.width - (_count - 1) * spacing) / _count : parent.width
buttonPadding: _maxPerItem < 55 ? Theme.spacingXS : (_maxPerItem < 75 ? Theme.spacingS : Theme.spacingL)
@@ -737,14 +737,14 @@ Item {
Item {
width: parent.width
height: variantButtonGroup.implicitHeight
height: variantButtonGroup.implicitHeight + Theme.focusRingOffset * 2
clip: true
visible: !variantSelector.isMultiVariant && variantSelector.variantNames.length > 0
DButtonGroup {
id: variantButtonGroup
arrowKeysSelect: false
anchors.horizontalCenter: parent.horizontalCenter
anchors.centerIn: parent
property int _count: variantSelector.variantNames.length
property real _maxPerItem: _count > 1 ? (parent.width - (_count - 1) * spacing) / _count : parent.width
buttonPadding: _maxPerItem < 55 ? Theme.spacingXS : (_maxPerItem < 75 ? Theme.spacingS : Theme.spacingL)
@@ -85,7 +85,7 @@ Item {
Item {
width: parent.width
visible: root.checked || height > 0
height: root.checked ? control.height + SettingsMetrics.rowPaddingV : 0
height: root.checked ? control.y + control.height + SettingsMetrics.rowPaddingV : 0
clip: true
Behavior on height {
@@ -104,6 +104,7 @@ Item {
SettingsSliderControl {
id: control
x: SettingsMetrics.rowPaddingH
y: Theme.focusRingOffset
width: parent.width - SettingsMetrics.rowPaddingH * 2
enabled: root.checked
value: root.value
+22 -2
View File
@@ -13,6 +13,16 @@ Variants {
// An entry present in PanelWindow.onCompleted means we're recreating
// after a wl_output rebind, not at initial startup.
property var _seenScreens: ({})
readonly property bool desktopMenuEnabled: {
switch (SettingsData.desktopContextMenu) {
case "on":
return true;
case "off":
return false;
default:
return !CompositorService.reservesDesktopInput;
}
}
model: SettingsData.getFilteredScreens("wallpaper")
PanelWindow {
@@ -36,8 +46,18 @@ Variants {
updatesEnabled: root.renderActive || root._settleFrames > 0
mask: Region {
item: Item {}
Region {
id: emptyRegion
}
mask: variants.desktopMenuEnabled ? null : emptyRegion
MouseArea {
anchors.fill: parent
z: 1
enabled: variants.desktopMenuEnabled
acceptedButtons: Qt.RightButton
onClicked: mouse => PopoutService.desktopContextMenu?.open(wallpaperWindow.screen, mouse.x, mouse.y, false)
}
Item {
+14
View File
@@ -25,6 +25,7 @@ Singleton {
property bool isLabwc: false
property bool isAqueous: false
property bool isUmbriel: false
property bool isKwin: false
property string compositor: "unknown"
property bool compositorDetected: false
property bool outputPowerAvailable: false
@@ -145,6 +146,8 @@ Singleton {
readonly property bool supportsPersistentWorkspaces: isHyprland || isMango || isSway || isScroll || isMiracle
readonly property bool supportsWorkspaceUrgency: isKnownCompositor && !isLabwc
readonly property bool supportsWorkspaceFollowFocus: isKnownCompositor && !isLabwc
// labwc root menu and desktop scroll, sway/scroll --whole-window binds, plasmashell desktop menu
readonly property bool reservesDesktopInput: isLabwc || isSway || isScroll || isKwin
readonly property bool supportsSmartDock: isNiri || isHyprland || isMango || isAqueous
readonly property bool supportsNativeOverview: isNiri || isAqueous
readonly property bool supportsPointerConfig: isNiri || isMango
@@ -170,6 +173,8 @@ Singleton {
return "Aqueous";
case "umbriel":
return "Umbriel";
case "kwin":
return "KWin";
default:
return "";
}
@@ -1413,6 +1418,8 @@ Singleton {
return "aqueous";
case "umbriel":
return "umbriel";
case "kwin_wayland":
return "kwin";
default:
return "";
}
@@ -1428,6 +1435,7 @@ Singleton {
isLabwc = name === "labwc";
isAqueous = name === "aqueous";
isUmbriel = name === "umbriel";
isKwin = name === "kwin";
compositor = name;
compositorDetected = true;
if (isNiri)
@@ -1601,6 +1609,12 @@ Singleton {
present: !!hyprlandSignature,
test: ["test", "-S", runtimeDir + "/hypr/" + hyprlandSignature + "/.socket.sock"],
detail: "HYPRLAND_INSTANCE_SIGNATURE " + hyprlandSignature
},
{
name: "kwin",
present: !!Quickshell.env("KDE_FULL_SESSION"),
test: ["pgrep", "-x", "kwin_wayland"],
detail: "KDE_FULL_SESSION"
}
];
}
@@ -12,9 +12,20 @@ Singleton {
property var registeredWidgets: ({})
property var registeredWidgetsList: []
property bool editing: false
property string libraryScreen: ""
signal registryChanged
onEditingChanged: {
if (!editing)
libraryScreen = "";
}
function startEditing(screen, openLibrary) {
libraryScreen = openLibrary ? (screen?.name ?? "") : "";
editing = true;
}
Component.onCompleted: {
registerBuiltins();
registerLockBuiltins();
+1
View File
@@ -32,6 +32,7 @@ Singleton {
property var clipboardHistoryPopout: null
property var clipboardHistoryPopoutLoader: null
property var desktopContextMenu: null
property var settingsModal: null
property var settingsModalLoader: null
property var clipboardHistoryModal: null
@@ -79,7 +79,8 @@ Singleton {
"frameEnabled": () => SettingsData.frameEnabled,
"islandEnabled": () => SettingsData.islandBarConfigs.length > 0,
"dotEnabled": () => SettingsData.dotBarConfig?.enabled ?? false,
"cellularAvailable": () => NetworkService.cellularAvailable
"cellularAvailable": () => NetworkService.cellularAvailable,
"dockEnabled": () => (SettingsData.dockConfigs ?? []).some(dock => dock.enabled)
})
property var pluginSettingLabels: ({})
@@ -406,6 +406,8 @@ def find_settings_components(content, filename, wrappers, tab_meta, hub_meta):
if file_tab_index == -1 and not file_page:
return results
card_conditions = []
for component in SEARCHABLE_COMPONENTS + sorted(wrappers):
defaults = wrappers.get(component, {})
pattern = rf"\b{component}\s*\{{"
@@ -413,6 +415,7 @@ def find_settings_components(content, filename, wrappers, tab_meta, hub_meta):
block = parse_component_block(content, match.start(), component)
if not block:
continue
block_end = content.index(block, match.start()) + len(block)
setting_key = extract_property(block, "settingKey") or defaults.get("settingKey")
if setting_key:
@@ -502,6 +505,8 @@ def find_settings_components(content, filename, wrappers, tab_meta, hub_meta):
condition_key = "dmsConnected"
elif "Theme.matugenAvailable" in visible_raw:
condition_key = "matugenAvailable"
elif "dock.config.enabled" in visible_raw:
condition_key = "dockEnabled"
if filename in BAR_TAB_FILES and not condition_key:
if setting_key.startswith("frame"):
condition_key = "frameEnabled"
@@ -509,6 +514,10 @@ def find_settings_components(content, filename, wrappers, tab_meta, hub_meta):
condition_key = "islandEnabled"
if filename == "DDotTab.qml" and not condition_key and setting_key != "dotEnabled":
condition_key = "dotEnabled"
if component == "SettingsCard":
card_conditions.append((match.start(), block_end, condition_key if extract_property(own, "visible") else None))
elif not condition_key:
condition_key = next((cond for start, end, cond in card_conditions if start < match.start() < end), None)
category, parent_label, _ = page_meta if page_meta else tab_meta.get(tab_index, TAB_META_DEFAULT)
enriched_keywords = enrich_keywords(label, description, category, tags, parent_label)
@@ -4605,7 +4605,8 @@
"panel",
"taskbar"
],
"parentLabel": "Dock"
"parentLabel": "Dock",
"conditionKey": "dockEnabled"
},
{
"section": "dockDisplays",
@@ -4672,7 +4673,8 @@
"widgets"
],
"parentLabel": "Dock",
"icon": "edit"
"icon": "edit",
"conditionKey": "dockEnabled"
},
{
"section": "dockLayout",
@@ -4711,7 +4713,8 @@
"space",
"taskbar"
],
"parentLabel": "Dock"
"parentLabel": "Dock",
"conditionKey": "dockEnabled"
},
{
"section": "dockSmartAutoHide",
@@ -4767,7 +4770,8 @@
],
"parentLabel": "Dock",
"icon": "visibility_off",
"description": "Hides only while a window overlaps the dock"
"description": "Hides only while a window overlaps the dock",
"conditionKey": "dockEnabled"
},
{
"section": "barNoBackground",
@@ -6423,7 +6427,8 @@
"start",
"start menu",
"style"
]
],
"conditionKey": "isNiri"
},
{
"section": "niriOverviewOverlayEnabled",
@@ -6446,7 +6451,8 @@
"start menu",
"typing"
],
"description": "Typing in the overview opens the launcher"
"description": "Typing in the overview opens the launcher",
"conditionKey": "isNiri"
},
{
"section": "launcherNiriOverview",
@@ -6902,7 +6908,8 @@
"wallpaper colors"
],
"parentLabel": "Wallpaper & colors",
"description": "Regenerate matugen colors when DMS starts, even if nothing changed."
"description": "Regenerate matugen colors when DMS starts, even if nothing changed.",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenSpec",
@@ -11459,6 +11466,33 @@
"icon": "widgets",
"description": "Clocks, monitors, plugins"
},
{
"section": "desktopGeneral",
"label": "General",
"tabIndex": 27,
"category": "Desktop widgets",
"keywords": [
"auto",
"clicks",
"components",
"compositors",
"conky",
"context",
"desktop",
"desktop clock",
"empty",
"general",
"menu",
"modules",
"right click",
"themselves",
"turns",
"wallpaper",
"widgets"
],
"icon": "mouse",
"description": "Auto turns it off on compositors that use clicks on the empty desktop themselves"
},
{
"section": "desktopWidgetGroups",
"label": "Groups",
@@ -11477,6 +11511,30 @@
],
"icon": "folder"
},
{
"section": "desktopContextMenu",
"label": "Right-click menu",
"tabIndex": 27,
"category": "Desktop widgets",
"keywords": [
"auto",
"click",
"clicks",
"components",
"compositors",
"conky",
"desktop",
"desktop clock",
"empty",
"menu",
"modules",
"right",
"themselves",
"turns",
"widgets"
],
"description": "Auto turns it off on compositors that use clicks on the empty desktop themselves"
},
{
"section": "pluginDirectory",
"label": "Directory",
@@ -14491,7 +14549,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "_tab_50",
@@ -14554,7 +14613,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateEmacs",
@@ -14580,7 +14640,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateFcitx5",
@@ -14607,7 +14668,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateFirefox",
@@ -14633,7 +14695,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateNeovimSetBackground",
@@ -14663,7 +14726,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateGtk",
@@ -14689,7 +14753,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "systemAppTheming",
@@ -14744,7 +14809,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateHyprland",
@@ -14770,7 +14836,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateKcolorscheme",
@@ -14797,7 +14864,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplates",
@@ -14898,7 +14966,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "runUserMatugenTemplates",
@@ -14932,7 +15001,8 @@
"wallpaper colors"
],
"parentLabel": "Wallpaper & colors",
"description": "Also runs the templates in your matugen config.toml"
"description": "Also runs the templates in your matugen config.toml",
"conditionKey": "matugenAvailable"
},
{
"section": "syncModeWithPortal",
@@ -15036,7 +15106,8 @@
"wallpaper"
],
"parentLabel": "Wallpaper & colors",
"description": "Requires the DMS Theme extension from the editor marketplace"
"description": "Requires the DMS Theme extension from the editor marketplace",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateWezterm",
@@ -15063,7 +15134,8 @@
"wallpaper",
"wezterm"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateZed",
@@ -15089,7 +15161,8 @@
"wallpaper",
"zed"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateDgop",
@@ -15115,7 +15188,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateEquibop",
@@ -15142,7 +15216,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateFoot",
@@ -15169,7 +15244,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateKitty",
@@ -15196,7 +15272,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateMangowc",
@@ -15222,7 +15299,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateNeovim",
@@ -15251,7 +15329,8 @@
"wallpaper"
],
"parentLabel": "Wallpaper & colors",
"description": "Required plugin: "
"description": "Required plugin: ",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateNiri",
@@ -15277,7 +15356,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplatePywalfox",
@@ -15303,7 +15383,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateQt5ct",
@@ -15329,7 +15410,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateQt6ct",
@@ -15355,7 +15437,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateQtengine",
@@ -15382,7 +15465,8 @@
"tint",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateVencord",
@@ -15409,7 +15493,8 @@
"vencord",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateVesktop",
@@ -15436,7 +15521,8 @@
"vesktop",
"wallpaper"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "matugenTemplateZenBrowser",
@@ -15462,7 +15548,8 @@
"wallpaper",
"zenbrowser"
],
"parentLabel": "Wallpaper & colors"
"parentLabel": "Wallpaper & colors",
"conditionKey": "matugenAvailable"
},
{
"section": "themeModeAutoEnabled",