Update .XCompose

Update .gitconfig
Update .tmux.conf
Update .config/DankMaterialShell/firefox.css
Update .config/DankMaterialShell/plugin_settings.json
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/DankActionsSettings.qml
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/DankActionsWidget.qml
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/plugin.json
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/index
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/refs/heads/master
Update .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/refs/remotes/origin/master
Update .config/DankMaterialShell/plugins/emojiLauncher/.git/refs/remotes/origin/main
Update .config/DankMaterialShell/settings.json
Update .config/alacritty/dank-theme.toml
Update .config/ghostty/config
Update .config/ghostty/themes/dankcolors
Update .config/niri/dms/colors.kdl
Update .config/nvim/lua/plugins/dankcolors.lua
Update .config/pda/config.toml
Update .local/bin/tmux-sessionizer
This commit is contained in:
Lewis Wynne 2026-02-13 13:02:07 +00:00
parent b18328bbad
commit deee85b676
20 changed files with 609 additions and 305 deletions

View file

@ -1,5 +1,4 @@
import QtQuick
import QtQuick.Controls
import qs.Common
import qs.Services
import qs.Widgets
@ -12,31 +11,35 @@ PluginSettings {
property string editingVariantId: ""
function loadVariantForEditing(variantData) {
editingVariantId = variantData.id || ""
nameField.text = variantData.name || ""
iconField.text = variantData.icon || ""
displayTextField.text = variantData.displayText || ""
displayCommandField.text = variantData.displayCommand || ""
clickCommandField.text = variantData.clickCommand || ""
middleClickCommandField.text = variantData.middleClickCommand || ""
rightClickCommandField.text = variantData.rightClickCommand || ""
updateIntervalField.text = (variantData.updateInterval || 0).toString()
showIconToggle.checked = variantData.showIcon !== undefined ? variantData.showIcon : true
showTextToggle.checked = variantData.showText !== undefined ? variantData.showText : true
editingVariantId = variantData.id || "";
nameField.text = variantData.name || "";
iconField.text = variantData.icon || "";
displayTextField.text = variantData.displayText || "";
displayCommandField.text = variantData.displayCommand || "";
clickCommandField.text = variantData.clickCommand || "";
middleClickCommandField.text = variantData.middleClickCommand || "";
rightClickCommandField.text = variantData.rightClickCommand || "";
updateIntervalField.text = (variantData.updateInterval || 0).toString();
showIconToggle.checked = variantData.showIcon !== undefined ? variantData.showIcon : true;
showTextToggle.checked = variantData.showText !== undefined ? variantData.showText : true;
visibilityCommandField.text = variantData.visibilityCommand || "";
visibilityIntervalField.text = (variantData.visibilityInterval || 0).toString();
}
function clearForm() {
editingVariantId = ""
nameField.text = ""
iconField.text = ""
displayTextField.text = ""
displayCommandField.text = ""
clickCommandField.text = ""
middleClickCommandField.text = ""
rightClickCommandField.text = ""
updateIntervalField.text = "0"
showIconToggle.checked = true
showTextToggle.checked = true
editingVariantId = "";
nameField.text = "";
iconField.text = "";
displayTextField.text = "";
displayCommandField.text = "";
clickCommandField.text = "";
middleClickCommandField.text = "";
rightClickCommandField.text = "";
updateIntervalField.text = "0";
showIconToggle.checked = true;
showTextToggle.checked = true;
visibilityCommandField.text = "";
visibilityIntervalField.text = "0";
}
StyledText {
@ -107,7 +110,8 @@ PluginSettings {
placeholderText: "e.g., Power Profile"
keyNavigationTab: iconField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(nameField)
if (hasFocus)
root.ensureItemVisible(nameField);
}
}
}
@ -129,7 +133,8 @@ PluginSettings {
keyNavigationBacktab: nameField
keyNavigationTab: displayTextField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(iconField)
if (hasFocus)
root.ensureItemVisible(iconField);
}
}
}
@ -152,7 +157,8 @@ PluginSettings {
keyNavigationBacktab: iconField
keyNavigationTab: displayCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(displayTextField)
if (hasFocus)
root.ensureItemVisible(displayTextField);
}
}
}
@ -174,7 +180,8 @@ PluginSettings {
keyNavigationBacktab: displayTextField
keyNavigationTab: clickCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(displayCommandField)
if (hasFocus)
root.ensureItemVisible(displayCommandField);
}
}
@ -204,7 +211,8 @@ PluginSettings {
keyNavigationBacktab: displayCommandField
keyNavigationTab: middleClickCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(clickCommandField)
if (hasFocus)
root.ensureItemVisible(clickCommandField);
}
}
@ -234,7 +242,8 @@ PluginSettings {
keyNavigationBacktab: clickCommandField
keyNavigationTab: rightClickCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(middleClickCommandField)
if (hasFocus)
root.ensureItemVisible(middleClickCommandField);
}
}
}
@ -256,7 +265,8 @@ PluginSettings {
keyNavigationBacktab: middleClickCommandField
keyNavigationTab: updateIntervalField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(rightClickCommandField)
if (hasFocus)
root.ensureItemVisible(rightClickCommandField);
}
}
}
@ -277,8 +287,10 @@ PluginSettings {
placeholderText: "0"
text: "0"
keyNavigationBacktab: rightClickCommandField
keyNavigationTab: visibilityCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus) root.ensureItemVisible(updateIntervalField)
if (hasFocus)
root.ensureItemVisible(updateIntervalField);
}
}
@ -291,6 +303,68 @@ PluginSettings {
}
}
Column {
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: "Visibility Condition (optional)"
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: visibilityCommandField
width: parent.width
placeholderText: "e.g., pgrep -x firefox (exit 0 = show, non-zero = hide)"
keyNavigationBacktab: updateIntervalField
keyNavigationTab: visibilityIntervalField
onFocusStateChanged: hasFocus => {
if (hasFocus)
root.ensureItemVisible(visibilityCommandField);
}
}
StyledText {
text: "Widget shows when command exits 0, hides when non-zero."
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
Column {
width: parent.width
spacing: Theme.spacingXS
StyledText {
text: "Visibility Check Interval (seconds, 0 = once on load)"
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
}
DankTextField {
id: visibilityIntervalField
width: parent.width
placeholderText: "0"
text: "0"
keyNavigationBacktab: visibilityCommandField
onFocusStateChanged: hasFocus => {
if (hasFocus)
root.ensureItemVisible(visibilityIntervalField);
}
}
StyledText {
text: "How often to re-check visibility condition. Set to 0 to check only once."
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width
}
}
Row {
width: parent.width
spacing: Theme.spacingL
@ -308,7 +382,7 @@ PluginSettings {
id: showIconToggle
checked: true
onToggled: isChecked => {
checked = isChecked
checked = isChecked;
}
}
}
@ -326,7 +400,7 @@ PluginSettings {
id: showTextToggle
checked: true
onToggled: isChecked => {
checked = isChecked
checked = isChecked;
}
}
}
@ -337,14 +411,20 @@ PluginSettings {
iconName: root.editingVariantId ? "check" : "add"
onClicked: {
if (!nameField.text) {
ToastService.showError("Please enter a variant name")
return
ToastService.showError("Please enter a variant name");
return;
}
var interval = parseInt(updateIntervalField.text) || 0
var interval = parseInt(updateIntervalField.text) || 0;
if (interval < 0) {
ToastService.showError("Update interval must be 0 or greater")
return
ToastService.showError("Update interval must be 0 or greater");
return;
}
var visInterval = parseInt(visibilityIntervalField.text) || 0;
if (visInterval < 0) {
ToastService.showError("Visibility interval must be 0 or greater");
return;
}
var variantConfig = {
@ -356,17 +436,19 @@ PluginSettings {
rightClickCommand: rightClickCommandField.text || "",
updateInterval: interval,
showIcon: showIconToggle.checked,
showText: showTextToggle.checked
}
showText: showTextToggle.checked,
visibilityCommand: visibilityCommandField.text || "",
visibilityInterval: visInterval
};
if (root.editingVariantId) {
variantConfig.name = nameField.text
updateVariant(root.editingVariantId, variantConfig)
variantConfig.name = nameField.text;
updateVariant(root.editingVariantId, variantConfig);
} else {
createVariant(nameField.text, variantConfig)
createVariant(nameField.text, variantConfig);
}
root.clearForm()
root.clearForm();
}
}
}
@ -445,11 +527,16 @@ PluginSettings {
StyledText {
text: {
var parts = []
if (model.displayText) parts.push("Text: " + model.displayText)
if (model.displayCommand) parts.push("Cmd: " + model.displayCommand)
if (model.updateInterval && model.updateInterval > 0) parts.push("Update: " + model.updateInterval + "s")
return parts.join(" | ") || "No display config"
var parts = [];
if (model.displayText)
parts.push("Text: " + model.displayText);
if (model.displayCommand)
parts.push("Cmd: " + model.displayCommand);
if (model.updateInterval && model.updateInterval > 0)
parts.push("Update: " + model.updateInterval + "s");
if (model.visibilityCommand)
parts.push("Vis: " + model.visibilityCommand);
return parts.join(" | ") || "No display config";
}
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
@ -459,11 +546,14 @@ PluginSettings {
StyledText {
text: {
var actions = []
if (model.clickCommand) actions.push("L: " + model.clickCommand)
if (model.middleClickCommand) actions.push("M: " + model.middleClickCommand)
if (model.rightClickCommand) actions.push("R: " + model.rightClickCommand)
return actions.join(" | ") || "No click actions"
var actions = [];
if (model.clickCommand)
actions.push("L: " + model.clickCommand);
if (model.middleClickCommand)
actions.push("M: " + model.middleClickCommand);
if (model.rightClickCommand)
actions.push("R: " + model.rightClickCommand);
return actions.join(" | ") || "No click actions";
}
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
@ -496,7 +586,7 @@ PluginSettings {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
root.loadVariantForEditing(model)
root.loadVariantForEditing(model);
}
}
}
@ -521,7 +611,7 @@ PluginSettings {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
removeVariant(model.id)
removeVariant(model.id);
}
}
}

View file

@ -1,5 +1,4 @@
import QtQuick
import Quickshell
import Quickshell.Io
import qs.Common
import qs.Services
@ -25,17 +24,20 @@ PluginComponent {
property string currentOutput: ""
property bool isLoading: false
visibilityCommand: variantData?.visibilityCommand || ""
visibilityInterval: variantData?.visibilityInterval || 0
onVariantDataChanged: {
updatePropertiesFromVariantData()
updatePropertiesFromVariantData();
}
Connections {
target: PluginService
function onPluginDataChanged(changedPluginId) {
if (changedPluginId === "dankActions" && variantId) {
const newData = PluginService.getPluginVariantData("dankActions", variantId)
const newData = PluginService.getPluginVariantData("dankActions", variantId);
if (newData) {
variantData = newData
variantData = newData;
}
}
}
@ -43,69 +45,69 @@ PluginComponent {
function updatePropertiesFromVariantData() {
if (!variantData) {
displayIcon = "terminal"
displayText = ""
displayCommand = ""
clickCommand = ""
middleClickCommand = ""
rightClickCommand = ""
updateInterval = 0
showIcon = true
showText = true
currentOutput = ""
return
displayIcon = "terminal";
displayText = "";
displayCommand = "";
clickCommand = "";
middleClickCommand = "";
rightClickCommand = "";
updateInterval = 0;
showIcon = true;
showText = true;
currentOutput = "";
return;
}
displayIcon = variantData.icon || "terminal"
displayText = variantData.displayText || ""
displayCommand = variantData.displayCommand || ""
clickCommand = variantData.clickCommand || ""
middleClickCommand = variantData.middleClickCommand || ""
rightClickCommand = variantData.rightClickCommand || ""
updateInterval = variantData.updateInterval || 0
showIcon = variantData.showIcon !== undefined ? variantData.showIcon : true
showText = variantData.showText !== undefined ? variantData.showText : true
displayIcon = variantData.icon || "terminal";
displayText = variantData.displayText || "";
displayCommand = variantData.displayCommand || "";
clickCommand = variantData.clickCommand || "";
middleClickCommand = variantData.middleClickCommand || "";
rightClickCommand = variantData.rightClickCommand || "";
updateInterval = variantData.updateInterval || 0;
showIcon = variantData.showIcon !== undefined ? variantData.showIcon : true;
showText = variantData.showText !== undefined ? variantData.showText : true;
if (displayCommand) {
Qt.callLater(refreshOutput)
Qt.callLater(refreshOutput);
} else {
currentOutput = displayText
currentOutput = displayText;
}
if (updateInterval > 0) {
updateTimer.restart()
updateTimer.restart();
}
}
onDisplayCommandChanged: {
if (displayCommand) {
Qt.callLater(refreshOutput)
Qt.callLater(refreshOutput);
} else {
currentOutput = displayText
currentOutput = displayText;
}
}
onDisplayTextChanged: {
if (!displayCommand) {
currentOutput = displayText
currentOutput = displayText;
}
}
onUpdateIntervalChanged: {
if (updateInterval > 0) {
updateTimer.restart()
updateTimer.restart();
} else {
updateTimer.stop()
updateTimer.stop();
}
}
Component.onCompleted: {
if (displayCommand) {
Qt.callLater(refreshOutput)
Qt.callLater(refreshOutput);
} else {
currentOutput = displayText
currentOutput = displayText;
}
if (updateInterval > 0) {
updateTimer.start()
updateTimer.start();
}
}
@ -116,27 +118,27 @@ PluginComponent {
running: false
onTriggered: {
if (root.displayCommand) {
root.refreshOutput()
root.refreshOutput();
}
}
}
function refreshOutput() {
if (!displayCommand) {
currentOutput = displayText
return
currentOutput = displayText;
return;
}
isLoading = true
displayProcess.running = true
isLoading = true;
displayProcess.running = true;
}
function executeCommand(command) {
if (!command) return
isLoading = true
actionProcess.command = ["sh", "-c", command]
actionProcess.running = true
if (!command)
return;
isLoading = true;
actionProcess.command = ["sh", "-c", command];
actionProcess.running = true;
}
Process {
@ -146,14 +148,14 @@ PluginComponent {
stdout: SplitParser {
onRead: data => {
root.currentOutput = data.trim()
root.currentOutput = data.trim();
}
}
onExited: (exitCode, exitStatus) => {
root.isLoading = false
root.isLoading = false;
if (exitCode !== 0) {
console.warn("CustomActions: Display command failed with code", exitCode)
console.warn("CustomActions: Display command failed with code", exitCode);
}
}
}
@ -164,20 +166,20 @@ PluginComponent {
running: false
onExited: (exitCode, exitStatus) => {
root.isLoading = false
root.isLoading = false;
if (exitCode === 0) {
if (root.displayCommand) {
root.refreshOutput()
root.refreshOutput();
}
} else {
console.warn("CustomActions: Action command failed with code", exitCode)
console.warn("CustomActions: Action command failed with code", exitCode);
}
}
}
pillClickAction: () => {
if (root.clickCommand) {
root.executeCommand(root.clickCommand)
root.executeCommand(root.clickCommand);
}
}
@ -189,11 +191,11 @@ PluginComponent {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: (mouse) => {
onClicked: mouse => {
if (mouse.button === Qt.MiddleButton && root.middleClickCommand) {
root.executeCommand(root.middleClickCommand)
root.executeCommand(root.middleClickCommand);
} else if (mouse.button === Qt.RightButton && root.rightClickCommand) {
root.executeCommand(root.rightClickCommand)
root.executeCommand(root.rightClickCommand);
}
}
@ -229,11 +231,11 @@ PluginComponent {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: (mouse) => {
onClicked: mouse => {
if (mouse.button === Qt.MiddleButton && root.middleClickCommand) {
root.executeCommand(root.middleClickCommand)
root.executeCommand(root.middleClickCommand);
} else if (mouse.button === Qt.RightButton && root.rightClickCommand) {
root.executeCommand(root.rightClickCommand)
root.executeCommand(root.rightClickCommand);
}
}

View file

@ -2,7 +2,7 @@
"id": "dankActions",
"name": "Dank Actions",
"description": "Execute custom commands with dynamic output display and configurable icons",
"version": "1.0.4",
"version": "1.0.5",
"license": "MIT",
"author": "Avenge Media",
"icon": "terminal",

View file

@ -1 +1 @@
87870d8b70758f08aa8fd5401a0e4eec3941ed48
86c1e03fd8aa106728b46fe3fe4cb085c33fd698

View file

@ -1 +1 @@
87870d8b70758f08aa8fd5401a0e4eec3941ed48
da1714820ff2c997092c97d31c72faad5a4e5a01

View file

@ -1 +1 @@
2951ec7f823c983c11b6b231403581a386a7c9f6
bd2df8723d417d11dc0ce6ddc225d25f707ce2f5