summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin
diff options
context:
space:
mode:
authorAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
committerAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
commit70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch)
treeab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin
parent5d94c0a7d44a2255b81815a52a7056a94a39842d (diff)
downloadRaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz
RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml97
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml151
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md52
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json16
4 files changed, 316 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiSettings.qml
new file mode 100644
index 0000000..aa38bc9
--- /dev/null
+++ b/raveos-hyprland-theme/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-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml
new file mode 100644
index 0000000..6142692
--- /dev/null
+++ b/raveos-hyprland-theme/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-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/README.md
new file mode 100644
index 0000000..9102dda
--- /dev/null
+++ b/raveos-hyprland-theme/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-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleEmojiPlugin/plugin.json
new file mode 100644
index 0000000..ef16d01
--- /dev/null
+++ b/raveos-hyprland-theme/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"
+ ]
+}