From 5d94c0a7d44a2255b81815a52a7056a94a39842d Mon Sep 17 00:00:00 2001 From: nippy Date: Sat, 18 Apr 2026 13:49:56 +0200 Subject: update Raveos themes --- .../PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml | 97 +++++++++++++ .../PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml | 151 +++++++++++++++++++++ .../PLUGINS/ExampleEmojiPlugin/README.md | 52 +++++++ .../PLUGINS/ExampleEmojiPlugin/plugin.json | 16 +++ 4 files changed, 316 insertions(+) create mode 100644 raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml create mode 100644 raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml create mode 100644 raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md create mode 100644 raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin') diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml new file mode 100644 index 0000000..aa38bc9 --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml @@ -0,0 +1,97 @@ +import QtQuick +import qs.Common +import qs.Widgets +import qs.Modules.Plugins + +PluginSettings { + id: root + pluginId: "exampleEmojiPlugin" + + // Header section to explain what this plugin does + StyledText { + width: parent.width + text: "Emoji Cycler Settings" + font.pixelSize: Theme.fontSizeLarge + font.weight: Font.Bold + color: Theme.surfaceText + } + + StyledText { + width: parent.width + text: "Configure which emojis appear in your bar, how quickly they cycle, and how many show at once." + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + wrapMode: Text.WordWrap + } + + // Dropdown to select which emoji set to use + SelectionSetting { + settingKey: "emojiSet" + label: "Emoji Set" + description: "Choose which collection of emojis to cycle through" + options: [ + {label: "Happy & Sad", value: "happySad"}, + {label: "Hearts", value: "hearts"}, + {label: "Hand Gestures", value: "hands"}, + {label: "All Mixed", value: "mixed"} + ] + defaultValue: "happySad" + + // Update the actual emoji array when selection changes + onValueChanged: { + const sets = { + "happySad": ["๐Ÿ˜Š", "๐Ÿ˜ข", "๐Ÿ˜‚", "๐Ÿ˜ญ", "๐Ÿ˜", "๐Ÿ˜ก"], + "hearts": ["โค๏ธ", "๐Ÿงก", "๐Ÿ’›", "๐Ÿ’š", "๐Ÿ’™", "๐Ÿ’œ", "๐Ÿ–ค", "๐Ÿค"], + "hands": ["๐Ÿ‘", "๐Ÿ‘Ž", "๐Ÿ‘Š", "โœŒ๏ธ", "๐Ÿค˜", "๐Ÿ‘Œ", "โœ‹", "๐Ÿคš"], + "mixed": ["๐Ÿ˜Š", "โค๏ธ", "๐Ÿ‘", "๐ŸŽ‰", "๐Ÿ”ฅ", "โœจ", "๐ŸŒŸ", "๐Ÿ’ฏ"] + } + const newEmojis = sets[value] || sets["happySad"] + root.saveValue("emojis", newEmojis) + } + + Component.onCompleted: { + // Initialize the emojis array on first load + const currentSet = value || defaultValue + const sets = { + "happySad": ["๐Ÿ˜Š", "๐Ÿ˜ข", "๐Ÿ˜‚", "๐Ÿ˜ญ", "๐Ÿ˜", "๐Ÿ˜ก"], + "hearts": ["โค๏ธ", "๐Ÿงก", "๐Ÿ’›", "๐Ÿ’š", "๐Ÿ’™", "๐Ÿ’œ", "๐Ÿ–ค", "๐Ÿค"], + "hands": ["๐Ÿ‘", "๐Ÿ‘Ž", "๐Ÿ‘Š", "โœŒ๏ธ", "๐Ÿค˜", "๐Ÿ‘Œ", "โœ‹", "๐Ÿคš"], + "mixed": ["๐Ÿ˜Š", "โค๏ธ", "๐Ÿ‘", "๐ŸŽ‰", "๐Ÿ”ฅ", "โœจ", "๐ŸŒŸ", "๐Ÿ’ฏ"] + } + const emojis = sets[currentSet] || sets["happySad"] + root.saveValue("emojis", emojis) + } + } + + // Slider to control how fast emojis cycle (in milliseconds) + SliderSetting { + settingKey: "cycleInterval" + label: "Cycle Speed" + description: "How quickly emojis rotate (in seconds)" + defaultValue: 3000 + minimum: 500 + maximum: 10000 + unit: "ms" + leftIcon: "schedule" + } + + // Slider to control max emojis shown in the bar + SliderSetting { + settingKey: "maxBarEmojis" + label: "Max Bar Emojis" + description: "Maximum number of emojis to display in the bar at once" + defaultValue: 3 + minimum: 1 + maximum: 8 + unit: "" + rightIcon: "emoji_emotions" + } + + StyledText { + width: parent.width + text: "๐Ÿ’ก Tip: Click the emoji widget in your bar to open the emoji picker and copy any emoji to your clipboard!" + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + wrapMode: Text.WordWrap + } +} diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml new file mode 100644 index 0000000..6142692 --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml @@ -0,0 +1,151 @@ +import QtQuick +import Quickshell +import qs.Common +import qs.Services +import qs.Widgets +import qs.Modules.Plugins + +PluginComponent { + id: root + + layerNamespacePlugin: "emoji-cycler" + + property var enabledEmojis: pluginData.emojis || ["๐Ÿ˜Š", "๐Ÿ˜ข", "โค๏ธ"] + property int cycleInterval: pluginData.cycleInterval || 3000 + property int maxBarEmojis: pluginData.maxBarEmojis || 3 + + property int currentIndex: 0 + property var displayedEmojis: [] + + Timer { + interval: root.cycleInterval + running: true + repeat: true + onTriggered: { + if (root.enabledEmojis.length > 0) { + root.currentIndex = (root.currentIndex + 1) % root.enabledEmojis.length + root.updateDisplayedEmojis() + } + } + } + + function updateDisplayedEmojis() { + const maxToShow = Math.min(root.maxBarEmojis, root.enabledEmojis.length) + let emojis = [] + for (let i = 0; i < maxToShow; i++) { + const idx = (root.currentIndex + i) % root.enabledEmojis.length + emojis.push(root.enabledEmojis[idx]) + } + root.displayedEmojis = emojis + } + + Component.onCompleted: { + updateDisplayedEmojis() + } + + onEnabledEmojisChanged: updateDisplayedEmojis() + onMaxBarEmojisChanged: updateDisplayedEmojis() + + horizontalBarPill: Component { + Row { + id: emojiRow + spacing: Theme.spacingXS + + Repeater { + model: root.displayedEmojis + StyledText { + text: modelData + font.pixelSize: Theme.fontSizeLarge + } + } + } + } + + verticalBarPill: Component { + Column { + id: emojiColumn + spacing: Theme.spacingXS + + Repeater { + model: root.displayedEmojis + StyledText { + text: modelData + font.pixelSize: Theme.fontSizeMedium + anchors.horizontalCenter: parent.horizontalCenter + } + } + } + } + + popoutContent: Component { + PopoutComponent { + id: popoutColumn + + headerText: "Emoji Picker" + detailsText: "Click an emoji to copy it to clipboard" + showCloseButton: true + + property var allEmojis: [ + "๐Ÿ˜€", "๐Ÿ˜ƒ", "๐Ÿ˜„", "๐Ÿ˜", "๐Ÿ˜†", "๐Ÿ˜…", "๐Ÿคฃ", "๐Ÿ˜‚", "๐Ÿ™‚", "๐Ÿ™ƒ", + "๐Ÿ˜‰", "๐Ÿ˜Š", "๐Ÿ˜‡", "๐Ÿฅฐ", "๐Ÿ˜", "๐Ÿคฉ", "๐Ÿ˜˜", "๐Ÿ˜—", "๐Ÿ˜š", "๐Ÿ˜™", + "๐Ÿ˜‹", "๐Ÿ˜›", "๐Ÿ˜œ", "๐Ÿคช", "๐Ÿ˜", "๐Ÿค‘", "๐Ÿค—", "๐Ÿคญ", "๐Ÿคซ", "๐Ÿค”", + "๐Ÿค", "๐Ÿคจ", "๐Ÿ˜", "๐Ÿ˜‘", "๐Ÿ˜ถ", "๐Ÿ˜", "๐Ÿ˜’", "๐Ÿ™„", "๐Ÿ˜ฌ", "๐Ÿคฅ", + "๐Ÿ˜Œ", "๐Ÿ˜”", "๐Ÿ˜ช", "๐Ÿคค", "๐Ÿ˜ด", "๐Ÿ˜ท", "๐Ÿค’", "๐Ÿค•", "๐Ÿคข", "๐Ÿคฎ", + "๐Ÿคง", "๐Ÿฅต", "๐Ÿฅถ", "๐Ÿ˜ถโ€๐ŸŒซ๏ธ", "๐Ÿ˜ต", "๐Ÿ˜ตโ€๐Ÿ’ซ", "๐Ÿคฏ", "๐Ÿค ", "๐Ÿฅณ", "๐Ÿ˜Ž", + "๐Ÿค“", "๐Ÿง", "๐Ÿ˜•", "๐Ÿ˜Ÿ", "๐Ÿ™", "โ˜น๏ธ", "๐Ÿ˜ฎ", "๐Ÿ˜ฏ", "๐Ÿ˜ฒ", "๐Ÿ˜ณ", + "๐Ÿฅบ", "๐Ÿ˜ฆ", "๐Ÿ˜ง", "๐Ÿ˜จ", "๐Ÿ˜ฐ", "๐Ÿ˜ฅ", "๐Ÿ˜ข", "๐Ÿ˜ญ", "๐Ÿ˜ฑ", "๐Ÿ˜–", + "๐Ÿ˜ฃ", "๐Ÿ˜ž", "๐Ÿ˜“", "๐Ÿ˜ฉ", "๐Ÿ˜ซ", "๐Ÿฅฑ", "๐Ÿ˜ค", "๐Ÿ˜ก", "๐Ÿ˜ ", "๐Ÿคฌ", + "โค๏ธ", "๐Ÿงก", "๐Ÿ’›", "๐Ÿ’š", "๐Ÿ’™", "๐Ÿ’œ", "๐Ÿ–ค", "๐Ÿค", "๐ŸคŽ", "๐Ÿ’”", + "โค๏ธโ€๐Ÿ”ฅ", "โค๏ธโ€๐Ÿฉน", "๐Ÿ’•", "๐Ÿ’ž", "๐Ÿ’“", "๐Ÿ’—", "๐Ÿ’–", "๐Ÿ’˜", "๐Ÿ’", "๐Ÿ’Ÿ", + "๐Ÿ‘", "๐Ÿ‘Ž", "๐Ÿ‘Š", "โœŠ", "๐Ÿค›", "๐Ÿคœ", "๐Ÿคž", "โœŒ๏ธ", "๐ŸคŸ", "๐Ÿค˜", + "๐Ÿ‘Œ", "๐ŸคŒ", "๐Ÿค", "๐Ÿ‘ˆ", "๐Ÿ‘‰", "๐Ÿ‘†", "๐Ÿ‘‡", "โ˜๏ธ", "โœ‹", "๐Ÿคš" + ] + + Item { + width: parent.width + implicitHeight: root.popoutHeight - popoutColumn.headerHeight - popoutColumn.detailsHeight - Theme.spacingXL + + DankGridView { + id: emojiGrid + anchors.horizontalCenter: parent.horizontalCenter + width: Math.floor(parent.width / 50) * 50 + height: parent.height + clip: true + cellWidth: 50 + cellHeight: 50 + model: popoutColumn.allEmojis + + delegate: StyledRect { + width: 45 + height: 45 + radius: Theme.cornerRadius + color: emojiMouseArea.containsMouse ? Theme.surfaceContainerHighest : Theme.surfaceContainerHigh + border.width: 0 + + StyledText { + anchors.centerIn: parent + text: modelData + font.pixelSize: Theme.fontSizeXLarge + } + + MouseArea { + id: emojiMouseArea + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + + onClicked: { + Quickshell.execDetached(["dms", "cl", "copy", modelData]) + ToastService.showInfo("Copied " + modelData + " to clipboard") + popoutColumn.closePopout() + } + } + } + } + } + } + } + + popoutWidth: 400 + popoutHeight: 500 +} diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md new file mode 100644 index 0000000..9102dda --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md @@ -0,0 +1,52 @@ +# Emoji Cycler Plugin + +An example dms plugin that displays cycling emojis in your bar with an emoji picker popout. + +## Features + +- **Cycling Emojis**: Automatically rotates through your selected emoji set in the bar +- **Emoji Picker**: Click the widget to open a grid of 120+ emojis +- **Copy to Clipboard**: Click any emoji in the picker to copy it to clipboard +- **Customizable**: Choose emoji sets, cycle speed, and max emojis shown + +## Installation + +1. Copy this directory to `~/.config/DankMaterialShell/plugins/ExampleEmojiPlugin` +2. Open DMS Settings โ†’ Plugins +3. Click "Scan for Plugins" +4. Enable "Emoji Cycler" +5. Add `exampleEmojiPlugin` to your DankBar widget list + +## Settings + +### Emoji Set +Choose from different emoji collections: +- **Happy & Sad**: Mix of emotional faces +- **Hearts**: Various colored hearts +- **Hand Gestures**: Thumbs up, peace signs, etc. +- **All Mixed**: A bit of everything + +### Cycle Speed +Control how fast emojis rotate (500ms - 10000ms) + +### Max Bar Emojis +How many emojis to display at once (1-8) + +## Usage + +**In the bar**: Watch emojis cycle through automatically +**Click the widget**: Opens emoji picker with 120+ emojis +**Click any emoji**: Copies it to clipboard and shows toast + +## Example Code Highlights + +This plugin demonstrates: +- Using `PluginComponent` for bar integration +- `SelectionSetting`, `SliderSetting` for configuration +- Timer-based animation +- Popout content with grid layout +- External command execution (`Quickshell.execDetached`) +- Toast notifications (`ToastService.show`) +- Dynamic settings loading/saving + +Perfect template for creating your own DMS plugins! diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json new file mode 100644 index 0000000..ef16d01 --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json @@ -0,0 +1,16 @@ +{ + "id": "exampleEmojiPlugin", + "name": "Emoji Cycler", + "description": "Display cycling emojis in your bar with a handy emoji picker popout", + "version": "1.0.0", + "author": "AvengeMedia", + "type": "widget", + "capabilities": ["emoji-search", "clipboard", "dankbar-widget"], + "component": "./EmojiWidget.qml", + "icon": "mood", + "settings": "./EmojiSettings.qml", + "permissions": [ + "settings_read", + "settings_write" + ] +} -- cgit v1.3